redis哨兵模式选举机制

redis哨兵模式选举机制当 redis 集群的主节点故障时 Sentinel 集群将从剩余的从节点中选举一个新的主节点 有以下步骤 故障节点主观下线故障节点客观下线 Sentinel 集群选举 LeaderSentin 决定新主节点选举过程 1 主观下线 Sentinel 集群的每一个 Sentinel 节点会定时对 redis 集群的所有节点发心跳包检测节点是否正常 如果一个节点在 down after milliseconds 时间内没有回复 Sentinel 节点的心跳包 则该 redis 节点被该 Sentinel 节点主观下线

当redis集群的主节点故障时,Sentinel集群将从剩余的从节点中选举一个新的主节点,有以下步骤:

  1. 故障节点主观下线
  2. 故障节点客观下线
  3. Sentinel集群选举Leader
  4. Sentinel Leader决定新主节点

选举过程

1、主观下线

Sentinel集群的每一个Sentinel节点会定时对redis集群的所有节点发心跳包检测节点是否正常。如果一个节点在down-after-milliseconds时间内没有回复Sentinel节点的心跳包,则该redis节点被该Sentinel节点主观下线。

2、客观下线

当节点被一个Sentinel节点记为主观下线时,并不意味着该节点肯定故障了,还需要Sentinel集群的其他Sentinel节点共同判断为主观下线才行。

该Sentinel节点会询问其他Sentinel节点,如果Sentinel集群中超过quorum数量的Sentinel节点认为该redis节点主观下线,则该redis客观下线。

如果客观下线的redis节点是从节点或者是Sentinel节点,则操作到此为止,没有后续的操作了;如果客观下线的redis节点为主节点,则开始故障转移,从从节点中选举一个节点升级为主节点。

3、Sentinel集群选举Leader

如果需要从redis集群选举一个节点为主节点,首先需要从Sentinel集群中选举一个Sentinel节点作为Leader。

每一个Sentinel节点都可以成为Leader,当一个Sentinel节点确认redis集群的主节点主观下线后,会请求其他Sentinel节点要求将自己选举为Leader。被请求的Sentinel节点如果没有同意过其他Sentinel节点的选举请求,则同意该请求(选举票数+1),否则不同意。

如果一个Sentinel节点获得的选举票数达到Leader最低票数(quorumSentinel节点数/2+1的最大值),则该Sentinel节点选举为Leader;否则重新进行选举。

在这里插入图片描述

4、Sentinel Leader决定新主节点

当Sentinel集群选举出Sentinel Leader后,由Sentinel Leader从redis从节点中选择一个redis节点作为主节点:

  1. 过滤故障的节点
  2. 选择优先级slave-priority最大的从节点作为主节点,如不存在则继续
  3. 选择复制偏移量(数据写入量的字节,记录写了多少数据。主服务器会把偏移量同步给从服务器,当主从的偏移量一致,则数据是完全同步)最大的从节点作为主节点,如不存在则继续
  4. 选择runid(redis每次启动的时候生成随机的runid作为redis的标识)最小的从节点作为主节点
redis哨兵模式选举机制

为什么Sentinel集群至少3节点

一个Sentinel节选举成为Leader的最低票数为quorumSentinel节点数/2+1的最大值,如果Sentinel集群只有2个Sentinel节点,则

Sentinel节点数/2 + 1 = 2/2 + 1 = 2  
 

    即Leader最低票数至少为2,当该Sentinel集群中由一个Sentinel节点故障后,仅剩的一个Sentinel节点是永远无法成为Leader。

    也可以由此公式可以推导出,Sentinel集群允许1个Sentinel节点故障则需要3个节点的集群;允许2个节点故障则需要5个节点集群。

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

    发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233237.html原文链接:https://javaforall.net

    (0)
    全栈程序员-站长的头像全栈程序员-站长


    相关推荐

    • 完美解决C#中拖动splitContainer分割线时显示虚线问题

      完美解决C#中拖动splitContainer分割线时显示虚线问题完美解决C#中拖动splitContainer分割线时显示虚线问题

      2022年7月18日
      12
    • petalinux vdma 学习笔记

      petalinux vdma 学习笔记在petalinux目录下打开终端,使能petalinux环境配置:sourcesettings.sh新建工程目录,最好是petalinux上一层目录下:cd…mkdir/xilinx/my_zc702_prj/DMI_TM6843在DMI_TM6843下新建硬件配置目录;mkdirhddef将vivado中导出.hdf文件放到hddef目录下5.建立工程:peta…

      2025年8月28日
      6
    • React入门小记

      React入门小记

      2021年7月5日
      99
    • YUV图像合成原理[通俗易懂]

      YUV图像合成原理[通俗易懂]YUV图像合成原理引言:在视频监控中最常用的就是图像拼接和字符叠加,25FPS的视频流,如果每隔40MS就从各个通道中取一幅图像来合成,则可以看到一个实时的合成视频。合成的过程也就是原始图像的拼接、缩放的过程,本文主要阐述UV分开存储的YUV420图像拼接的过程,实现下图的效果。一、原图图像格式1、图像常用的格式有两种RGB和YUV(1)YUV是

      2022年7月16日
      15
    • Win7如何分享局域网并设置共享文件夹账户和密码

      Win7如何分享局域网并设置共享文件夹账户和密码

      2021年10月9日
      64
    • 太极阳必须要root吗_root手机教程

      太极阳必须要root吗_root手机教程以前的root基本是suroot,但是su不再维护更新之后,就有了现在的比su更好玩的root手机的工具→magisk。Magisk具备很强大的模块扩展,可以不修改system区的文件,达到修改system文件一样的效果,例如换字体,换主题,换卡机界面,换gpu驱动等等。现在就来一个面具的刷入教程。1.一台可以解锁BL的手机(可以查看公众号的历史信息,刷机教程)2.给机器刷入第三方Re…

      2022年6月4日
      86

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注

    关注全栈程序员社区公众号