Redis 哨兵

简介

解释

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

作用

  • 监控
    不断的检查master和slave是否正常运行,包括master的存活检测、master与slave运行情况检测

  • 通知
    当被监控的服务器出现问题时,向其他(哨兵、客户端)发送通知

  • 自动故障转移
    断开master和slave的连接,选取一个slave作为master,将其它slave连接到新的master,并告知客户端新的服务器地址

    PS:哨兵也是一台redis服务器,只是不提供数据服务;通常哨兵的配置数量为单数

启动哨兵模式

命令

redis-sentinel sentinel.conf

配置文件

port 26379 -- 默认端口
dir -- sentinel信息目录
sentinel monitor <masterName> <master IP> <master Port> <master宕机标准,也就是sentinel判定数量,数值类型> -- 监控的master信息
sentinel down-after-milliseconds <masterName> <milliseconds> -- sentinel连接master多久无响应,超过阈值,sentinel则认定master宕机
sentinel parallel-syncs <masterName> <slaveNum> -- 同步数据的slave数量
sentinel failover-timeout <masterName> <milliseconds> -- 同步数据的超时时间

工作原理

监控

  • 同步各个节点的状态信息
    • 获取各个sentinel的状态(是否在线)
    • 获取master的状态
      • master的属性
        • runid
        • role:master
      • 各个slave的详细信息
    • 获取所有slave的状态
      • slave的属性
        • runid
        • role:slave
        • master_host、master_port
        • offset

        • 图示(来自黑马教程):
          在这里插入图片描述

通知

sentinel之间的信息同步,sentinel去监控master和slave的运行状态,得到结果后通知给其它sentinel
图示(来自黑马教程):在这里插入图片描述

故障转移

认定master宕机

(假设有三个sentinel)

  • sentinel1监控到master宕机,然后将master的flags(sentinelRedisInstance)修改为sri_s_down
  • sentinel1将master宕机的消息通知到其他sentinel
  • 其他的sentinel去确认master是否真的宕机
  • 全部的sentinel确认master宕机后,将master的flags(sentinelRedisInstance)修改为sri_o_down
  • 当master的flags为sri_o_down的时候,sentinel就判定master已经宕机

选举sentinel以执行转移操作

内部有一个投票机制,各个sentinel互相发送自己的信息(ip,port,runid,执行转移的次数),各个sentinel根据自己接到信息的先后顺序进行投票(比如:sentinel2和sentinel3先后给sentinel1发送信息。sentinel1先接收到sentinel3的信息,则投票给sentinel3),票数最多的sentinel获取执行转移资格

执行转移操作

  • 在slave中挑选master,成为master的条件
    • 在线的
    • 响应快的
    • 与原master断开时间短的
    • 优先原则
      • 优先级
      • offset
      • runid
  • sentinel发送指令
    • 向新的master发送slaveof no one(新的slave上任成为master)
    • 向其他slave发送slaveof新master的ip、port
posted @ 2020-07-06 23:38  liujiangbo  阅读(48)  评论(0编辑  收藏  举报