Redis Sentinel

Sentinel是Redis高可用的解决方案:由一个或多个Sentinel实例组成的Sentinel系统。

当主故障下线时,从会升级为主,同时和其他从同步。

当原来的主上线时,会降级为新主的从。

1、启动和初始化

  1. 初始化一个redis服务器:Sentinel系统本质上就是一个特殊模式的redis服务器。
  2. 使用Sentinel专用代码,使用专用的命令表
  3. 初始化Sentinel状态,初始化sentinelState结构,保存服务器中所有和Sentinel功能有关的状态
  4. 初始化Sentinel状态的master属性,master字典记录了所有被Sentinel监视的主服务器的相关信息。
  5. 创建连向主服务器的网络连接

2、获取主服务器信息

每十秒一次获取主信息,包括其中的从信息,更新Sentinel实例结构中的信息。

3、获取从服务器信息

每十秒一次获取从的详细信息,更新Sentinel实例结构中的信息。

4、向主从发送信息

发送给服务器信息的目的是什么?

5、接收主从的频道信息

订阅连接是什么?

接收到的信息是什么?

Sentinel不仅保存主从的信息,而且也会保存其他Sentinel的信息,并且相互更新。

6、检测主观下线状态

Sentinel每秒一次向主从,以及其他Sentinel发送ping命令,超过主观下线时长的服务器没有反应或者返回错误,就认为是主观下线。

7、检查客观下线状态

Sentinel向其他Sentinel发送命令询问主服务器是否下线,如果quorum 数量的Sentinel都认为主观下线,则该服务器被设置为客观下线。

sentinel发送is-master-down-by-addr给其他 Sentinel,然后接收回复。

判断的数量由quorum 来配置

不同 Sentinel 载入 quorum 的配置不同,判断客观下线的条件不同

8、选举领头Sentinel

每个发现主服务器主观下线的 Sentinel都会要求其他 Sentinel将自己设置为局部领头 Sentinel。

先到先得,超过半数投票即为领头,由领头 Sentinel对下线的主服务器进行故障转移操作。

9、故障转移

1.先选出新的主服务器,根据层层筛选,选出最稳定的,数据最新的作为主服务器

删除断连的,没有回复的,按照优先级对剩下的进行排序。

2.让其他从服务器都去复制新的主服务器

3.将旧的主变为新的从