主从同步#
全量复制(Full Sync) 和 增量复制(Partial Sync)
全量同步#
- slave 节点请求增量同步
- master节点判断 replid ,发现不一致,拒绝增量同步
- master将完整内存生成rdb,将rdb发送到slave
- slave 清空本地数据,加载RDB文件
- 发送剩余未同步的缓冲命令

增量复制#
- 从服务器在恢复网络后,会发送 psync 命令给主服务器,此时的 psync 命令里的 offset 参数不是 -1;
- 主服务器收到该命令后,然后用 CONTINUE 响应命令告诉从服务器接下来采用增量复制的方式同步数据;
- 然后主服务将主从服务器断线期间,所执行的写命令发送给从服务器,然后从服务器执行这些命令。
- repl_backlog_buffer,是一个「环形」缓冲区,用于主从服务器断连后,从中找到差异的数据
- replication offset,标记上面那个缓冲区的同步进度,主从服务器都有各自的偏移量
哨兵模式#
Redis 哨兵(Sentinel)是 Redis 官方提供的一种高可用解决方案,用于在主从复制架构中实现自动故障检测与自动切换(failover)。核心目标是:当主节点不可用时,系统可以自动选举新的主节点,并让客户端继续工作。
作用#
- 监控主从节点是否正常运行;
- 通过发布订阅模式,将故障转移的结果通知给订阅者;
- 当主节点发生故障时,自动进行故障转移,选择一个最合适的从节点升级为主节点,并通知应用方更新配置。
流程#
主观下线:当某一个哨兵认为主节点不可达(超过 down-after-milliseconds),就会标记
客观下线:当多个哨兵达成共识
Leader 哨兵的选举策略
- 哪个哨兵节点判断主节点为「客观下线」,这个哨兵节点就是候选者,所谓的候选者就是想当 Leader 的哨兵。
- 候选者会向其他哨兵发送命令,表明希望成为 Leader 来执行主从切换,并让所有其他哨兵对它进行投票。
- 每个哨兵只有一次投票机会,如果用完后就不能参与投票了,可以投给自己或投给别人,但是只有候选者才能把票投给自己。
- 如果某个哨兵节点获得了超过半数哨兵节点的选票,且大于 quorum 配置值,就会成为 Leader 哨兵,否则重新进行选举。
故障转移:
选择主节点
1. 判断slave的优先级 (默认值 100,取值范围 0-100,是0不参与选举)
2. 判断offset值,数据越新,优先级越高
3. 根据ID最小选择(runId 是 Redis 每次启动随机生成的 Redis 标识)
通知
SLAVEOF NO ONE
SLAVEOF
