14_redis哨兵机制

redis哨兵(sential)

哨兵人巡查监控后后台master主机是否故障,如果故障了根据投票数自动将某一个从机转换为主机,继续对外提供服务。

哨兵的作用

  1. 监控redis主机的运行状态,包括主机master和slave。
  2. 当主机宕机后,能自动将从机切slave换成新的主机master

注意哨兵不使用集群,仅仅是和主从复制相互配合。

配置redis哨兵

我们知道,网络是不可靠的,有时候一个sentinel会因为网络堵塞而误认为一个redis主机挂掉了,在sentinel集群环境下需要多个sentinel互相沟通来确认某个redis主机真的挂掉。投票数这个参数是进行客观下线的依据,意思是至少有quorum个sentinel认为redis主机是有故障的,才会对这个redis主机进行下线以及故障转移,因为有的时候某个sentinel节点可能是因为网络问题无法连接到redis主机,但此时redis主机并没有出现故障。所以,此时就需要多个sentinel都认为该redis主机出现故障,才进行下一步的操作。这保证了公平性和高可用性。

  1. 在myredis目录下新建或拷贝sentinel.conf文件(名字不能错,默认在redis安装目录下)
  2. 添加如下配置:

设置要监控的master服务器,其中quorum是法定投票数:表示最少有几个哨兵认可客观下线,同意故障迁移的法定投票数。

sentinel monitor

redis主机设置了密码,连接redis主机的密码

sentinel auth-pass

  1. 启动sentinel命令:

    redis-sentinel sentinel26379.conf --sentinel

    redis-sentinel sentinel26380.conf --sentinel

    redis-sentinel sentinel26381.conf --sentinel

相关问题

  1. 当redi主机挂了,从机仍然是好的。
  2. sentinel通过投票确认主机确实挂掉后,从剩下的从机中选择一个充当redis主机。
  3. 如果之前挂掉的redis主机重启回来后,会成为redis从机,因为新的redis主机已经选举出来了
  4. 注意:在master-slave切换后,master_redis.conf、slave_redis.conf、sentinel.conf的内容会发生变化,即master_redis.conf中会多一行slaveof配置,sentinel.conf的监控目标会发生变化。

哨兵运行流程

  1. 三个哨兵一主二从,正常运行中...
  2. SDown主观下线(Subjectively Down)
    1. 主观不可用指的是单个哨兵检测到master状态在发送ping心跳包后在一定时间内没有收到合法的回复,就达到了主观下线的条件。
    2. sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度(默认30s)。
  3. ODown客观下线(ObjectTively Down)
    1. 客观下线是需要多个哨兵一致认为该redis master确实宕机了。
  4. 选举出哨兵群中的领导者哨兵(用来指定谁是新的redis master)
    1. 当redis master被判定客观下线后,各个哨兵会进行协商,先选举出一个领导者哨兵并由该哨兵节点进行故障迁移。
    2. 领导者哨兵是如何选举出来的?----> Raft算法:先到先得,在一轮选举中,哨兵A向哨兵B发送想成为领导者的申请,如果B没有同意其它哨兵,则会同意A成为领导者。
  5. 由领导者哨兵开始推动故障切换流程并选举出一个新的redis master:
    1. 某个Slave被选举成为新的redis master。
    2. 选择新的master规则:
      1. 在redis配置文件中,权限优先级最高(数字越小)最优先
      2. 复制偏移量最大的节点其次优先(相对于宕机掉的master,数据的完整性最高)
      3. 最小Run ID的从节点优先(根据ASCII码)
    3. 让选举出来的节点执行slaveof no one命令成为新的master节点,并通过slaveof命令让其他slave节点成为新的master节点的slave
    4. 当原来宕机的master节点重启后会成为新的master节点的slave并恢复工作。
  6. 上述的工作均由sentinel自己独立完成,完全不需要人工的干预。

哨兵选举原理

当一个主从配置中的master失效后,sentinel可以选举出一个新的master用于自动接替master工作,主从配置中的其它redis服务器自动指向新的master服务器并同步数据。一般建议sentinel是奇数台,防指某一sentinel无法连接到master导致切换失败。

哨兵使用建议

  • 哨兵的数量应该为多个,哨兵本身就应该集群,保证高可用性。
  • 哨兵节点数量应该是奇数。
  • 哨兵节点配置最好都是一致的(硬件配置)
  • 哨兵集群+主从复制并不能保证数据零丢失 --> 引出redis集群
posted @ 2024-03-17 18:22  LilyFlower  阅读(5)  评论(0编辑  收藏  举报