Redis主备节点,怎么样防止数据不一致
从节点启动后,会向主节点发送slaveof命令,会进行一次全量同步:
1)从向主发送psync命令,告诉主需要同步数据
2)主会通过命令bgsave,生成RDB文件快照,并发送给从
3)从节点加载RDB文件,并将数据库状态变更为和主一致
4)主节点发送保持在缓冲区里的所有写操作命令,通知从节点可以增量更新
5)从节点执行这些命令
当从节点断开后重新连接,需要增量同步:
1)从向主发送psync命令,告诉主需要同步数据
2)主收到后会向从发送 +continue,告诉从可以进行部分同步
3)主向从发送断线期间的所有写命令
4)从执行这些写命令
当从节点第一次连接主节点的时候会发送自己的服务ID,当主节点没有保存过这个ID,就会全量同步,否则就是增量同步。
增量同步涉及复制偏移量,master每执行一条写命令,offset+1,发送给从节点执行后,从节点offset+1;增量同步时,从节点发送的psync命令中包含服务ID和自己的偏移量,主节点根据便宜量来发送需要从节点执行的写命令。
主节点缓冲区:
主节点维护的一个固定长度的先进先出队列。











网友评论