极客小智|Redis哨兵集群中哨兵挂了,主从库还能切换吗?

文章图片

文章图片
首发公众号:码农架构实际上 , 一旦多个实例组成了哨兵集群 , 即使有哨兵实例出现故障挂掉了 , 其他哨兵还能继续协作完成主从库切换的工作 , 包括判定主库是不是处于下线状态 , 选择新主库 , 以及通知从库和客户端 。
1基于 pub/sub 机制的哨兵集群组成哨兵之间的相互发现
哨兵实例之间可以相互发现 , 要归功于Redis提供的pub/sub机制 , 也就是发布/订阅机制 。
- 哨兵将自己的连接信息 (ip port) 发布到主库上 其它哨兵订阅
- 自己编写的应用程序也可以通过 Redis 进行消息的发布和订阅
- Redis 会以频道的形式 , 对这些消息进行分门别类的管理
在主从集群中 , 主库上有一个名为“__sentinel__:hello”的频道 , 不同哨兵就是通过它来相互发现 , 实现互相通信的 。
哨兵除了彼此之间建立起连接形成集群外 , 还需要和从库建立连接 。 这是因为 , 在哨兵的监控任务中 , 它需要对主从库都进行心跳判断 , 而且在主从库切换完成后 , 它还需要通知从库 , 让它们和新主库进行同步 。
哨兵如何发现从库 ip port
这是由哨兵向主库发送 INFO 命令来完成的 。
哨兵也和客户端连接:
- 主从库切换后 , 客户端也需要知道新主库的连接信息 , 才能向新主库发送请求操作 。 所以 , 哨兵还需要完成把新主库的信息告诉客户端这个任务 。
- 实际使用哨兵时要求 , 客户端能够获取到哨兵集群在监控、选主、切换这个过程中发生的各种事件 。
让客户端从哨兵这里订阅消息:
- 客户端读取哨兵的配置文件后 , 可以获得哨兵的地址和端口 , 和哨兵建立网络连
- 在客户端执行订阅命令 , 来获取不同的事件消息
SUBSCRIBE+odown
// 订阅所有的事件
PSUBSCRIBE*
当哨兵把新主库选择出来后 , 客户端就会看到下面的 switch-master 事件 。 这个事件表示主库已经切换了 , 新主库的 IP 地址和端口信息已经有了 。 这个时候 , 客户端就可以用这里面的新主库地址和端口进行通信了 。
switch-master <master name><oldip><oldport><newip><newport>
3由哪个哨兵执行主从切换?判断主库下线的过程:
- 任何一个实例只要自身判断主库“主观下线”后 , 就会给其他实例发送 is-master-down-by-addr 命令 。 接着 , 其他实例会根据自己和主库的连接情况 , 做出 Y 或 N 的响应 , Y 相当于赞成票 , N 相当于反对票 。
一个哨兵获得了仲裁所需的赞成票数后 , 就可以标记主库为“客观下线” 。 这个所需的赞成票数是通过哨兵配置文件中的quorum配置项设定的 。 例如 , 现在有 5 个哨兵 , quorum 配置的是 3 , 那么 , 一个哨兵需要 3 张赞成票 , 就可以标记主库为“客观下线”了 。 这 3 张赞成票包括哨兵自己的一张赞成票和另外两个哨兵的赞成票 。
- 此时 , 这个哨兵就可以再给其他哨兵发送命令 , 表明希望由自己来执行主从切换 , 并让所有其他哨兵进行投票 。 这个投票过程称为“Leader 选举” 。 因为最终执行主从切换的哨兵称为 Leader , 投票过程就是确定 Leader 。
- 拿到半数以上的赞成票
- 拿到的票数同时还需要大于等于哨兵配置文件中的 quorum 值
如果 S3 没有拿到 2 票 Y , 那么这轮投票就不会产生 Leader 。 哨兵集群会等待一段时间(也就是哨兵故障转移超时时间的 2 倍) , 再重新选举 。 这是因为 , 哨兵集群能够进行成功投票 , 很大程度上依赖于选举命令的正常网络传播 。 如果网络压力较大或有短时堵塞 , 就可能导致没有一个哨兵能拿到半数以上的赞成票 。 所以 , 等到网络拥塞好转之后 , 再进行投票选举 , 成功的概率就会增加 。
需要注意的是 , 如果哨兵集群只有 2 个实例 , 此时 , 一个哨兵要想成为 Leader , 必须获得 2 票 , 而不是 1 票 。 所以 , 如果有个哨兵挂掉了 , 那么 , 此时的集群是无法进行主从库切换的 。 因此 , 通常我们至少会配置 3 个哨兵实例 。 这一点很重要 , 你在实际应用时可不能忽略了 。
4总结支持哨兵集群的这些关键机制:
- 基于 pub/sub 机制的哨兵集群组成过程;
- 基于 INFO 命令的从库列表 , 这可以帮助哨兵和从库建立连接;
- 基于哨兵自身的 pub/sub 功能 , 这实现了客户端和哨兵之间的事件通知 。
推荐阅读
- 火星车|27 亿美金的火星车上,到底埋了多少极客彩蛋?
- 英特尔公司|英特尔新任 CEO 基辛格:作为一名技术专家,我内心也是一名极客
- 极客|赋能4-16岁全阶段课程 极客晨星加码中国优质编程教育
- 赛博|炫酷主题极客机型 一加8T赛博朋克2077限定版动手玩
- 极客|“以赛代练”护航新基建,2020补天杯破解大赛火热进行
- CSDN|小霸王被申请破产重整;虎牙员工自曝被HR抬出公司;Office 2010被微软终止服务|极客头条
- 极客公园|双十一买什么?3D 避障的米家扫拖机器人 1T 别错过
- 极客谈科技|开发商预埋的五类网线,家中想改为千兆网络怎么办好?
- 精灵宝可梦编剧这脑洞太大了,皮卡丘竟然和小智分道扬镳了
- |随身性能小钢炮,VAIO FH14试用体验 | 钛极客
