专栏
天翼云开发者社区

Redis哨兵机制

2023-06-14 09:52:45 18阅读

主库挂了,如何不间断服务?

  • 无论是写服务中断,还是从库无法进行数据同步,都是不能接受的。
  • 涉及到三个问题:
    • 主库真的挂了么?
    • 该选择哪个从库作为主库?
    • 怎么把新主库的相关信息通知给从库和客户端呢?
  • 在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的这三个问题。

哨兵机制

  • 哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主和通知

监控

  • 监控是指哨兵进程在运行时,周期性地给所有的主从库发送 PING 命令,检测它们是否仍然在线运行。
  • 如果从库没有在规定时间内响应哨兵的 PING 命令,哨兵就会把它标记为“下线状态”;
  • 同样,如果主库也没有在规定时间内响应哨兵的 PING 命令,哨兵就会判定主库下线,然后开始自动切换主库的流程。
  • 实际使用过程中,往往存在哨兵集群,多个哨兵都PING不通主库,才会判定为真正下线(客观下线)。

选主

  • 主库挂了以后,哨兵就需要从很多个从库里,按照一定的规则选择一个从库实例,把它作为新的主库。
  • 这一步完成后,现在的集群里就有了新主库。
  • 规则包含筛选+打分,筛选掉不符合条件的从库,然后给剩余实例打分,分高者作为新主库。
  • 筛选:从库要在线,且网络要好,可以使用配置项down-after-milliseconds * 10,down-after-milliseconds 是主从库断连的最大连接超时时间,断连超过10次,可以认为该从库的网络不好。
  • 打分,某一轮存在最高分的从库,则结束打分,该从库变为新主库:
    • 第一轮:优先级高的,参考 slave-priority这个配置
    • 第二轮:和旧主库同步程度最接近的,同步游标slave_repl_offset 最接近 master_repl_offset
    • 第三轮:ID 号小的,从库的编号。

通知

  • 在执行通知任务时,哨兵会把新主库的连接信息发给其他从库,让它们执行 replicaof 命令,和新主库建立连接,并进行数据复制。
  • 同时,哨兵会把新主库的连接信息通知给客户端,让它们把请求操作发到新主库上。
  • 0
  • 0
  • 0
0 评论
0/1000
评论(0) 发表评论
l****n

l****n

5 篇文章 0 粉丝
关注

Redis哨兵机制

2023-06-14 09:52:45 18阅读

主库挂了,如何不间断服务?

  • 无论是写服务中断,还是从库无法进行数据同步,都是不能接受的。
  • 涉及到三个问题:
    • 主库真的挂了么?
    • 该选择哪个从库作为主库?
    • 怎么把新主库的相关信息通知给从库和客户端呢?
  • 在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的这三个问题。

哨兵机制

  • 哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主和通知

监控

  • 监控是指哨兵进程在运行时,周期性地给所有的主从库发送 PING 命令,检测它们是否仍然在线运行。
  • 如果从库没有在规定时间内响应哨兵的 PING 命令,哨兵就会把它标记为“下线状态”;
  • 同样,如果主库也没有在规定时间内响应哨兵的 PING 命令,哨兵就会判定主库下线,然后开始自动切换主库的流程。
  • 实际使用过程中,往往存在哨兵集群,多个哨兵都PING不通主库,才会判定为真正下线(客观下线)。

选主

  • 主库挂了以后,哨兵就需要从很多个从库里,按照一定的规则选择一个从库实例,把它作为新的主库。
  • 这一步完成后,现在的集群里就有了新主库。
  • 规则包含筛选+打分,筛选掉不符合条件的从库,然后给剩余实例打分,分高者作为新主库。
  • 筛选:从库要在线,且网络要好,可以使用配置项down-after-milliseconds * 10,down-after-milliseconds 是主从库断连的最大连接超时时间,断连超过10次,可以认为该从库的网络不好。
  • 打分,某一轮存在最高分的从库,则结束打分,该从库变为新主库:
    • 第一轮:优先级高的,参考 slave-priority这个配置
    • 第二轮:和旧主库同步程度最接近的,同步游标slave_repl_offset 最接近 master_repl_offset
    • 第三轮:ID 号小的,从库的编号。

通知

  • 在执行通知任务时,哨兵会把新主库的连接信息发给其他从库,让它们执行 replicaof 命令,和新主库建立连接,并进行数据复制。
  • 同时,哨兵会把新主库的连接信息通知给客户端,让它们把请求操作发到新主库上。
文章来自专栏

My Redis

5 篇文章 1 订阅
0 评论
0/1000
评论(0) 发表评论
  • 0
    点赞
  • 0
    收藏
  • 0
    评论