Redis 源码解析 - Redis 故障转移流程和原理剖析

Redis 故障转移(Failover)是指在主节点失效时,自动将其中一个从节点提升为主节点的过程,以确保系统的高可用性。在Redis中,有两种主要的故障转移方式:基于Redis Sentinel的故障转移和Redis Cluster的故障转移。

基于Redis Sentinel的故障转移

  1. 故障检测:

    • Sentinel(哨兵)通过定期向主节点和从节点发送PING命令来监控它们的健康状态。
    • 当主节点连续几次未能响应PING命令时,Sentinel将主节点标记为“主观下线”(SDOWN)。
  2. 协商客观下线:

    • 主观下线后,Sentinel之间会通过发布/订阅机制和其他Sentinel通信,询问它们是否也认为主节点不可达。
    • 若达到配置文件中设置的Sentinel数量阈值(一般要求大多数同意),则主节点被标记为“客观下线”(ODOWN)。
  3. 选举领导者 Sentinel:

    • 在确定主节点客观下线后,Sentinel之间通过Raft或类似算法选举出一个领导者 Sentinel(Leader Sentinel)来执行故障转移操作。
  4. 选择新主节点:

    • Leader Sentinel会选择一个从节点作为新的主节点,依据的因素可能包括:从节点的优先级、复制延迟、复制偏移量等。
  5. 故障转移执行:

    • Leader Sentinel会执行以下操作:
      • 将选定的从节点晋升为主节点,通过发送 FAILOVER 命令。
      • 让其他从节点改为复制新的主节点。
      • 更新所有Sentinel和客户端关于新主节点的信息。
  6. 配置更新:

    • Sentinel会更新自己的配置,并通过发布与订阅机制通知其他Sentinel和客户端关于新的主节点位置。

基于Redis Cluster的故障转移

  1. 故障检测:

    • Redis Cluster中的每个节点都负责监测与其相连的其他节点的健康状况,通过互相发送PING命令。
  2. 主节点下线:

    • 当一个主节点长时间不响应,其他节点会认为它已下线,并通过Gossip协议传播这个状态信息。
  3. 槽位重新分配:

    • 下线主节点负责的槽位需要被其他在线节点接管。Cluster中的任一在线节点都可以发起槽位的重新分配。
    • 这个过程包括选择合适的从节点提升为主节点,并将槽位迁移至新主节点。
  4. 数据迁移:

    • 槽位迁移期间,Redis会使用MIGRATE命令将数据从旧主节点移动到新主节点。
  5. 配置更新:

    • 集群中的每个节点通过Gossip协议广播集群配置的更改,包括新的主节点信息。

在源码层面上,对于Redis Sentinel,故障转移的相关逻辑主要集中在 sentinel.c 文件中,而对于Redis Cluster,故障转移相关的实现可以在 cluster.c 文件中找到。故障转移的过程中,涉及到的不仅仅是主从切换,还包括了节点间的网络通信、状态同步、配置更新等一系列复杂的操作。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值