Redis 的哨兵机制

1.故障迁移

Redis 的哨兵 (sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:

  • 监控 (Monitoring): 哨兵 (sentinel) 会不断地检查你的 Master 和 Slave 是否运作正常。

  • 提醒 (Notification): 当被监控的某个 Redis 出现问题时,哨兵 (sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

  • 自动故障迁移 (Automatic failover): 当一个 Master 不能正常工作时,哨兵 (sentinel) 会开始一次自动故障迁移操作,它会将失效 Master 的其中一个 Slave 升级为新的 Master, 并让失效 Master 的其他 Slave 改为复制新的 Master; 当客户端试图连接失效的 Master 时,集群也会向客户端返回新 Master 的地址,使得集群可以使用 Master 代替失效 Master。

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

2.主客观宕机

关于 redis 哨兵判断监视节点是否宕机的原理

Redis 哨兵 Sdown,Odown:两种失败状态

  • sdown 是主观宕机,就一个哨兵如果自己觉得一个 master 宕机了,那么就是主观宕机

  • odown 是客观宕机,如果 quorum 数量的哨兵都觉得一个 master 宕机了,那么就是客观宕机

sdown 达成的条件很简单,如果一个哨兵 ping 一个 master,超过了 is-master-down-after-milliseconds 指定的毫秒数之后,就主观认为 master 宕机

sdown 到 odown 转换的条件很简单,如果一个哨兵在指定时间内,收到了 quorum 指定数量的其他哨兵也认为那个 master 是 sdown 了,那么就认为是 odown 了,客观认为 master 宕机

3.哨兵的工作方式

  • 每个 Sentinel 以每秒钟一次的频率向它所知的 Master,Slave 以及其他 Sentinel 实例发送一个 PING 命令。

  • 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。

  • 如果一个 Master 被标记为主观下线,则正在监视这个 Master 的所有 Sentinel 要以每秒一次的频率确认 Master 的确进入了主观下线状态。

  • 当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认 Master 的确进入了主观下线状态, 则 Master 会被标记为客观下线 。

  • 在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有 Master,Slave 发送 INFO 命令 。

  • 当 Master 被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次 。

  • 若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。

  • 若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章