天天看点

Redis哨兵Sentinel

Sentinel 是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器以及它们的下属从服务器。

1、Sentinel基本监视原理

如下图显示,Sentinel系统监视了一个主服务器server1和它的三个从服务器server2、3、4.

Redis哨兵Sentinel

当server1因为某种情况下线时,Sentinel系统会对server1做出 故障转移 处理,将server1的三个从服务器之一作为新的主服务器,并将其他从服务器当作新的主服务器的slave。

Redis哨兵Sentinel

此时,Sentinel系统还会继续监视之前的server1,当server1恢复工作状态之后,Sentinel系统会把它设置为server2的从服务器。

Redis哨兵Sentinel
2、Sentinel的启动与使用

当Sentinel启动之后,就不能使用一般的Redis服务器命令了,只能使用这7个sentinel命令:ping、sentinel、info、subscribe、unsubscribe、psubscribe和punsubscribe。

命令连接 监视

Sentinel会与服务器建立命令连接,使Sentinel可以向服务器发送指令。

创建命令连接之后:

1、Sentinel默认以10秒一次的频率向与其连接的主从服务器 通过命令连接 发送INFO命令,通过分析INFO命令的回复来获取服务器当前的信息和拓扑结构。

2、Sentinel默认以2秒一次的频率 通过 命令连接 向特定频道发送命令(以发布-订阅方式),服务器会通过 订阅连接 向频道返回信息,这样通过频道的方式会使所有订阅了该频道的其他sentinel也接收到相关信息。

订阅连接

Sentinel除了与连接的服务器建立 命令连接 之外,还会建立 订阅连接,多个sentinel可以和同一个服务器建立 订阅连接,这样当一个sentinel通过频道向服务器发送一条消息的时候,其他sentinel都可以发现,这种方式可以加强sentinel之间的交流。

主观下线

默认情况下,Sentinel以每秒一次的频率向所有与它建立连接的实例(包括主、从服务器、其他Sentinel)发送ping命令,并根据回复判断实例是否在线。如果不在线,就认定该实例为主观下线状态(仅这个Sentinel的判定)。

可观下线

当一个Sentinel判定一个主服务器为主观下线之后(但这只是它一个人的判断),为了确认这个主服务器是否真的下线,它会询问其他监视该主服务器的Sentinel,如果这个Sentinel从其他Sentinel那里得到了足够数量的证据证明该服务器下线,就判定该服务器为客观下线。

选举领头Sentinel

当一个主服务器被判断为客观下线时,监视该服务器的所有Sentinel会进行协商,选举出一个领头Sentinel,让该领头来对下线的主服务器进行故障转移操作。

继续阅读