主从同步分为以下几个情况
1 从节点和主节点建立连接时进行全量同步
2 从节点和主节点正常运行时同步
3 从节点和主节点断开连接后重新连接进行全量或者增量同步
从节点和主节点建立连接时同步
1 从节点向主节点发生psync repId offsetId,其中repId是主节点标识,offsetId代表偏移量,由于还未开始复制,offset = -1,
2 主节点会响应 fullresync repId offsetId,从节点会将该信息保存下来,后续需要使用。
3 主节点接收后,会fork一个进程,执行bgsave异步生成RDB文件,从节点接收到后,会加载RDB到内存中。
4 这个时候,主节点是非阻塞的,在从节点加载RDB文件期间,主节点执行的指令会存放到replication buffer 复制缓冲区中,在从节点加载完RDB文件后,主节点会将replication buffer中的内容发送给从节点,从节点加载。
主从节点正常运行时同步
主节点会将写操作记录到replication buffer 复制缓冲区中
主节点会异步的将复制缓冲区中的数据同步给从节点
从节点按顺序执行这些操作。
从节点和主节点断开连接后重新连接进行全量同步或者增量同步
一般会进行增量同步,但是在某些情况下会进行全量同步
全量同步的情况有
1 当从节点在恢复期间,主节点发生了重新选举,这个时候repId会比对不一致
2 在断开连接期间,主节点的replication buffer的最小的id已经大于从节点的offsetId
总结
从redis主从同步的过程可知,redis主从架构是基于AP模型设计的,在保证可用性的同时会牺牲一定程度的一致性,所以,在一些要求保证强一致性的场景下,redis主从架构不适合作为缓存数据库
标签:同步,redis,节点,replication,全量,主从 From: https://blog.csdn.net/sjdxx/article/details/143201448