【redis】-哨兵模式-一张图解释脑裂的数据丢失问题
一.什么是脑裂?
有了两个master,一个让你向左,一个让你向右,一个集群中出现多个主节点,使得集群处于异常状态。
二.脑裂的产生
2.1.正常的集群状态
两个网络只有1个master。
![](https://img2023.cnblogs.com/blog/42037/202303/42037-20230330221017616-845401647.jpg)
2.2.出现脑裂
当前集群中有6个节点,左边3个节点(在上海)和右边3个节点(在北京)不在同一个网络,如果两个网络之间出现通信异常,就会导致左边的3个节点重新选举一个新的主节点。
比如:master在北京,上海的从节点ping不通,上海这边大家重新选举了一个新的master后,然后又ping通了北京。
![](https://img2023.cnblogs.com/blog/42037/202303/42037-20230330221128372-1894409616.jpg)
三.造成脑裂的原因
3.1.网络原因
内网一般不会出现此问题,因为可以监控内网流量状态。外网出现网络问题的可能性更大一些,会导致其他节点认为主节点宕机了,从而重新选举新的主节点。
四.脑裂的数据丢失问题
出现了主节点和哨兵之间的网络通信问题,而且有多数以上的哨兵认为主节点宕机了,则会从从节点中选择一个作为新的主节点,但是这个时候客户端代码还是可以连接到之前的主节点的,还是可以继续写入数据的,此时哨兵选举了新的主节点,然后之前的主网络恢复了,然后之前的主节点降为从节点,备份现在的新的主节点数据,就造成了数据丢失。
![](https://img2023.cnblogs.com/blog/42037/202301/42037-20230113110510665-1669782749.jpg)
旧书不厌百回读,熟读深思子自知。