Redis 哨兵 自动化故障切换 只配置单个哨兵节点是否可行?

如题。

Redis哨兵是在 Redis原生主从复制 的基础上,实现了故障切换(failover)的自动化。

简单描述的话,当 Redis主节点 发生故障后,Sentinel 会通过 Gossip 协议进行故障检测,确认宕机后会通过一个简化的 Raft 协议来提升 Slave 成为新的 Master。

官方文档https://redis.io/topics/sentinel 中推荐的哨兵集群配置是,至少是3个sentinel节点,并且最好部署在不同的机器甚至是物理区域。举的反例也是两个节点的反例。

我想问的是,如果只使用一个哨兵节点,是否能实现自动化故障切换的功能?会有其他方面的影响吗?

阅读 3k
1 个回答

自问自答一波。
果然还是要实践出真知。

先说结论

只配置单哨兵节点还是可以达到故障切换功能,只是说就不满足HA的要求了。

哨兵配置中有这么一条配置,来确认主节点客观下线的条件。

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

关于这个<quorum>官网的解释是:

clipboard.png

翻译一下就是说,只要sentinel集群中,有<quorum>节点把主节点标记为SDOWN(主观下线的状态),主节点就会被标记为ODOWN(客观下线),然后就会执行故障切换。

实操

我在一台服务器上,启了redis-master节点(port:6379)、redis-slave(port:16379)节点、redis-sentinel(port:26379)单节点。
然后,使用redis-cli -p 6379 -a DEBUG sleep 20模拟主节点掉线,然后观察sentinel.log,发现故障自动切换成功进行了。

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进