• 聊聊Redis sentinel 机制


    Redis 的哨兵机制自动完成了以下三大功能,从而实现了主从库的自动切换,可以降低 Redis 集群的运维开销:

    • 监控主库运行状态,并判断主库是否客观下线;
    • 在主库客观下线后,选取新主库;
    • 选出新主库后,通知从库和客户端。

     

    一、为什么需要哨兵

    主从模式下,如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。

    而且,如果客户端发送的都是读操作请求,那还可以由从库继续提供服务,这在纯读的业务场景下还能被接受。但是,一旦有写操作请求了,按照主从库模式下的读写分离要求,需要由主库来完成写操作。

    此时,也没有实例可以来服务客户端的写操作请求了,如下图所示:

     

     无论是写服务中断,还是从库无法进行数据同步,都是不能接受的。所以,如果主库挂了,我们就需要运行一个新主库,比如说把一个从库切换为主库,把它当成主库。

     

    这就涉及到三个问题:

    • 主库真的挂了吗?
    • 该选择哪个从库作为主库?
    • 怎么把新主库的相关信息通知给从库和客户端呢?

      

    二、哨兵机制的基本流程

    哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。

    哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知。

     

    1、监控

    监控是指哨兵进程在运行时,周期性地给所有的主从库发送 PING 命令,检测它们是否仍然在线运行。

    如果从库没有在规定时间内响应哨兵的 PING 命令,哨兵就会把它标记为“下线状态”;同样,如果主库也没有在规定时间内响应哨兵的 PING 命令,哨兵就会判定主库下线,然后开始自动切换主库的流程。

     

    2、选主

    这个流程首先是执行哨兵的第二个任务,选主。

    主库挂了以后,哨兵就需要从很多个从库里,按照一定的规则选择一个从库实例,把它作为新的主库。这一步完成后,现在的集群里就有了新主库。

     

    3、通知

    然后,哨兵会执行最后一个任务:通知。

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

     

    在这三个任务中,通知任务相对来说比较简单,哨兵只需要把新主库信息发给从库和客户端,让它们和新主库建立连接就行,并不涉及决策的逻辑。但是,在监控和选主这两个任务中,哨兵需要做出两个决策:

    • 在监控任务中,哨兵需要判断主库是否处于下线状态;
    • 在选主任务中,哨兵也要决定选择哪个从库实例作为主库。

      

    三、主库下线和选主判断

    1、哨兵集群

    为了降低误判率,在实际应用时,哨兵机制通常采用多实例的方式进行部署,多个哨兵实例通过“少数服从多数”的原则,来判断主库是否客观下线。一般来说,我们可以部署三个哨兵,如果有两个哨兵认定主库“主观下线”,就可以开始切换过程。当然,如果你希望进一步提升判断准确率,也可以再适当增加哨兵个数,比如说使用五个哨兵。

     

    2、如何判断

    哨兵进程会使用 PING 命令检测它自己和主、从库的网络连接情况,用来判断实例的状态

    如果哨兵发现主库或从库对 PING 命令的响应超时了,那么,哨兵就会先把它标记为“主观下线”。

    如果检测的是从库,那么,哨兵简单地把它标记为“主观下线”就行了,因为从库的下线影响一般不太大,集群的对外服务不会间断。

    但是,如果检测的是主库,那么,哨兵还不能简单地把它标记为“主观下线”,开启主从切换。因为很有可能存在这么一个情况:那就是哨兵误判了,其实主库并没有故障。可是,一旦启动了主从切换,后续的选主和通知操作都会带来额外的计算和通信开销。

     

    3、如何选定新主库?

    一般来说,我把哨兵选择新主库的过程称为“筛选 + 打分”。简单来说,我们在多个从库中,按照一定的筛选条件,把不符合条件的从库去掉。

     

     

     

  • 相关阅读:
    【35分钟掌握金融风控策略2】场景概述2
    K8s自我探索实践心得
    安装VMware和安装虚拟机Linux和网络配置
    Go语言的IO库那么多纠结该如何选择
    图文并茂的帮助文档你值得拥有
    联想y7000p怎么开启高性能模式?
    haproxy实验
    WebRTC[50] - WebRTC支持SVC时SDP信令的协商过程
    365包包模式系统,月月换新包,满足你的小任性
    家庭用户无线上网案例(AC通过三层口对AP进行管理)
  • 原文地址:https://www.cnblogs.com/binyue/p/17320666.html