Redis主从复制,高可用性面试题

发布时间 2023-09-23 17:50:47作者: 小超和你

参考链接:https://xiaolincoding.com/redis/cluster/master_slave_replication.html#%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%90%8C%E6%AD%A5

 

主从第一步同步的过程?

 分成三步进行:

1、建立连接,从服务器获得主服务的id和复制位置,一开始是-1。

2、主服务器fork一个子进程用来创建当前的RDB,并将RDB传输给从服务器。

3、将forkRDB和传输过程中产生的新写入操作写入缓冲区中,并将缓冲区中的内容通过长连接发送给从服务器。

 

后续的同步怎么保证?

建立TCP/IP长连接,将新的写入命令传给从服务器。

 

主服务器同步压力太大怎么分摊主服务器压力?

通过赋给从服务器职能,使得从服务器也能进行主从复制。

 

增量复制的概念?

因为网络关系tcp/ip断开后,主从数据库出现不一致的情况,就需要进行增量复制。

存在环形缓冲区,用来存放每次写入命令的备份。

主服务器记录写的位置,从服务器记录一个读的位置,进行比对,就能知道从哪个地方开始重新发给从服务器,如果位置差距过大超过了环形缓冲区的大小,就需要进行全量复制。

这个环形缓冲区一般大小是,重新建立连接的时间 * 每秒写入命令的大小 * 2  (10mb)。

Redis主从节点时长连接还是短连接?

长连接

 

怎么判断 Redis 某个节点是否正常工作?

pingpong机制,所有节点向那个节点ping一次,回应正常的超过1/2,即可证明这个节点是正常的。

主从复制架构中,过期key如何处理?

主服务器中key过期了,将过期的key用del指令的方式传给从服务器。

Redis 是同步复制还是异步复制?

异步。

主从复制中两个 Buffer(replication buffer 、repl backlog buffer)有什么区别?

replication buffer 是在创建RDB和传输RDB时,写入命令暂时存放的地方,是长连接正常连接时,进行主从同步的地方。

repl backlog buffer 是在进行增量复制的时候,暂存的写入命令,为了保证一致性的环形缓冲区。

减少异步复制的数据丢失的方案?

1、首先保证网络畅通,尽量减少异步同步时,主从同步的时间。

2、在异步同步延迟过高的情况下,用消息队列削峰或者暂时禁止新的写入操作。

3、客户端将写入操作暂存本地,等处理完了之后再写入主服务器。

集群产生脑裂数据丢失?

产生数据丢失的原因?

因为网络原因导致主服务器与从服务器断开,但是写的命令正常进行,哨兵在监测到主服务器“下线”之后推举出新的主服务器,这时候旧的主服务器重新连接,导致变成从服务器。

这时候建立连接时会进行全量复制,这时候写的命令就会丢失。

 

方案?

当主服务器连接的从节点没有一半时,就有被挂掉的风险,此时禁止写入操作。

延迟超过n秒时,也禁止写入操作。