4.Redis哨兵

哨兵

Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,对于很多应用场景这种故障处理方式是无法接受的。为了解决这个问题,Redis提供了Redis Sentinel(哨兵)架构来解决这个问题。

一、基本概念

在做自动故障转移时,需要考虑三个问题:

  1. 判断主节点不可达的机制是否健全和标准。
  2. 如果有多个从节点,怎样保证只有一个被晋升为主节点。
  3. 通知客户端新的主节点机制是否足够健壮

1.1 Redis Sentinel的高可用性

Redis Sentinel是一个分布式架构,其中包含若干个Sentine节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化实时通知给Redis应用方。

image-20240930160554787

二、实现原理

2.1 三个定时监控任务

Redis Sentinel通过三个定时监控任务完成对各个节点的发现和监控

  1. 每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构
  2. 每隔2秒,每个Sentinel节点会向Redis数据节点的sentinel:hello频道发送该Sentinel节点对于主节点的判断以及当前Sentinel节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他Sentinel节点以及它们对主节点的判断,所以这个定时任务可以完成以下两个工作:
    • 发现新的Sentinel节点
    • Sentinel节点之间交换主节点的状态,作为后面客观下线以及领导者选举的依据
  3. 每隔1秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点是否可达。

2.2 主观下线和客观下线

主观下线:如2.1中的第三个定时任务介绍,每个Sentinel节点会每隔1秒对主节点、从节点、其他Sentinel节点发送ping命令做心跳检测,当这些节点超过指定时间没做有效回复时,Sentinel节点就会对该节点做失败判定,这个行为叫做主观下线。主观下线是当前Sentinel节点的一家之言,存在误判的可能。

客观下线:当Sentinel主观下线的节点是主节点时,该Sentinel节点会向其他Sentinel节点询问对主节点的判断,当超过<quorum>个数,Sentinel节点认为主节点确实有问题,这时该Sentinel节点会做出客观下线的决定。客观下线是大部分Sentinel节点都对主节点做了同意的判定,那么这个判定就是客观的。

注意:从节点、Sentinel节点在主观下线后,没有后续的故障转移操作。如果需要做,可以自己利用Sentinel提供的API实现

2.3 领导者Sentinel节点选举

当Sentinel节点对主节点做了客观下线后,并不是立即进行故障转移,因为可能有其他的Sentinel节点也做了客观下线,这个时候需要选出来一个领导者来做故障转移。

选举思路:Sentinel节点向其他节点发送请求,要求将自己设置为领导者,收到请求的节点如果之前没有同意过其他Sentinel节点的请求,就同意该请求,否则拒绝,最后得票数大于等于max(quorum, num(sentinels) / 2 + 1)的节点被选为领导者。如果没有选出来,就进行下一轮投票。

2.4 故障转移

领导者选举出的Sentinel节点负责故障转移,具体步骤如下:

  1. 在从节点列表中选出一个新的主节点,选择方法如下:

    a. 过滤“不健康”(主观下线、断线)的从节点

    b. 选择复制偏移量最大的从节点

  2. Sentinel领导者节点会对第一步选出来的机诶单执行slaveof no one命令让其成为主节点

  3. Sentinel领导者节点向其余从节点发送命令,让它们成为新主节点的从节点

1. 什么是redis哨兵模式? Redis哨兵模式是Redis高可用性的解决方案之一,它是通过监听Redis主节点和从节点状态的变化来实现自动故障转移的。 2. Redis哨兵模式有哪些优点? Redis哨兵模式具有以下优点: - 自动化的故障转移。 - 提供高可用性,保证Redis服务的可用性。 - 可以在不需要人工干预的情况下,进行故障恢复。 - 支持多个哨兵节点的部署,提高了系统的可靠性。 3. Redis哨兵模式的缺点有哪些? Redis哨兵模式也有一些缺点: - 性能有一定的损耗,因为哨兵节点需要频繁地检查Redis节点的状态。 - 部署和维护成本较高,需要部署多个哨兵节点和Redis节点,并且需要对节点进行监控和管理。 4. Redis哨兵模式的工作原理是什么? Redis哨兵模式的工作原理如下: - 哨兵节点通过订阅Redis节点的频道,获取Redis节点的状态信息。 - 当哨兵节点检测到主节点状态发生变化时,它会通知所有从节点切换到新的主节点。 - 哨兵节点还会监控从节点的状态,当从节点失效时,哨兵节点会自动将该从节点切换到新的主节点。 5. Redis哨兵模式的部署方式有哪些? Redis哨兵模式的部署方式有两种: - 单哨兵模式:只部署一个哨兵节点,主节点和从节点都连接到该节点。 - 多哨兵模式:部署多个哨兵节点,主节点和从节点都连接到多个哨兵节点。其中一个哨兵节点会被选举为领导者,负责进行故障转移。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值