0%

redis哨兵机制

Redis Sentinel是一个分布式系统,你可以在一个架构中运行多个 Sentinel进程(progress),这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(agreement protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。

一、概念

      Redis Sentinel是一个分布式系统,你可以在一个架构中运行多个 Sentinel进程(progress),这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个从服务器作为新的主服务器。

sentinel

二、作用

该系统执行以下三个任务:

  1. 监控(Monitoring):Sentinel会不断地检查你的务器和从服务器是否运作正常。
  2. 提醒(Notification):当被监控的某个Redis服出现问题时,Sentinel可以通过API向管理员或者应用程序发送通知。
  3. 自动故障迁移(Automatic failover):当一个主器不能正常工作时,Sentinel会开始一次自动故障迁作,它会将失效主服务器的其中一个从服务器升级为新服务器,并让失效主服务器的其他从服务器改为复制新服务器;当客户端试图连接失效的主服务器时,集群向客户端返回新主服务器的地址,使得集群可以使用新务器代替失效服务器。

三、工作方式

  1. 每个Sentinel以每秒钟一次的频率向它所知的主服务器、从服务器以及其他Sentinel实例发送一个PING命令。
  2. 如果一个实例(instance)距离最后一次有效回复PING命令的时间超过down-after-milliseconds选项所指定的值,那么这个实例会被Sentinel标记为主观下线。一个有效回复可以是:+PONG-LOADING或者-MASTERDOWN
  3. 如果一个主服务器被标记为主观下线,那么正在监视这个主服务器的所有Sentinel要以每秒一次的频率确认主服务器的确进入了主观下线状态。
  4. 如果一个主服务器被标记为主观下线, 并且有足够数量的Sentinel(至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断,那么这个主服务器被标记为客观下线。
  5. 在一般情况下,每个Sentinel会以每10秒一次的频率向它已知的所有主服务器和从服务器发送INFO命令。当一个主服务器被Sentinel标记为客观下线时,Sentinel向下线主服务器的所有从服务器发送INFO命令的频率会从10秒一次改为每1秒一次。
  6. 当没有足够数量的Sentinel同意主服务器已经下线,主服务器的客观下线状态就会被移除。当主服务器重新向SentinelPING命令返回有效回复时,主服务器的主观下线状态就会被移除。

四、其他概念

  1. 主观下线(Subjectively Down,简称SDOWN)指的是单个Sentinel实例对服务器做出的下线判断。
  2. 客观下线(Objectively Down,简称ODOWN)指的是多个Sentinel实例在对同一个服务器做出SDOWN判断,并且通过SENTINEL is-master-down-by-addr命令互相交流之后,得出的服务器下线判断。(一个Sentinel可以通过向另一个Sentinel发送SENTINEL is-master-down-by-addr命令来询问对方是否认为给定的服务器已下线。)

五、实现方式

  1. 编辑sentinel.conf文件sentinel monitor mymaster 127.0.0.1 6379 1
    • sentinel monitor 名称 ip 端口 投票次数)
  2. 启动哨兵节点 redis-sentinel sentinel.conf
    • 因为是通过单机不同端口测试,启动了一个哨兵节点,故步骤1投票次数设置为1,设置过大则不起作用
  3. shutdown主节点服务或kill掉主节点进程ID
  4. 观察步骤2输出信息,并通过info replication查看节点角色