




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个定时任务实现问题的自动发现,并且实现了自动故障转移功能,解放了运维的双手,提高了服务可用性。



往期推荐
扫码关注最新动态

无限递归





