跳过正文
  1. 全部/
  2. 笔记/
  3. 面试/
  4. 数据库/
  5. Redis/

04 主从集群

目录

主从同步
#

全量复制(Full Sync)增量复制(Partial Sync)

全量同步
#

  • slave 节点请求增量同步
  • master节点判断 replid ,发现不一致,拒绝增量同步
  • master将完整内存生成rdb,将rdb发送到slave
  • slave 清空本地数据,加载RDB文件
  • 发送剩余未同步的缓冲命令
    Pasted image 20260402162520.png

增量复制
#

  • 从服务器在恢复网络后,会发送 psync 命令给主服务器,此时的 psync 命令里的 offset 参数不是 -1;
  • 主服务器收到该命令后,然后用 CONTINUE 响应命令告诉从服务器接下来采用增量复制的方式同步数据;
  • 然后主服务将主从服务器断线期间,所执行的写命令发送给从服务器,然后从服务器执行这些命令。
  • repl_backlog_buffer,是一个「环形」缓冲区,用于主从服务器断连后,从中找到差异的数据
  • replication offset,标记上面那个缓冲区的同步进度,主从服务器都有各自的偏移量

哨兵模式
#

Redis 哨兵(Sentinel)是 Redis 官方提供的一种高可用解决方案,用于在主从复制架构中实现自动故障检测与自动切换(failover)。核心目标是:当主节点不可用时,系统可以自动选举新的主节点,并让客户端继续工作。

作用
#

  1. 监控主从节点是否正常运行;​
  2. 通过发布订阅模式,将故障转移的结果通知给订阅者;​
  3. 当主节点发生故障时,自动进行故障转移,选择一个最合适的从节点升级为主节点,并通知应用方更新配置。

流程
#

主观下线:当某一个哨兵认为主节点不可达(超过 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 更新客户端信息

Reply by Email