redis哨兵如何选举的

worktile 其他 20

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Redis哨兵是用于监控Redis主从高可用性的一个组件,它的一项重要功能就是进行主节点的选举。当Redis主节点失效时,哨兵会自动选举一个新的主节点来接管服务。下面我将详细介绍Redis哨兵的选举过程。

    选举过程如下:

    1. 哨兵集合的形成:在一开始,有一个或多个哨兵节点与Redis主从集群建立连接,这些哨兵节点会进行通信组成一个哨兵集合。

    2. 哨兵节点间的通信:哨兵节点之间通过PUBLISH和SUBSCRIBE命令进行消息的发布和订阅,用来传递监控和选举的相关信息。

    3. 主观失效检测:每个哨兵节点会定时向集群中的主节点发送PING/SENTINEL命令,通过检测主节点是否活着来确认主节点是否失效。如果一个哨兵节点连续发送多次PING命令没有收到回应,则认为主节点失效。

    4. 对主观失效主节点的选举:如果一个哨兵节点认为主节点失效,它会开始对主观失效的主节点进行选举。

      • 哨兵节点首先会选择从节点中的一个作为新的主节点,这个从节点必须满足以下条件:复制偏移量最大(即数据更新最多)、优先级最高(可以设置,优先级越高越有可能被选中)、复制连接的状态正常。

      • 如果从节点没有满足条件的,则哨兵节点会选择自己成为新的主节点。

    5. 对新的主节点的选举:选举出新的主节点后,哨兵节点会向所有哨兵节点发送包含新主节点信息的REVIVE消息,各个哨兵节点再次进行选举,确保对新主节点的认可性。只有当大部分哨兵节点都同意选举结果,新的主节点才会被认可。

    6. 同步选举结果:最终选举结果会保存在哨兵节点的sentinel.conf配置文件中,并通过向集群中的所有Redis节点发送新主节点信息的命令(PUBLISH和SUBSCRIBE)来通知其他节点。

    通过以上选举过程,Redis哨兵能够实现主节点的自动选举,确保Redis主从集群的高可用性。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Redis哨兵(Redis Sentinel)是Redis提供的高可用解决方案,用于监控和管理Redis集群。当主节点(master)失效时,哨兵会进行选举,选出一个新的主节点。下面是Redis哨兵选举的过程:

    1. 哨兵发现主节点失效:每个哨兵都会定时向Redis集群中的所有节点发送PING命令,如果一个节点在指定的时间内没有回复,哨兵就会认为该节点失效,然后开始选举。

    2. 选举开始:当多个哨兵同时发现主节点失效时,它们会通过集体决策确定新的主节点。这个决策过程按照以下步骤进行:

      • 哨兵互相通信:哨兵节点之间会进行通信,通过发送消息来达成共识。
      • 哨兵检查剩余的从节点:哨兵会遍历集群中的所有从节点,检查它们是否可用。
      • 哨兵选举候选人:每个哨兵节点都会根据一定的算法选择一个候选人(通常是从节点)作为新的主节点。选择候选人时,哨兵会考虑节点的可用性、优先级以及最近一次复制的偏移量等因素。
      • 哨兵投票:选举过程中每个哨兵会投票给自己认为最适合成为主节点的候选人。
    3. 选举结果:当哨兵完成投票后,会统计每个候选人的得票数。选票最多的候选人将成为新的主节点。

    4. 主节点切换:选举结果确定了新的主节点后,哨兵会向Redis集群中的所有节点发送FAILOVER命令,将新的主节点的地址广播给其他节点。其他节点接收到广播后,会将自己的从节点重新连接到新的主节点,实现主节点的切换。

    需要注意的是,选举过程中哨兵节点之间需要保持通信,如果有哨兵节点失效或网络分区情况,可能会出现选举延迟或选举冲突的情况。为了防止这种情况,Redis哨兵采用了Quorum(仲裁)的概念,只有在大多数哨兵节点参与投票并达成共识时,选举才会成功。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Redis哨兵是Redis的高可用方案之一,它负责监控和管理Redis主从节点,并在主节点失败时,自动进行选举,选出新的主节点。本文将详细介绍Redis哨兵的选举过程。

    1. 哨兵的监控
      哨兵通过向Redis节点发送PING命令来监控Redis节点的状态,如果哨兵在一定的时间内没有收到PONG回复,就会判断节点为无响应节点。

    2. 哨兵的选举规则
      (1)正在投票的哨兵必须具有更高的runid(唯一标识符),runid越大,表示哨兵加入集群的时间越晚,具有更高的优先级;
      (2)哨兵必须满足以下条件才能投票:

      • 哨兵状态为正常(non-failover模式),或者已经过了dir-down-time时间(failover模式);
      • 哨兵在配置的quorum数量的哨兵中排名前面。
    3. 哨兵选举流程
      (1)哨兵发现主节点下线后,会发送SENTINEL is-master-down-by-addr命令给其他哨兵,尝试进行选举,发送的命令中包含主节点的地址和端口号;
      (2)收到SENTINEL is-master-down-by-addr命令的哨兵根据以下条件进行判断:

      • 如果收到的命令中指定的主节点已经被其他哨兵选出,并且该哨兵认为选出的主节点是可用的,则该哨兵不会执行选举操作;
      • 如果收到的命令中指定的主节点已经是该哨兵已经选出的主节点,则该哨兵也不会进行选举;
      • 如果收到的命令中指定的主节点是无响应节点,则该哨兵也不会进行选举。
        (3)如果收到的命令中指定的主节点是可选节点,且没有被其他哨兵选出,则会尝试进行选举:
      • 哨兵会先检查自己是否可以投票,满足条件的话则将自己的投票信息发给其他哨兵;
      • 其他哨兵收到投票信息后,根据一定的规则进行验证,如果验证通过,则更新自己的投票信息,并将其转发给其他哨兵;
      • 在一定的时间内,如果有足够多的哨兵投票给某个候选节点,且没有其他候选节点得到足够的票数,则该候选节点被选为新的主节点。
    4. 选举后的处理
      (1)当一个新的主节点被选出后,哨兵会将新的主节点的地址和端口号广播给其他Redis节点,并通知其他哨兵和Redis客户端;
      (2)被选为新的主节点的Redis节点会向从节点发送命令,让从节点复制新的主节点;
      (3)哨兵会根据一定的配置,将旧主节点设置为从节点,并添加到新主节点的从节点列表中,进行数据同步和故障切换的准备工作。

    总结:Redis哨兵选举是通过一定的规则和条件来判断哨兵是否可以投票,以及是否可以接受其他哨兵的投票,并根据得到的投票结果选择新的主节点。选举后,哨兵会通知其他Redis节点和Redis客户端,进行数据同步和故障切换的处理。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部