暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis日记20210830--Sentinel哨兵

无限递归 2021-10-17
281

Start learning

知识

余额不足



秋季学习

2021年开学季如期而至

新一学年的开始

生活如同空白的纸张

等待着你饱含热情的笔触!

期望已经不再是学生的你,

依然充满对知识的渴望!

学习安排



0830学习安排

今日学习具体安排如下:

第一部分
演示Sentinel的安装部署

第二部分
Sentinel的实现原理

第三部分
最后总结




安装部署




上面是一个Sentinel节点的配置文件,里面主要有几个配置参数,其他两个Sentinel节点的配置除了端口号相关部分不一致外,其余配置相同。

准备好配置之后,我们就可以开始进行各个节点的启动了,首先要启动的是一个主节点,这里主节点端口我们用6390:



然后启动两个从节点(端口分别为 6391 6391),复制主节点6390:这里就只截图6391从节点启动截图



到这里我们的master-slave就搭建好了。接下来我们使用刚刚的配置来启动三个Sentinel节点:这里只给了Sentinel-26390的启动截图



现在我们的Sentinel集群+master+slave就都启动完毕了,搭建起来还是很简单的。




原理





· sentinel节点每10s向master及slave发送一次info命令,通过这个命令可以及时更新当前的拓扑结构。

· sentinel节点每2s向__sentinel__:hello频道发送一次自身信息及对主节点的判断,用于后续为主节点客观下线做判断和新Sentinel节点的发现及建联。

· sentinel节点每1s发送一次ping信息,判断其他sentinel、master、slave是否可达。


通过上面10s、2s、1s的任务机制,Sentinel完成了对各个节点的发现和监控。


故障自动发现及Sentinel领导者选举:is_master_down_by_addr命令说明


is_master_down_by_addr ip port current_epoch runid

ip: 主节点ip
port: 主节点端口
current_epoch: 当前配置纪元
runid: 此参数有两种情况
当runid=*时,表示Sentinel节点直接交换对主节点下线的判定
当runid=当前节点的runid时,表示当前Sentinel节点希望其他Sentinel节点同意自己为领导者

其他Sentinel节点对is_master_down_by_addr命令的回复情况:
down_state: 1-主节点已下线 0-主节点未下线
leader_runid: 此参数有两种情况
当leader_runid=*时,表示对主节点的下线判断
当Leaader_runid=具体runid时,表示同意源Sentinel为领导者



PS:T2和T3时间里任何一个Sentinel节点都有可能与master失去联系,从而发起is_master_down_by_addr命令来进行客观下线,具体谁最后能成为领导者,要看得到的票数最先过半,即得票数超过上面我们说过的max(2, num(sentinels)/2+1)。


新master选举及故障转移:






写在最后

主从架构中,故障的发现、转移都要靠运维手动解决,Sentinel解决了这些痛点,它能够通过3个定时任务实现问题的自动发现,并且实现了自动故障转移功能,解放了运维的双手,提高了服务可用性。





往期推荐




Redis日记20210826--底层数据结构的转换

Redis日记--集群故障转移

Redis日记20210819--AOF持久化





扫码关注最新动态

无限递归



文章转载自无限递归,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论