Sentinel 组成的sentinel系统可以监视任意多个主服务器以及主服务器属下的所有从服务器,并在被监视的主服务器进入下贱状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,继续处理请求。
也就是说当S1断线了,然后会选举S2 3 4 其中一个成为新的主服务器。
16.1 启动并初始化Sentinel
redis-sentinel /path/to/your/sentinel.conf
启动一个Sentinel时,需要执行以下步骤:
1、初始化服务器
2、将普通Redis服务器使用的状态代码换成Sentinel专用代码
3、初始化Sentinel状态
4、根据给定的配置文件,初始化Sentinel的监视主服务器列表
5、创建连接主服务器的网络连接。
那么问题来了?如果Sentinel服务器挂了怎么办?单点故障?所以还是Sentinel也要主从。
16.1.1 初始化服务器
Sentinel是特殊的redis服务器,所以要先启动redis服务器。
有点像Znode节点的一些特性。
16.1.2 使用Sentinel专用代码
启动Sentinel的第二个步骤就是将一部分普通的Redis服务器使用的代码替换成Sentinel专用代码。
16.1.3 初始化Sentinel状态
16.1.4 初始化Sentinel状态和masters属性
1、字典的键时主服务器的名字
2、值就是主服务器的对应sentinelRedisInstance实例结构
16.1.5 创建连向主服务器的网络连接
16.2 获取主服务器信息
Sentinel默认会以每十秒一次的频率,通过命令连接向被监视的主服务器发送INFO命令,并通过INFO命令的回复来获取当前信息。
回复slave、runid等各种信息。
16.3 获取从服务器信息
会恢复run_id\role\host\port\slave_priority\偏移量。
16.4 向主服务器和从服务器发送信息
在默认情况下sentinel会两秒一次发送hello命令检测心跳。
告诉别人自己的ip、端口
id、当前配置纪元、主服务器名字、ip端口。
16.5 接受来自主从的频道消息
16.5.1 更新sentinels字典
16.5.2 创建连向其他Sentinel的命令连接
16.6 检测主观下线状态
16.7 检测客观下线状态
16.7.1 发送SENTINEL is-master-down-by-addr
客观下线后会进行故障转移。
16.8 选举领头Sentinel
16.9 故障转移
16.9.1 选出新的主服务器
16.9.2 修改从服务器的复制目标
16.9.3 将旧的主服务器变为从服务器
16.10 重点回顾
- sentinel只是特殊的redis服务器,与普通redis有细微的命令表差别。
- sentinel会读入用户配置的文件创建命令连接和订阅连接。
- sentinel发送info命令来获得信息。
- sentinel发送info信息来获取从服务器信息。故障转移时是1秒一次。
- 同一个主的多个sentinel会以2秒一次发送
__sentinel__:hello
频道消息。 - 每个sentitnel也会接受其他sentinel的频道消息。
- 选举算法是raft算法
- sentinel主观下线时会看是否客观下线,足够多的客观下线就会重新选举 故障转移。