Redis 高可用 哨兵集群

127 阅读1分钟

上篇我们介绍了哨兵的选主,哨兵集群共同判断可以有效的降低对主库下线的误判。 这篇我们再讨论一下当哨兵实例运行发生故障,主从还能正常切换吗?

如果你部署过哨兵集群就会知道,哨兵节点只需要配置Redis主库的IP、port就可以了,并不需要其他哨兵的连接信息,哨兵之间不知道彼此的地址怎么组成集群,这相当反直觉。

sentinel monitor <master-name> <ip> <redis-port> <quorum>

答案是哨兵实例之间是利用Redis提供的pub/sub机制建立连接的。哨兵只要和主库建立连接,同时订阅主库的"sentinel:hello"频道,发布自己的IP地址和port端口号,不同的哨兵就可以实现互相发现,互相通信。

哨兵又如何知道从库的IP地址和port端口呢?

这是用哨兵当客户端给主库发送INFO命令,主库INFO信息包含了从库列表,从而哨兵和从库也建立了连接

除此之外,哨兵要需要把新的主库信息通知给客户端。本质上哨兵也是一个运行的特定模式下的Redis实例, 只不过他是完成监控、选主、通知任务。哨兵还提供了主从库切换过程中的不同关键事件的频道监听。

客户端可以进行订阅获取需要的信息。