一、哨兵机制 Sentinel
Sentinel
1、哨兵的概念
-
是Redis 的Sentinel(哨兵)
解决方案:由高可用性
可以监视任意多个一个或多个Sentinel实例组成的Sentinel 系统
,以及这些主服务器
,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构。主服务器属下的所有从服务器
- 简单来说, 当一个
节点的redis服务挂掉了,master
机制会发现, 并从剩余的sentinel
节点的redis服务中, 选举出一个slave, 来充当新的slave
节点。master
-
是一个分布式系统,用于对哨兵(sentinel)
中的主从结构
,当出现故障时通过每台服务器进行监控
选择新的master并将所有slave连接到新的master。投票机制
2、哨兵的作用
-
监控
- 不断的
和检查master
是否slave
运行。正常
- master存活检测、master与slave运行情况检测
- 不断的
-
通知(提醒)
- 当被
出现问题时,向监控的服务器
。其他(哨兵间,客户端)发送通知
- 当被
-
自动故障转移
- 断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
注意:
- 哨兵也是一台
,只是不提供数据服务redis服务器
- 通常哨兵配置数量为
(选举master防止同票)单数
二、启用哨兵机制
在同一个服务器中如何模拟三个哨兵服务呢?
- 将Redis安装包中的配置文件
拷贝出来, 然后在sentinel.conf
中修改端口, 以及设置master的端口地址, 然后通过sentinel.conf
即可redis-sentinel sentinel-端口号.conf
- 启动哨兵,
redis-cli -p 26379
当启动哨兵服务后, 每一个哨兵都会相互注册, 此时
sentinel.conf
配置文件以及修改了;
二、哨兵机制的原理
主从切换
- 哨兵在进行
过程中经历三个阶段主从切换
-
监控
-
通知
-
故障转移
-
1、监控阶段
就是上面我们启动各个
哨兵服务
的时候, 不同的
哨兵服务
的信息会相互
监控
, 包括
master
节点的信息以及master节点的
slave
节点信息; 能拿到
master
节点信息是因为在哨兵的配置文件
sentinel.conf
中配置了
master节点的ip,端口地址
;
- 一个哨兵服务, 可以
其他的哨兵, 还可以监控监控
节点的信息, 以及该master
节点下的master
节点的信息。slave
- 多个哨兵服务之间可以相互通信, 它们是一个
, 它们直接通过小圈子
的方式来相互发布订阅
通知
2、通知阶段
3、故障转移阶段
- 首先
向sentinel1
发送hello指令, 此时master没有任何反应, 也拿不到它的信息, 标记master为master
; 此时该SRI_S_DOWN(主观下线)
会在它的小圈子(sentinel系统)中说, master挂掉了; 此时sentinel2、sentinel3也都向master发送hello指令, 也得不到回应(或者超过半数), 此时该master确定挂掉了, 标记为sentinel1
;SRI_O_DOWN(客观下线)
下一步就是清理该master了, 也就是将宕机的master下线
, 首先要在多个
sentinel
中选举
一个
来清理; 在多个sentinel中通过
投票
来选举出来一个领头的
sentinel
;
然后领头的sentinel会从多个slave中挑选一个来充当master
具体选举的要求
- 由推选出来的哨兵对当前的slave进行筛选,筛选条件有:
- 服务器列表中挑选备选master
- 在线的
- 响应慢的
- 与原master断开时间久的
- 优先原则
- 优先级
- offset
- runid
- 发送指令( sentinel )
- 向新的master发送slaveof no one(断开与原master的连接)
- 向其他slave发送slaveof 新masterIP端口(让其他slave与新的master相连)