Redis 哨兵
redis 哨兵
1. 哨兵的作用
检查Master和Slave是否运作正常,实现主从节点故障转移。 它会监测主节点是否存活,如果发现主节点挂了,它就会选举一个从节点切换为主节点,并且把新主节点的相关信息通知给从节点和客户端。
-
监控
-
选主
-
通知
哨兵节点每隔1s向所有主从节点发送ping命令,节点收到后会进行响应
如果哨兵节点在
down-after-milliseconds
时间内未收到节点A
响应,则将A
节点认定为主观下线
通过哨兵集群(3个以上),多个哨兵对
A
节点状态进行投票,可以避免单个哨兵因网络
引起的误判情况。
在票数达到quorum
时,哨兵节点认定A
节点为客观下线
.quorum
的计算公式为:quorum = (哨兵节点数/2) + 1
哨兵leader
选举leader
需要先有候选者
候选者就是判断哪个节点下线的哨兵
成为leader规则
- 获得一半以上的投票
- 票数要大于等于
quorum
哨兵投票规则
- 候选者只能投给自己
- 普通哨兵只会给收到的第一个候选者投票
投票示例
redis 1主4从,5个哨兵
- quorum = 3,2个哨兵故障
- 可以判断节点
客观下线
,此时剩余3个正常哨兵,哨兵判断节点主观掉线
,此时还有2个正常节点,投票数量可以达到quorum(3)
,即可认定节点客观下线
- 可以完成
主从节点切换
,此时还有3个正常节点,候选者投票数量可以达到3,满足获选规则1和2,成为leader,完成主从切换
- 可以判断节点
- quorum=2,3个哨兵故障
- 可以判断节点
客观下线
,但无法完成主从切换
,无法满足选举规则2
- 可以判断节点
主从故障转移
- 筛选网络情况稳定redis从节点
- 从
客观下线
的主节点GG
属下的所有节点挑选出新的主节点N
(**) - 通知所有其他从节点,修改复制节点为新节点
N
- 将新的主节点的信息,通过[pub/sub]告诉客户端
- 哨兵继续监听
GG
,当GG
恢复后,将GG
设置为新主节点N
的从节点
筛选节点
down-after-milliseconds * 10 配置项
如果在down-after-milliseconds
ms未连接,视作断连,如果次数超过10次,认定该从节点网络状况较差,不适合作为新的主节点
主节点选取
- 优先级
设置redis节点配置文件的slave-priority
,根据服务器性能配置,如物理内存等。
- 优先级相同,比较复制偏移量
offset
,偏移量高的靠前
主节点通过master_repl_offset
记录最新写操作在repl_backlog_buffer
环形缓存区的位置,从节点会使用slave_repl_offset
记录当前复杂进度
- 前两者相同,选节点id小的
每个redis节点都有一个唯一ID用于标识从节点
更新主节点状态标识
- 筛选出新的主节点后,哨兵leader会向主节点发送
slaveof no one
更新节点身份为主节点
发送slaveof no one
命令后,哨兵leader每1s向新主节点发送info
命令,查看节点是否顺利更新为主节点
- 让所有从节点指向新的主节点,哨兵leader向所有其他从节点发送
slaveof ip port
命令,让所有从节点指向新的主节点
通知客户端主节点已更新
哨兵leader向所有客户端发送pub/sub
消息,通知主节点已更新
主从切换完成后,哨兵就会向 +switch-master 频道发布新主节点的 IP 地址和端口的消息,这个时候客户端就可以收到这条信息,然后用这里面的新主节点的 IP 地址和端口进行通信了。
哨兵集群
哨兵集群搭建需要知道主节点信息,然后通过订阅消息频道获取从节点和其他哨兵节点信息
sentinel monitor <master-name> <ip> <redis-port> <quorum>
哨兵节点之间是通过 Redis 的发布者/订阅者机制来相互发现的。
在主从集群中,主节点上有一个名为__sentinel__:hello的频道,不同哨兵就是通过它来相互发现,实现互相通信的
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?