Redis脑裂


在生产环境中Redis都是主从哨兵模式的高可用集群,一个master 主机,多个slave从机(哨兵监听master(master提供写服务),master数据同步到slave从机(slave提供读服务)),
由于网络问题,会导致redis的master节点,slave节点和sentinel集群处于不同的网络分区。此时,由于sentinel集群 无法感知到master的存在(哨兵,master,slave三者之间不能
进行通信),sentinel会将slave节点提升至master节点,此时,存在两个不同的master节点,就像一个大脑分裂成了两个,这就是redis产生脑裂问题的原因。

image


那Redi产生脑裂会有什么危害呢?当sentinel集群产生脑裂后,原客户端还会基于原来的master节点输入数据,但是新的master接受不到客户端输入的数据,也无法获取原来的master节点读取到的数据,在解决网络问题后,sentinel集群会将原来的master节点将为slave节点,,这个时候slave节点会从新的master节点获取数据,这就会造成旧数据丢失,也无法同步新数据,(简单来说就是会造成数据丢失)。

解决办法,在redis配置文件中添加两个参数

min-slave-writer 3(slave的最下连接数)

min-slaves-max lag 10 (slave连接到master的最大延迟时间)

在完成这些配置后,要求至少有个slave节点,且数据复制和同步延迟不能超过10秒,否者master节点会拒绝客户端的输入请求,让所有的数据在新的master节点上进行,从而保证数据
的一致性,减少数据同步之后的数据丢失(这里会有微乎其微的一点数据丢失但无伤大雅)。

posted @ 2025-08-23 00:24  K747  阅读(8)  评论(0)    收藏  举报