linux哨兵命令 哨兵的命令

Sentinel(哨兵)Redis主从复制模式下 , 一旦主节点(主服务器)由于故障不能提供服务 , 需要人工将节点晋升为主节点,同时还要通知应用方更新主节点的地址 , 然而应用方无法及时感知到主节点的变化,必然会造成一定的写数据丢失和读数据错误,所以这是在大多数情况是无法接受的 。所以Redis提供了一种高可用的解决方法——哨兵 。
Sentinel是Redis的高可用解决方案: 由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态下时,自动将下线主服务器属下的某个从服务器升级为主服务器 , 然后由新的主服务器代替已下线的主服务器继续处理命令请求 。如果下线的主服务器重新连接上线的话,它会被Sentinel系统降级为新主服务器的从服务器 。而这些过程完全是自动的 , 不需要人工介 。
下面介绍Sentinel系统的具体工作过程 。
Sentinel只是一个运行在特殊模式下的Redis服务器,其本身就是独立的Redis节点,只不过它不存储数据 , 只支持部分命令 。
Sentinel会读入用户指定的配置文件,为每个要被监视的主服务器创建相应的实例结构保存在Sentinel状态(服务器初始化的一个sentinel结构,用于保存服务器中所有和Sentinel功能有关的状态)的masters属性中 。并创建连向主服务器的网络连接,Sentinel将成为主服务器的客户端,并从命令回复中获取相关信息 。
对于每个被Sentinel监视的主服务器来说,Sentinel会创建两个连向主服务器的异步网络连接:
1) 一个是命令连接,这个连接专门用于向主服务器的网络连接,并接受命令 。
2) 另一个是订阅连接 , 这个连接专门用于订阅主服务器的_sentinel_:hello频道 。
Sentinel默认每10秒一次的频率,通过命令连接向被 监视的主服务器发送 INFO 命令,并通过 INFO 命令的回复来获取主服务器以下的信息:
(1) 服务器本身的信息,包括运行ID以及服务器的角色(role);
(2) 主服务属下的所有从服务器信息,包括从服务器的IP地址,端口号 。根据这些IP和端口号,Sentinel无须用户提供从服务器的地址信息,就可以自动发现从服务器 。
Sentinel根据这些获取的信息对主服务的实例结构进行更新 。
对于上图,Sentinel将分别为3个从服务器创建各自的实例结构 , 并将这些实例结构保存主服务器实例结构的slaves属性里 。
当Sentinel发现主服务器有新的从服务器出现时,Sentinel除了会为这个新的从服务器创建相应的实例结构外,Sentinel还会为创建连接到从服务器的命令连接和订阅连接 。
在创建命令连接之后,Sentinel在默认情况下 ,  会以每10秒 一次的频率通过命令连接向从服务器发送 INFO 命令,并获取从服务器的回复信息,包括从服务器运行ID、从服务器的角色 , 主服务器的IP和端口、从服务的优先级等 。根据这些信息对从服务器实例结构进行更新 。
在默认情况下,Sentinel会以每2秒一次的频率,通过命令连接向所有被监听的主服务器和从服务器的_sentinel_ hello频道发送一条消息 。消息的信息包括Sentinel本身的信息和对主服务器判断的信息 。
当Sentinel与一个主服务器或者从服务器建立起订阅连接之后,Sentinel就会通过订阅连接,向服务器发送以下命令:SUBSCRIBE _sentinel_:hello。
Sentinel对_sentinel_:hello频道的订阅会一直持续到Sentinel与服务器的连接断开为止 。
这也就是说,对于每个与Sentinel连接的服务器,Sentinel既通过命令连接向服务器的 sentinel_:hello频道发送信息,又通过订阅连接从服务器的 sentinel :hello 频道接收信息 。

推荐阅读