Redis 主从架构故障转移

Redis 主从架构中,当主节点(Master)发生故障时,Redis Sentinel 会自动触发故障转移(Failover),将某个从节点(Slave)提升为新的主节点。Sentinel 在选择新主节点时,会根据多个因素综合评估,以确保选出最合适的从节点,通常包括最新的数据节点这一因素。具体的判断过程如下:

1. Redis Sentinel 的故障检测和切换流程

  1. 主观下线(SDOWN):一个 Sentinel 实例发现主节点不可用时,会标记该节点为“主观下线”。
  2. 客观下线(ODOWN):多个 Sentinel 实例都检测到主节点不可用,并且达成一致,才会标记该节点为“客观下线”,从而触发故障切换。
  3. 故障转移:Redis Sentinel 通过投票机制选举出一个 Leader Sentinel,由该 Leader 负责执行故障转移操作。

2. 从节点提升为主节点的选择标准

在执行故障转移时,Leader Sentinel 会从所有从节点中挑选一个最合适的节点提升为新的主节点。选择标准如下:

  1. 复制偏移量(Replication Offset)
    • Redis Sentinel 首先选择复制偏移量最大的从节点。复制偏移量越大,表示该从节点同步的数据越多,即数据越接近主节点的数据。
    • Sentinel 会比较所有从节点的 master_repl_offset(主从同步偏移量)属性值,偏移量最大的从节点通常拥有最接近主节点的数据。
  2. 从节点优先级(Slave Priority)
    • 每个从节点可以配置一个 slave-priority 参数,表示该从节点作为主节点候选的优先级,优先级值越小,优先级越高。
    • 在主从切换时,Sentinel 会首先排除掉优先级设置为 0 的从节点(slave-priority=0 表示该从节点不参与故障切换),然后在其他节点中选择优先级最高的节点。
    • 如果有多个从节点的复制偏移量相同,那么 slave-priority 值小的从节点将优先成为新的主节点。
  3. 从节点的响应时间
    • Sentinel 会检查从节点的响应时间,即从节点的延迟(lag),延迟较小的从节点通常具有更高的可靠性。
    • 如果多个从节点的偏移量和优先级相同,那么 Sentinel 会优先选择网络延迟较小的从节点。
  4. 运行状态和断线时长
    • Sentinel 会检查从节点的运行状态和与主节点断开连接的时长,如果某个从节点与主节点断开连接的时间较长,Sentinel 可能会优先选择其他状态更好的节点作为主节点。

3. 具体判断过程示例

假设有以下从节点状态:

从节点复制偏移量slave-priority延迟断线时长
从节点 A100000015 ms1 秒
从节点 B99950012 ms1 秒
从节点 C1000000210 ms1 秒

根据上述标准,Sentinel 会进行以下判断:

  1. 首先选择 复制偏移量最大的节点(从节点 A 和 C 偏移量最大,为 1000000)。
  2. 在偏移量相同的节点中,选择 slave-priority 值最小的节点。此时从节点 A 的优先级(slave-priority=1)高于从节点 C(slave-priority=2)。
  3. Sentinel 会选择 从节点 A 作为新的主节点。

4. Sentinel 故障转移过程中的注意事项

  • 数据一致性:Redis 的主从复制默认是异步复制,所以在故障转移时,新的主节点可能会略微落后于旧主节点的数据。Sentinel 通过选择复制偏移量最大的从节点,尽量确保数据的完整性。
  • 配置从节点为只读:一旦某个从节点被提升为主节点,Sentinel 会重新配置其余从节点,指向新的主节点继续同步数据。
  • 强一致性要求:如果业务对数据一致性要求极高,可以考虑使用 Redis 的半同步复制模式(WAIT 命令),但这会影响性能。

5. 总结

在 Redis 故障切换时,Sentinel 会综合考虑多个因素来选定最合适的从节点提升为主节点:

  1. 复制偏移量:优先选择复制偏移量最大的从节点,以确保新主节点拥有最新的数据。
  2. 从节点优先级:在偏移量相同的情况下,优先选择 slave-priority 值最小的从节点。
  3. 响应延迟:偏移量和优先级相同的情况下,优先选择延迟较小的节点。

Redis Sentinel 通过这些标准,在主节点故障时能够尽量确保数据完整性和快速故障恢复,提高 Redis 集群的高可用性和稳定性。

0 0 投票数
Article Rating
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x