Redis Sentinel模式

1.前言

1.1 哨兵模式能够解决什么问题

首先来看为什么会存在哨兵模式?Redis哨兵主要是为了解决主从复制模式下单节点故障,需要手动选举主节点问题。而使用Redis Sentinel模式可以达到节点自动选举节点故障转移节点配置更新,从而保证可靠性

1.2 架构模式

image.png
Redis Sentinel由若干个Sentinel节点和数据节点组成(建议配置奇数哨兵,防止脑裂)。每个Sentinel节点负责监控数据节点和其他Sentinel节点,每隔1s定时向其他节点发起ping探测,待探测节点超过down-after-miliseconds未响应时, 对其标识主观下线(存在一定误判的可能)。所有的sentinel节点投票选举,最终投票数超过(sentinel + 1) / 2,将对节点进行客观下线。
特点:

  • 故障检测和故障转移能力,当节点发生故障时,能够通过哨兵完成自动选举
  • 故障自愈能力,一旦主节点发生瘫痪,sentinel节点会选举一个从节点晋升为新的主节点。当旧的主节点自愈后,将同步新主节点数据
  • 监控和通知,Sentinel会监控集群状态,并在发生故障和状态变化后可以通过邮件形式发送给管理员,方便故障定位和处理
  • 节点发现,sentinel通过info命令获取master节点配置,进而获取相关slave节点并与其建立连接

1.3 架构原理

哨兵节点主要通过3个定时任务来完成节点拓扑感知、主节点选举、客观下线和故障转移。
1.配置更新、发现主节点和从节点
Sentinel节点每10s通过info指令获取数据节点配置信息,目的是确定主从关系和相关配置下。
2.领导者选举,节点下线, 发现新的sentinel节点
每隔2s, 每个sentinel节点都会向数据节点的_sentinel_:hello频道发送当前sentinel对数据节点发送对主节点的判断和当前sentinel信息。当检测到主节点故障后,通过投票结果进行下线。
3**.故障判断**
sentinel每隔1s对数据节点和其他sentinel节点发送一次ping指令来判断节点是否异常。当对应节点相应时间超过down-after-miliseconds后,则认为该节点异常。如果该节点不为主节点,则不需要进行协商,直接下线;若为主节点,则需要所有sentinel节点进行投票,若投票超过quonum,基于raft算法选举出一个sentinel领导者下线主节点(客观下线)。

1.3.1 故障转移

主节点下线后,由领导者进行故障转移。步骤如下:
1)从下线主节点的从节点列表选出一个最优的成为新的主节点
a) 过滤掉不健康的节点(下线),包含5s内未回复过sentinel的ping请求的、与主节点失联超过down-after-miliseconds。
b) 选择slave-priority最大的从节点。若不存在,则继续过滤。
c)选择复制偏移量最大节点。
d)选择积压缓冲区最小的节点
e)最后选举运行时间最长的从节点
image.png
2)对选择的从节点执行slaveof no one命令,将晋升为主节点。
3)更改其他slave节点的master节点配置为新的主节点地址,并通过写时复制技术同步主节点数据。
4)待旧的主节点恢复后,将其变更为slave并与新的主节点建立连接。先进行一次全量同步,后续通过增量复制保持与主节点数据一致。

down-after-miliseconds:心跳最大响应时间。若超过该值则认为目标节点下线
quonum:下线投票数,quonum是对节点客观下线是一个特别重要的参考值。
当主节点下线后,众sentinel开始下线投票,若投票数大于quonum则进行下线。(客观下线)
slave-priority:从节点晋升为主节点的优先级。所主节点下线后,则首先选举健康且优先级最高的节点。
slaveof no one:使从节点脱离出来成为一个独立的节点,将其调整为主节点
复制偏移量:当主节点会将数据变更操作同步给从节点,从节点需要进行复制数据。所以需要参数来进行标识复制进度。主从节点各自维护一份复制偏移量,从节点每秒上报当前偏移量

下线主节点后,观察从节点日志

image.png

sentinel日志:
image.png

1.3.2 客户端原理

值得注意的是Sentinel模式下,客户端应该连接哨兵节点(使用26379端口)。当客户端设置键或更新键时,哨兵会从节点中选择一个健康的主节点(如果是更新键,则是选择键所在的主节点)。

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值