Redis哨兵模式:哨兵节点的功能详解
创作时间:
作者:
@小白创作中心
Redis哨兵模式:哨兵节点的功能详解
引用
CSDN
1.
https://blog.csdn.net/longlongqin/article/details/140051549
哨兵节点的主要功能
哨兵节点的主要功能有:
- 集群监控:监控 主、从节点的健康状况;
- 自动切换主节点:当 Master 运行故障,哨兵启动自动故障恢复流程:从 slave 中选择一台作为新 master。
- 通知:让 slave 执行
replicaof
,与新的 master 同步;并且通知客户端与新 master 建立连接。
集群监控
哨兵(Sentinel)会给 主、从节点 发送 PING
命令:
- 对于 主节点:如果当前哨兵 发送给主节点的
PING
命令,但主节点并未回复,就会被当前哨兵视为 主观下线。如果哨兵集群中的多数哨兵(一般是超过一半)都认为主节点是 主观下线,则 主节点 会被视为 客观下线。 - 对于 从节点:如果当前哨兵 发送给主节点的
PING
命令,但主节点并未回复,就会被当前哨兵视为 主观下线。
自动切换主节点(故障转移)
在集群监控中,如果 主节点 被视为 客观下线。就会触发 自动切换主节点。选举新的主节点 的条件是(按照如下顺序进行筛选):
- 健康状况:那些经常被标记为 主观下线的从节点,会被视为不健康,会被过滤掉;
- slave 优先级:每一个节点都会在配置文件中有一个优先级设置(
slave-prority
),优先级高的从节点 胜出; - 比较 slave 与旧 master 复制进度的差距
offset
:offset
值越大,表示从节点和主节点的数据越接近。(如 slave2 的 offset 为90, slave1 偏移量 为100。那么哨兵就会认为slave2的网络不佳,优先选择slave1为新的主节点)、 runID
:runID
是每个redis节点启动时随机生成的(按照其字典序比较大小),ID 号最小的从库得分最高,会被选为新主节点。
通知
选举完新主节点之后,还需要:
- 哨兵 将 新主节点的信息,发送给其他 从节点,让 slave 执行 replacaof 命令,和新「master 节点」建立连接,并进行数据复制;
- 哨兵 还需要将 新主节点信息 通知到所有的客户端,让客户端将读、写请求转移到 新的 master 节点。
补充
如何建立 哨兵 与 master节点、slave节点的通信?
- 配置哨兵节点的配置文件:首先,需要配置哨兵的配置文件(通常为
sentinel.conf
),指定主节点的IP地址、端口以及主节点的名称。 - 向master节点发送
INFO
指令:Sentinel启动后根据配置向Master发送INFO
指令,获取并保存所有哨兵(Sentinel)状态,主节点(Master)和从节点(Slave)信息。此时,就建立了 哨兵 与 master节点、slave节点的通信信息了。
如何建立 哨兵 与 哨兵 之间的通信?
哨兵之间可以相互通信,主要归功于 Redis 的 pub/sub (发布/订阅)机制。具体步骤:
- 哨兵 与 master 节点 建立通信;
- 然后,就可以利用 Master 提供的发布/订阅机制,通过订阅Master的
__sentinel__:hello
频道,当自身节点启动或更新其状态时,重新发布自己的当前状态和信息(Name、IP、Port消息),同时订阅其他哨兵发布的Name、IP、Port消息。
- 互相发现之后建立起了连接,后续的消息通信就可以直接进行交互
主从动态切换(故障转移)的具体流程
参考:详解Redis哨兵模式下,主节点掉线而重新选取主节点的流程 -阿里云开发者社区 (aliyun.com)
主要分为两部分:
- 哨兵集群中,选出一个节点作为leader;
- 由哨兵leader负责挑选出新的master节点;
哨兵集群选择leader
步骤:
- 哨兵集群中的每一个哨兵都会发起一个“拉票请求”。
- 收到这个拉票请求的 哨兵节点会 回复一个“投票响应”,有两种结果:投、不投;
- 一轮投票完成之后,得票数超过半数的哨兵节点将成为leader;
- 如果出现平票的情况,则重新再投一次票。【这也是建议哨兵节点数量设置为 奇数的原因:不容易产生平票的情况。】
注意:这里的投票逻辑是:Raft 算法的核心是 “先下手为强”,谁率先发出了拉票请求,谁就有更大的概率成为 leader。
哨兵leader挑选出新master节点
前 步是检测 当前主节点是否客观下线的。
- 检测当前主节点是否 主观下线:哨兵会定期向主节点和从节点发送PING命令进行心跳检测,以确保这些节点正常运行。如果哨兵在指定的时间内没有收到主节点或从节点的回复,它就会认为该节点主观下线(SDOWN)。
具体:发送的内容:publish sentinel :hello
,如果超时不响应则标记 主观下线(sdown)。超时时间配置down-after-milliseconds
- 检测当前主节点是否 客观下线:当一个哨兵认为主节点主观下线后,它会询问其他哨兵节点,以确定这是否是一个共识。如果足够多的哨兵(一般为超过半数)认为主节点不可达,那么主节点将被标记为客观下线(ODOWN),并开始故障转移流程。
询问其他哨兵节点时,发送的指令sentinel is-master-down-by-address-port
- 哨兵集群选择leader:当确定需要故障转移时,会先选举出一个 哨兵leader,来负责后续的新master节点选举的工作。
- 哨兵leader开始选举 新master节点:筛选条件依次如下
- 健康状况:那些经常被标记为 主观下线的从节点,会被视为不健康,会被过滤掉;
- slave 优先级:每一个节点都会在配置文件中有一个优先级设置(
slave-prority
),优先级高的从节点 胜出; - 比较 slave 与旧 master 复制进度的差距
offset
:offset
值越大,表示从节点和主节点的数据越接近。(如 slave2 的 offset 为90, slave1 偏移量 为100。那么哨兵就会认为slave2的网络不佳,优先选择slave1为新的主节点)、 runID
:runID
是每个redis节点启动时随机生成的(按照其字典序比较大小),ID 号最小的从库得分最高,会被选为新主节点。
- 信息通知:当选举出新master节点后,哨兵leader会将 ①新主节点 发送给 从节点;②将新主节点信息发送给客户端。
参考
- Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理 - Redis - SegmentFault 思否
- 高可用之战:Redis Sentinal(哨兵模式) - Hello-Brand - 博客园 (cnblogs.com)
- redis哨兵模式的原理及部署 - misakivv - 博客园 (cnblogs.com)
热门推荐
轻松应对过敏的神奇武器——抗组胺药物
足球场上,后卫犹如球队的坚固盾牌,盘点足球后卫十大基本技能
抗日战争时期,她的一段往事告诉你,女兵的处境究竟有多凶险
生肖石柱的未来发展:传统文化与现代科技的融合之路
为什么步进电机中的微步进不如您想象的那么好
掌握证据收集技巧,确保自己的权益得到维护
笛福写过哪些文章?笛福的文坛世界:你可能不知道他都写过哪些惊人作品!
前置过滤器选购全攻略:从功能到安装位置一文详解
诸葛亮《诫子书》的伟大历史意义及其对后世的深刻影响
打哈欠一侧耳朵痛?可能是这些原因
如何科学饲养小鼠(从宠物到实验动物)
14家A股银行发布业绩快报,浦发银行净利润增长23%领跑,南京银行则引领营收增长
湖北大学新闻传播学院:以全媒体发展需求为导向 培养卓越新闻传播人才
英雄双人排位模式如何在游戏中保持高效沟通
《隋唐中枢体制的发展演变》:从顶层设计读懂唐朝治理密码
胆囊和胆是一个器官吗
治疗骨刺和骨质增生的外用药
肺结节纤维条索影是怎么回事
潮州卤水详细配方公开,卤水怎么样才能越卤越香?(附做法)
Sora来袭AI换脸门槛降低,网络安全公司何以应对新风险?
95年选秀加内特为何仅第5顺位?前4人是谁,生涯如何?
宣誓:高自由度奇幻RPG,你准备好揭开瘟疫背后的真相了吗?
“养废”一个青春期的孩子其实很简单,让其绝对服从就够了
股票是什么?全面解读股票的基本概念与类型
为什么内行人说电动汽车要比汽油车开着贵?真是如此吗?
开房记录保存时间的法律规定是怎样的
最准确的八字喜用神查询 生辰喜用神查询
疤痕贴对增生疤痕管用吗
《电锯惊魂 10》:竖锯的正义之问
牙齿矫正小知识:固定矫治期间,如何保持口腔卫生?