天天看点

Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

一、哨兵机制

Sentinel

1、哨兵的概念

  • Sentinel(哨兵)

    是Redis 的

    高可用性

    解决方案:由

    一个或多个Sentinel实例组成的Sentinel 系统

    可以监视任意多个

    主服务器

    ,以及这些

    主服务器属下的所有从服务器

    ,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构。
  • 简单来说, 当一个

    master

    节点的redis服务挂掉了,

    sentinel

    机制会发现, 并从剩余的

    slave

    节点的redis服务中, 选举出一个slave, 来充当新的

    master

    节点。
Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理
  • 哨兵(sentinel)

    是一个分布式系统,用于对

    主从结构

    中的

    每台服务器进行监控

    ,当出现故障时通过

    投票机制

    选择新的master并将所有slave连接到新的master。
Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

2、哨兵的作用

  • 监控

    • 不断的

      检查master

      slave

      是否

      正常

      运行。
    • master存活检测、master与slave运行情况检测
  • 通知(提醒)

    • 当被

      监控的服务器

      出现问题时,向

      其他(哨兵间,客户端)发送通知

  • 自动故障转移

    • 断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址

注意:

  • 哨兵也是一台

    redis服务器

    ,只是不提供数据服务
  • 通常哨兵配置数量为

    单数

    (选举master防止同票)

二、启用哨兵机制

Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

在同一个服务器中如何模拟三个哨兵服务呢?

  • 将Redis安装包中的配置文件

    sentinel.conf

    拷贝出来, 然后在

    sentinel.conf

    中修改端口, 以及设置master的端口地址, 然后通过

    redis-sentinel sentinel-端口号.conf

    即可
  • 启动哨兵,

    redis-cli -p 26379

Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理
Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

当启动哨兵服务后, 每一个哨兵都会相互注册, 此时

sentinel.conf

配置文件以及修改了;

Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理
Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理
Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

二、哨兵机制的原理

主从切换
  • 哨兵在进行

    主从切换

    过程中经历三个阶段
    • 监控

    • 通知

    • 故障转移

1、监控阶段

就是上面我们启动各个

哨兵服务

的时候, 不同的

哨兵服务

的信息会相互

监控

, 包括

master

节点的信息以及master节点的

slave

节点信息; 能拿到

master

节点信息是因为在哨兵的配置文件

sentinel.conf

中配置了

master节点的ip,端口地址

;

  • 一个哨兵服务, 可以

    监控

    其他的哨兵, 还可以监控

    master

    节点的信息, 以及该

    master

    节点下的

    slave

    节点的信息。
    Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理
  • 多个哨兵服务之间可以相互通信, 它们是一个

    小圈子

    , 它们直接通过

    发布订阅

    的方式来相互

    通知

    Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

2、通知阶段

Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

3、故障转移阶段

  • 首先

    sentinel1

    master

    发送hello指令, 此时master没有任何反应, 也拿不到它的信息, 标记master为

    SRI_S_DOWN(主观下线)

    ; 此时该

    sentinel1

    会在它的小圈子(sentinel系统)中说, master挂掉了; 此时sentinel2、sentinel3也都向master发送hello指令, 也得不到回应(或者超过半数), 此时该master确定挂掉了, 标记为

    SRI_O_DOWN(客观下线)

    ;
Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

下一步就是清理该master了, 也就是将宕机的master下线

, 首先要在多个

sentinel

中选举

一个

来清理; 在多个sentinel中通过

投票

来选举出来一个领头的

sentinel

;

Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

然后领头的sentinel会从多个slave中挑选一个来充当master

Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理
具体选举的要求
  • 由推选出来的哨兵对当前的slave进行筛选,筛选条件有:
    • 服务器列表中挑选备选master
    • 在线的
    • 响应慢的
    • 与原master断开时间久的
    • 优先原则
      • 优先级
      • offset
      • runid
    • 发送指令( sentinel )
      • 向新的master发送slaveof no one(断开与原master的连接)
      • 向其他slave发送slaveof 新masterIP端口(让其他slave与新的master相连)
Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

4、详细解读sentinel服务打印的信息

Redis——哨兵机制(Sentinel)、哨兵原理一、哨兵机制 Sentinel二、启用哨兵机制二、哨兵机制的原理

继续阅读