Redis应用-2.哨兵模式

2.哨兵模式

2.1 哨兵简介

哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的
master,并将所有slave连接到新的master。

哨兵的作用

监控
不断的检查master和slave是否正常运行。
master存活检测、master与slave运行情况检测
通知(提醒)
当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。
自动故障转移
断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
注意:
哨兵也是一台redis服务器,只是不提供数据服务
通常哨兵配置数量为单数 3 5 7 9 最少3

2.2 启用哨兵模式

配置哨兵

配置一拖二的主从结构
配置三个哨兵(配置相同,端口不同)
(先启主机,再启从机,最后启动哨兵)

参看sentinel.conf

启动哨兵

redis-sentinel sentinel-端口号.conf

2.3 哨兵工作原理

主从切换

哨兵在进行主从切换过程中经历三个阶段
监控
通知
故障转移

阶段一:监控阶段

用于同步各个节点的状态信息
1.获取各个sentinel的状态(是否在线)
2.获取master的状态
master属性
runid
role:master
各个slave的详细信息
3.获取所有slave的状态(根据master中的slave信息)
slave属性
runid
role:slave
master_host、master_port
offset
……

工作顺序(重点)

① sentinel先连接master获取信息,发一个info指令,拿到信息,知道master和slave的状况。 /ˈsentɪnl/
② sentinel与master建立cmd连接用于命令交换。sentinel保存所有哨兵信息记录,master记录redis实例对应的的信息
③ sentinel根据从master获取的slaves的信息接着去连每一个slave,发送info指令又把信息拿到了
下一个sentinel进来了,也会发送info给master获取信息建立cmd连接,并根据master发现已经有sentinel连过,sentinel也保存信息,并且保存的sentinels是两个sentinel信息,为了保证与前一个sentinel保存的信息同步,两个sentinel之间建立沟通桥梁->发布、订阅。为了保证两个sentinel信息能够长期对称,它们两个会互发ping命令查看对方是否存在。
当第三个sentinel进来再连接master等操作,除此之外三个sentinel之间互连,三者之间形成一个内部网络,谁拿到信息快速扩散给其他sentinel,它们之间是信任的,发现新的信息与自己的不一样就会把自身的信息更新掉,这样信息同步速度非常快。
简单来说,sentinel会向master、slave、其他sentinel要状态,sentinel之间会组建一个对应的频道,大家在里面发布信息,订阅信息,收信息,同步信息。

阶段二:通知阶段

sentinel通过与master建立的命令连接获取master与slave的工作状态,无论哪个sentinel获取到,都会把信息回传,各个sentinel进行信息同步

阶段三:故障转移阶段

sentinel1给master发送命令,master没回应,sentinel1不停的给master发送命令,达到一定阶段(默认30s)未回应就给master标记一个SDOWN状态,把master状态信息传播到sentinel之间的内网中,说master宕机了。(如果是sentinel自己断了,也会标记SDOWN状态,但是这个指令不能发布到内网中),当内网中其他的sentinel接收到指令,都会去给master发送命令,master都未回应,也把它们接收到的结果信息发布到内网里确认sentinel1说的对,master真宕机了。当sentinel数量一半加一的sentinel说master宕机了,说明master真宕机了标记为ODOWN。
一台sentinel认为master挂了标记SDOWN叫主观下线
半数以上的sentinel认为master挂了标记ODOWN叫客观下线

所有sentinel同时向它们的频道发一个指令:内容是宕机的ip、端口、竞选次数、自己的run id
内部有投票机制,各个sentinel既是参选者也是投票者,例如有5个sentinel,sentinel1和sentinel4同时给sentinel2发送消息,sentinel2先收到谁的消息就把票投给谁。若没有选出,就再重新投票一次,每增加一次,竞选次数增加1,投票完毕会推选出一个sentinel进行处置工作。

推选出的sentinel在服务器列表中挑选备选master
筛选条件:
1.不在线的
2.响应慢的
3.与原master断开时间久的
4.优先原则
优先级
offset
runid小
发送指令( sentinel )
向新的master发送slaveof no one 让它与之前的master断开连接
向其他slave发送slaveof 新master IP 端口
监控
同步信息
通知
保持联通
故障转移
发现问题
竞选负责人
优选新master
新master上任,其他slave切换新master,原master故障恢复后作为slave连接
posted @   Lz_蚂蚱  阅读(110)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起