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,即一半以上。

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

  • 相关阅读:
    一致性哈希算法
    Discourse 的标签(Tag)只能是小写的原因
    JIRA 链接 bitbucket 提示错误 Invalid OAuth credentials
    JIRA 如何连接到云平台的 bitbucket
    Apache Druid 能够支持即席查询
    如何在 Discourse 中配置使用 GitHub 登录和创建用户
    Apache Druid 是什么
    Xshell 如何导入 PuTTYgen 生成的 key
    windows下配置Nginx支持php
    laravel连接数据库提示mysql_connect() :Connection refused...
  • 原文地址:https://www.cnblogs.com/edda/p/13068265.html
Copyright © 2011-2022 走看看