《弟哥带你学Redis系列》 - 第八章 哨兵篇

65 阅读3分钟

简介

哨兵作用

单数是为了竞选总有胜者

下线的master也会被持续监控,上线后sentinel会让其成为新master的slave

启用哨兵模式

配置哨兵

monitor mymaster 127.0.0.1 6379 2

指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)。

down-after-milliseconds mymaster 30000

指定了 Sentinel 认为服务器已经断线所需的毫秒数(判定为主观下线SDOWN)。

parallel-syncs mymaster 1 

指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长,但越大就意味着越多的从服务器因为复制而不可用。可以通过将这个值设为 1 来保证每次只有一个从服务器处于不能处理命令请求的状态。

failover-timeout mymaster 180000

选项指定同步超时时间

主观下线(Subjectively Down, 简称 SDOWN) 指的是单个 Sentinel 实例对服务器做出的下线判断。
客观下线(Objectively Down, 简称 ODOWN) 指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。

客观下线条件只适用于主服务器: 对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。
只要一个 Sentinel 发现某个主服务器进入了客观下线状态, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对失效的主服务器执行自动故障迁移操作。

哨兵工作原理

阶段一:监控阶段

在该阶段,sentinel会向master和slave获取信息,同时sentinels之间会构成网络,发布/订阅信息

阶段二:通知阶段

其中一个sentinel向master和slave获取信息,然后在sentinel的网络内部发布

阶段三:故障转移阶段

主观下线(Subjectively Down, 简称 SDOWN) 指的是单个 Sentinel 实例对服务器做出的下线判断。
客观下线(Objectively Down, 简称 ODOWN) 指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。

客观下线条件只适用于主服务器: 对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。
只要一个 Sentinel 发现某个主服务器进入了客观下线状态, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对失效的主服务器执行自动故障迁移操作。

master挂了之后,sentinel之间会进行竞选,选出的sentinel要去选出新的master,流程如下:

  1. 从服务器中挑选master
  • 在线的
  • 响应快的
  • 与原master断开时间短的
  • 优先原则
    • 优先级
    • offset
    • runid
  1. 发送指令( sentinel )
  • 向新的master发送slaveof no one
  • 向其他slave发送slaveof新master lP端口