@
目录一、哨兵模式简介
哨兵(Sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制来选举出新的master并将所有的slave连接到新的master。
哨兵也是一台redis服务器,只不过不提供数据服务。
哨兵通常配置为单数。
二、哨兵的搭建
- sentinel.conf 配置文件解读
# Example sentinel.conf
# port <sentinel-port>
port 8001
# 守护进程模式
daemonize yes
# 指明日志文件名
logfile "./sentinel1.log"
# 工作路径,sentinel一般指定/tmp比较简单
dir ./
# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
# 通常哨兵数量设置为单数,quorum = 哨兵数量/2 +1
sentinel monitor MyMaster 127.0.0.1 7001 1
# master或slave连接多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds MyMaster 1500
# 新master上任后数据同步时一次有多少数据同步,数值越小服务器压力越小但速度越慢
sentinel parallel-syncs mymaster 1
# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout TestMaster 10000
# 设置master和slaves验证密码
sentinel auth-pass TestMaster testmaster123
sentinel config-epoch TestMaster 15
#除了当前哨兵, 还有哪些在监控这个master的哨兵
sentinel known-sentinel TestMaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel TestMaster 127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862
- 实例搭建
显示 6379作为master,它下面还有2个slave,同时有3个哨兵监视着。
三、哨兵工作原理
1. 阶段(1)监控阶段:
sentinel 会向master要状态信息、向slave要状态信息、向其它sentinel要状态信息。
2. 阶段(2)通知阶段:
sentinel1 会不断向master、slave发送指令来判断连接是否正常,并且将接受到的信息分享给其余sentinel。
3. 阶段(3)故障转移阶段:
-
sentinel1 会不断发送请求给master,如果在指定时间内接收不到响应则认为master已经下线,并且将master标记为
flags:SRI_S_DOWN
(主观下线)。随后sentinel1 会将这一消息分享给其余sentinel,其余sentinel也会不断发送消息给master进行连接测试,如果有半数以上的sentinel都认为master已经下线,则master的状态会被标记为flags:SRI_O_DOWN
(客观下线)。 -
找到需要剔除的master 主机后,接下来需要从众多 sentinel 中选举出一个代表 sentinel 去实行剔除工作。
-
最后就是执行剔除工作并且选举出新的master。会根据以下要求进行选举。
哨兵工作原理: