「脑裂」,我自己总结的定义的是:
脑裂,是指分布式系统中的节点,因为网络或其他的原因,其中一部分节点和原来的系统失去通信(产生分区),然后这些节点重新选举出来一个 Master(大脑)。此时分布式系统中就会有 2 + 个“大脑”,当网络通信恢复正常后,分布式系统中就会有两个“大脑”,则分布式系统中的节点该听谁的?进而会导致数据异常,系统崩溃等问题。
所以通过上面的定义,可以知道,产生『脑裂』 的前提是分布式系统中必须有一个“大脑”,而我在这篇文章 聊聊「分布式系统」中讲的第一类集群是没有这个所谓的“大脑”的,所以这类集群中不会产生脑裂的情况。
在Elasticsearch、ZooKeeper 这些集群环境中,有一个共同的特点,就是集群中有一个“大脑”。比如 Elasticsearch 集群中有 Master 节点(主要负责集群操作相关的内容,如创建/删除索引,跟踪分片,决定哪些分片分配给哪些节点等),ZooKeeper 中的 Leader 节点(负责所有写操作)就是“大脑”,ZooKeeper 为了避免“脑裂”现象发生,采用的是“过半原则”。所谓的过半原则就是:在 Leader 选举的过程中,如果某台 ZooKeeper 节点获得了超过半数的选票,则此 ZooKeeper 节点就可以成为 Leader 了。
关于 ZooKeeper 解决『脑裂』的方式以及 ZooKeeper 详细分析,见我的博客 聊聊ZooKeeper(上)和 聊聊ZooKeeper(下)。