redis集群脑裂分析

哨兵(sentinel)模式下的脑裂

如上图,1个master与3个slave组成的哨兵模式(哨兵独立部署于其它机器),刚开始时,2个应用服务器server1、server2都连接在master上,如果master与slave及哨兵之间的网络发生故障,但是哨兵与slave之间通讯正常,这时3个slave其中1个经过哨兵投票后,提升为新master,如果恰好此时server1仍然连接的是旧的master,而server2连接到了新的master上。

数据就不一致了,基于setNX指令的分布式锁,可能会拿到相同的锁;基于incr生成的全局唯一id,也可能出现重复。

解决方案:

1.使用如下配置

1
2
3
4
# 连接到master的最少slave数
min-slaves-to-write 1
# slave连接master的最大延迟时间
min-slaves-max-lag 10

10秒内的数据会混乱,

集群(cluster)模式下的脑裂

sentinel
cluster-tutorial