Redis之Sentinel

162 阅读2分钟

Sentinel的应用场景

Redis的主从同步虽然保证了数据的安全,当然主节点故障时,可以将从节点升级为主节点继续对外提供服务,但是这个动作需要运维手工切换,人工切换将无法保证及时性,因此需要一个高可用的方案,当故障发生时,及时切换节点,Redis Sentinel(哨兵) 就是用于解决该问题存在的。

Sentinel负责监控主从节点的健康,当主节点挂掉时,自动选择一个最优的从节点成为主节点,由于单节点的Sentinel自身高可用性不可保证,所以一般Sentinel也是使用集群来保证自身的高可用的,与ZK类似,一般采用3-5个节点作为集群。

image.png

如果Redis主节点挂掉了,此时主从复制断开、客户端连接也断开了,Sentinel选择其中从节点升为主节点,其他从节点开始和新的主节点建立复制关系,客户端也将与新的主节点建立交互,

image.png

Sentinel会持续监控已经挂掉的主节点,等到恢复时,其将成为新的主节点的从节点,与其建立复制关系。

image.png

客户端建立连接时,先连接Sentinel获取到当前Redis的主节点信息,然后通过获取到的信息与主节点建立连接,

当主节点发生故障无法连接时,客户端重新向Sentinel获取新的主节点信息,然后客户端和最新的主节点建立连接,由此达到故障自动切换的效果。

image.png

消息丢失

主从节点数据复制是异步进行的,如果主从延迟较大,主节点挂掉后,丢失的数据可能会特别多,redis可以通过两个配置防止数据过多的丢失,

min-slaves-to-write 1
min-slaves-max-lag 10

min-slaves-to-write 表示主节点至少有一个从节点与主节点处于正常同步过程中,否则就停止对外写服务,丧失可用性。

min-slaves-max-lag 表示多久内没有收到从节点的反馈就判定发生了异常同步,该配置时间为s,例如上面的配置就是10s内没有收到从节点的反馈,就代表着同步发生了异常。