如题。
Redis哨兵是在 Redis原生主从复制 的基础上,实现了故障切换(failover)的自动化。
简单描述的话,当 Redis主节点 发生故障后,Sentinel 会通过 Gossip 协议进行故障检测,确认宕机后会通过一个简化的 Raft 协议来提升 Slave 成为新的 Master。
官方文档https://redis.io/topics/sentinel 中推荐的哨兵集群配置是,至少是3个sentinel节点,并且最好部署在不同的机器甚至是物理区域。举的反例也是两个节点的反例。
我想问的是,如果只使用一个哨兵节点,是否能实现自动化故障切换的功能?会有其他方面的影响吗?
自问自答一波。
果然还是要实践出真知。
先说结论
哨兵配置中有这么一条配置,来确认主节点客观下线的条件。
关于这个<quorum>官网的解释是:
翻译一下就是说,只要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
,发现故障自动切换成功进行了。