Redis的主从同步配合哨兵模式,可以有效地提升我们Redis的高可用性。当主节点挂掉之后,哨兵集群可以择优选取从节点作为新的主节点,从而保证服务的可用性。
Redis Sentinel集群类似一个zookeeper集群,是集群高可用的心脏,一般由3-5个节点组成,即使个别节点挂了,集群还是可以正常运转。
Sentinel负责持续监控主从节点的健康,当主节点挂掉时,自动选择一个最优的从节点切换成为主节点。客户端来集群连接时,首先连接Sentinel,通过Sentinel查询主节点的地址,然后再连接主节点进行数据交互。
如果主节点发生了故障,客户端会重新向Sentinel查询地址,得到最新的主节点后,客户端会再次访问新的主节点地址,从而无需重启即可完成节点切换。
【消息丢失】
Redis主从是异步复制,所以主节点挂掉时,从节点可能没有全部收到同步消息,此时就发生了数据丢失。Sentinel无法保证消息不丢失,但是也能尽量保证消息少丢失。有两个选项可以限制主从延迟过大。
min-slaves-to-write 1 # 至少有一个节点在进行正常复制,否则就停止对外写服务,丧失可用性
min-slaves-max-lag 10 # 定义10S内没有收到从节点的反馈,就意味着从节点同步不正常。