Redis 中的脑裂是什么?
从名字分析,脑裂现象就是大脑裂开了,一个人如果有两个大脑,就出现了两个决策者,此时身体就不知道该听谁的了,势必会造成混乱。
对应到 Redis 上,就是指在主从集群中,同时有两个主节点,它们都能接收写请求,那么什么时候会出现这种情况呢?
就是如果当前主库突然出现暂时性 “失联”,而并不是真的发生了故障,此时监听的哨兵会自动启动主从切换机制。当这个原始的主库从假故障中恢复后,又开始处理请求,但是哨兵已经选出了新的主库,这样一来,旧的主库和新主库就会同时存在,这就是脑裂现象。
脑裂有什么影响?
脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据。严重的话,脑裂会进一步导致数据丢失。也就是说,等到哨兵让原主库和新主库做全量同步后,原主库在切换期间保存的数据就丢失了。
详细点来说,当主从切换后,从库升级为新主库,原主库和新主库会重新进行数据的全量同步,在这个过程中会发生数据的丢失,过程如下所示: