1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

Merge pull request #1278 from VinterHe/patch-7

增加zookeeper选举的过半机制防止脑裂的描述
This commit is contained in:
Guide哥 2021-07-20 21:23:33 +08:00 committed by GitHub
commit 9573e365f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -265,6 +265,14 @@ ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooK
综上,何必增加那一个不必要的 ZooKeeper 呢?
### 4.4. ZooKeeper 选举的过半机制防止脑裂
集群脑裂:对于一个集群,通常多台机器会部署在不同机房,来提高这个集群的可用性。保证可用性的同时,会发生一种机房间网络线路故障,导致机房间网络不通,而集群被割裂成几个小集群。这时候子集群各自选主导致“脑裂”的情况。
举例说明比如现在有一个由6台服务器所组成的一个集群部署在了两个机房每个机房三台。正常情况下只有一个leader但是当两个机房中间网络断开的时候每个机房的三台服务器都会认为另一个机房的三台服务器下线而选出自己的leader并对外提供服务。若没有过半机制当网络恢复的时候会发现有两个leader。仿佛是一个大脑leader分散成了两个大脑这就发生了脑裂现象。因为脑裂期间两个大脑都可能对外提供了服务这将会带来数据一致性等问题。
过半机制防止脑裂ZooKeeper的过半机制导致不可能产生两个leader因为少于等于一半是不可能产生leader的这就使得不论机房的机器如何分配都不可能发生脑裂。
## 5. ZAB 协议和Paxos 算法
Paxos 算法应该可以说是 ZooKeeper 的灵魂了。但是ZooKeeper 并没有完全采用 Paxos算法 ,而是使用 ZAB 协议作为其保证数据一致性的核心算法。另外在ZooKeeper的官方文档中也指出ZAB协议并不像 Paxos 算法那样是一种通用的分布式一致性算法它是一种特别为Zookeeper设计的崩溃可恢复的原子消息广播算法。