参考链接: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秒时,也禁止写入操作。
标签:面试题,写入,主从复制,复制,高可用性,缓冲区,服务器,连接 From: https://www.cnblogs.com/xiaochaoheni/p/17724735.html