zoukankan      html  css  js  c++  java
  • redis入门到精通系列(九):redis哨兵模式详解

    (一)哨兵概述

    前面我们讲了redis的主从复制,为了实现高可用,会选择一台服务器作为master,多台服务器作为slave。现在有这样一种情况,master宕机了,这时系统会选择一台slave作为master,然后把宕机的master下线,再通知所有slave新的master是谁。这里就产生了一个问题,master是否宕机、选择哪台slave作为master都是谁来决定的?

    在主从复制中由哨兵(sentinel)来完成这些操作,哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master。

    哨兵也是一台redis服务器,通常配置哨兵数量为单数(竞选时避免打平)。

    (二)哨兵的作用

    1.监控:不断检查master和slave是否正常运行;master存活检测;master与slave运行情况检测

    2.通知:当被检测服务器出现问题时,向其他哨兵和客户端发送通知

    3.自动故障转移:端开master和slave连接,选取一个新的slave为master,将其他slave连接到新的master上

    (三)哨兵的工作原理

    3.1 监控阶段

    监控是哨兵的作用之一,监控是为了同步各个节点的状态信息

    1.获取其他各个哨兵的状态(是否在线),通过ping命令

    2.获取master的状态,主要包括master的runid,各个slave的详细信息等等,通过info指令

    3.获取所有的slave的状态(根据master中的slave信息),主要包括slave的runid,role,host,offset等等。

    当两个sentinel分别获取到master或slave的监控信息后,为了数据的同步会相互交流数据,同样当第三个sentinel获得监控信息后,也会和另外两个sentinel互相同步数据。

    3.2 通知阶段

    通知阶段主要是各个sentinel的相互交流,假设一个系统有三个sentinel,当sentinel1询问主从服务器状态并且得到回复之后,他会他消息告诉sentinel2和sentinel3。同样的当sentinel2得到消息后也会告诉1和3。使得数据始终同步。

    3.3 故障转移阶段

    当一台master宕机了,这就进入了故障转移阶段。

    1.首先一个sentinel发现给master不回应消息,于是把这个master的状态设置为sdown,并通知给其他的sentinel。其他的sentinel就会发送hello给该master,当一半以上(可以设置)的sentinel觉得这个master确实宕机了,于是master的状态就被设置为odown,这就进入了第二步。

    2.既然master宕机了,那就需要选举新的master,哪个sentinel去选择master,需要经过sentinel内部的投票机制来实现。当选出去执行找出新master的sentinel后,进入第三步。

    3.sentinel从slave中选择一个当成新的master有以下原则

    淘汰未在线的

    淘汰响应慢的

    淘汰与原master断开时间久的

    最终在剩下的slave中根据优先级,offset等选择一台成为新master

    4.sentinel向新的master发送指令:

    slaveof no one

      向其他slave发送指令

    slaveof 新masterIP 端口

    (四)哨兵的操作

    关于哨兵的操作建议在linux服务器下操作

    开启哨兵:

    redis-sentinel sentinel.conf (配置的文件名自定义)

    配置文件

    1. port 26379
    2. dir /tmp
    3. sentinel monitor mymaster 127.0.0.1 6379 2
    4. sentinel down-after-milliseconds 30000 //连接多长时间未响应就认为被监控服务器宕机
    5. parallel-syncs mymaster 1 //指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步
    6. failover-timeout mymaster 180000 //指定了故障转移的同步超时时间

    sentinel monitor mymaster 127.0.0.1 6379 2:127.0.0.1 6379表示该哨兵监控的对象,其中mymaster是自己定义的一个名字,最后一位2表示当有2个哨兵认为这个被监控服务器宕了,就确认该服务器宕机。这一位的取值往往是哨兵数量/2+1,即一半以上。

    其他的几个配置信息已经把注解写上去了,了解即可。

  • 相关阅读:
    OCA读书笔记(11)
    shell命令--rev
    OCA读书笔记(10)
    shell命令--cut
    OCA读书笔记(9)
    shell命令--tail
    天气的研究
    网络知识汇总(2)
    shell命令--head
    OCM读书笔记(2)
  • 原文地址:https://www.cnblogs.com/edda/p/13068265.html
Copyright © 2011-2022 走看看