Redis主从同步机制是一种分布式数据库架构设计,用于确保主数据库(Master)和从数据库(Slave)之间的数据一致性,从而实现数据冗余、负载均衡、故障转移等功能。以下是Redis主从同步机制的关键要点:
-
主从角色:
- Redis主节点负责处理所有的写操作请求,并将这些更改记录在自己的内存中。
- Redis从节点通过复制主节点的数据及后续的写命令来保持与主节点的数据同步。
-
数据同步过程:
-
全量同步(Full Resynchronization): 当一个新的从节点加入集群或者主从节点之间的连接断开重连时,从节点通常会发起全量同步。主节点执行
bgsave
生成RDB(Redis Database)文件,即Redis的持久化快照,然后将这个快照文件传输给从节点,从节点载入此快照,从而完成初始的数据同步。 -
增量同步(Partial Resynchronization / Incremental Resynchronization): 全量同步完成后,主节点继续通过命令传播的方式,将之后接收到的所有写命令异步地发送给从节点。从节点接收到这些命令后,执行相同的写操作,从而保持与主节点的实时同步。Redis 2.8版本以后引入了
PSYNC
命令,可以更加高效且可靠地进行增量同步,即使在部分网络中断后也能尽可能减少数据丢失的风险。
-
-
故障转移与高可用性: 配合Sentinel或Cluster模式,Redis主从架构还可以实现自动故障检测和主节点切换。当主节点出现故障时,从节点可以被提升为主节点,其他从节点再与其同步,确保服务的连续性和数据的完整性。
-
读写分离: 在主从结构中,从节点可以承担读取请求的压力,从而减轻主节点的工作负担,实现读写分离,提高系统整体性能。
总之,Redis主从同步机制是一种重要的高可用和扩展性解决方案,它可以保证Redis系统的数据安全性和服务稳定性。
全量同步
步骤如下:(全量)
1.从服务器向主服务器发送同步命令 sync;
2.主数据库接收到同步命令后,会执行 bgsave 命令,在后台生成一个 rdb 文件,并使用一个缓冲区记录从现在开始执行的所有写命令;
3.当主服务器执行完 bgsave 命令后,主服务器会将 bgsave 命令生成的 rdb 文件发送给从服务器;
4.从服务器接收到这个 rdb 文件,然后加载到内存 ;之后主服务器会把刚刚在缓存区的命令同步过来,从服务器就会执行这些命名。(两边就一致了)
5.以上处理完之后,之后主数据库每执行一个写命令,都会将被执行的写命令发送给从数据库。
增量同步
-
初始化阶段:
- 当从节点启动或者重新连接到主节点时,它会向主节点发送
PSYNC
命令,带上当前从节点已知的复制偏移量和主节点运行的复制ID(在Redis 2.8版本以上)。
- 当从节点启动或者重新连接到主节点时,它会向主节点发送
-
判断同步类型:
- 主节点根据从节点提供的复制偏移量和复制ID决定采取哪种同步方式:
- 如果从节点的复制偏移量不正确或者复制ID不匹配(例如首次同步或长时间断连后重新连接),主节点会选择进行全量同步(Full Resynchronization)。
- 如果复制ID匹配且偏移量之后有新的写命令记录,则主节点选择进行增量同步(Partial Resynchronization)。
- 主节点根据从节点提供的复制偏移量和复制ID决定采取哪种同步方式:
-
增量同步实施:
- 有效情况下,主节点直接将从节点缺失的这部分命令日志(也称为AOF重写日志或复制积压缓冲区中的内容)发送给从节点,而不是整个数据库的数据。
- 从节点接收并执行这些命令日志,按照相同的顺序更新其内部数据结构,从而达到与主节点一致的状态。
-
持续同步:
- 同步完成后,主节点继续将接收到的新写命令通过命令传播的方式发送给从节点,从节点持续执行这些命令以保持同步状态。
- 从节点也会不断将自己的复制偏移量回传给主节点,以便主节点监控复制进度和健康状况。