目录
1.哨兵简介
在主从复制下,redis服务器存在一个master和多个slave同时在工作。如果这时候,主机宕机,会发生什么情况,即数据写服务没人复制,且从机的数据也无法实现同步。
针对上述场景,引入了哨兵模式的概念,哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。
哨兵的作用:
1.监控
- 不断的检查master和slave是否正常运行。
- master存活检测、 master与slave运行情况检测
2.通知(提醒)
当被监控的服务器出现问题时, 向其他(哨兵间,客户端) 发送通知。
3.自动故障转移
断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服
务器地址
1.启动哨兵模式
配置哨兵:
1.配置一拖二的主从结构
2.配置三个哨兵
3.启动哨兵
启动顺序,先主机,后从机,最后哨兵
cd /home/believe123/myproject/redis/sentinel/
分别开三个窗口,启动主从机
redis-server ./redis-6379.conf
redis-server ./redis-6380.conf
redis-server ./redis-6381.conf
分别开三个窗口,启动三个哨兵
redis-sentinel ./sentinel-26379.conf
redis-sentinel ./sentinel-26380.conf
redis-sentinel ./sentinel-26381.conf
当主机宕机时,例如6379下线,6381被投票选举为主机,等待6379上线的时,它就变成了6381的从机。
手动杀死master服务器,6381变为master:
重新连接6379,6379就作为6381的从机进行数据同步:
配置文件内容如下:
且运行过程中sentinel*.conf文件会被重写:
3.哨兵工作原理
哨兵在进行主从切换过程中经历三个阶段:
- 监控阶段
- 通知阶段
- 故障转移阶段
3.1监控阶段
sentinel与master之间维持着cmd连接,来通过info获取其状态信息,通过定时ping操作维护各个 sentinel的通信。
3.2通知阶段
每个时段,挑选出一个 sentinel 来获取master和slave的info,并通过sentinel之间的pulish和subcribe操作,将信息广播给其他sentinel。
3.3 故障转移阶段![](https://i-blog.csdnimg.cn/blog_migrate/2afc8104ca32650777e60886908ce2bb.png)
当其中一个哨兵sentinel1发现master下线时,通知其他哨兵(sentinel2、sentinel3),然后其他哨兵尝试给master发送消息,如果发现master真的下线,则将flags:SRI_S_DOWN转换为flags:SRI_O_DOWN。
该策略实现是配置:
sentinel monitor mymaster 127.0.0.1 6379 2
说明:设置哨兵监听的主服务器信息,最后的参数决定了最终参与选举的服务器数量
通过投票选举新的master:
选举规则:
服务器列表中挑选备选master:
- 在线的
- 响应快的
- 与原master断开时间短的
- 优先原则
- 优先级
- offset
- runid
发送指令( sentinel )
- 向新的master发送slaveof no one
- 向其他slave发送slaveof 新masterIP端口
3.4 三个阶段总结
1.监控阶段
- 同步信息
2.通知阶段
- 保持联通
3.故障转移阶段
- 发现问题
- 竞选负责人
- 优选新master
- 新master上任,其他slave切换master,原master作为slave故障回复后连接
参考来源: