一、哨兵模式简介

哨兵(Sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制来选举出新的master并将所有的slave连接到新的master。
哨兵也是一台redis服务器,只不过不提供数据服务。
哨兵通常配置为单数。

在这里插入图片描述

二、哨兵的搭建

在这里插入图片描述

  • sentinel.conf 配置文件解读

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    # 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)故障转移阶段:
在这里插入图片描述

  1. sentinel1 会不断发送请求给master,如果在指定时间内接收不到响应则认为master已经下线,并且将master标记为 flags:SRI_S_DOWN (主观下线)。随后sentinel1 会将这一消息分享给其余sentinel,其余sentinel也会不断发送消息给master进行连接测试,如果有半数以上的sentinel都认为master已经下线,则master的状态会被标记为 flags:SRI_O_DOWN (客观下线)。

  2. 找到需要剔除的master 主机后,接下来需要从众多 sentinel 中选举出一个代表 sentinel 去实行剔除工作。
    在这里插入图片描述

  3. 最后就是执行剔除工作并且选举出新的master。会根据以下要求进行选举。
    在这里插入图片描述

哨兵工作原理:
在这里插入图片描述
在这里插入图片描述