脑裂问题(由于网络原因选举出两个master,此时client还在写一个老的master)
解决方案:
通过配置 min-slave-to-write 和 min-slave-max-lag 要求至少有一个slave复制和同步数据延迟不能超过10秒,就是说一旦所有slave复制数据都超过了10秒,整个时候master就不再接受请求了
(client 端可以通过降级或者将消息写到kafaka 然后每10秒拉去消息尝试重新写到master)
主从复制的完整流程:
1 slave node 启动 仅仅保存master node的信息 包括node的ip和host,但是复制流程还没开始。。
2 slave node 内部有个定时任务 每秒检查是否有新的master node 要连接和复制,如果发现 就跟master建立socket网络连接
3 slave node 发送ping命令给master
4 口令认证,如果master设置了requirepass,那么 slave node必须发送masterauth的口令进行认证
5 master 第一次执行全量复制 将所有数据发送给slave
6 master node 后续持续将写命令 异步复制给slave
backlog
master node 有一个backlog ,默认大小时1M
master node 给slave复制数据时,也将数据在backlog中同步写一份
backlog 主要是用来做全量复制中断开网络情况乱下的增量复制的