Skip to content

Commit edecf8f

Browse files
authored
修改ZooKeeper 选举的过半机制防止脑裂
1 parent bfd6faa commit edecf8f

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

docs/system-design/distributed-system/zookeeper/zookeeper-intro.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,12 @@ ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooK
266266
综上,何必增加那一个不必要的 ZooKeeper 呢?
267267

268268
### 4.4. ZooKeeper 选举的过半机制防止脑裂
269-
另外过半机制也可以防止脑裂情况的发生。
270269

271-
脑裂:对于一个集群,想要提高这个集群的可用性,通常会采用多机房部署,比如现在有一个由6台服务器所组成的一个集群,部署在了两个机房,每个机房三台。正常情况下只有一个leader,但是当两个机房中间网络断开的时候,每个机房的三台服务器都会认为另一个机房的三台服务器下线,而选出自己的leader并对外提供服务。若没有过半机制,当网络恢复的时候会发现有两个leader。仿佛是一个大脑(leader)分散成了两个大脑,这就发生了脑裂现象。因为脑裂期间两个大脑都对外提供了服务,这将会带来数据一致性等问题。
270+
集群脑裂:对于一个集群,通常多台机器会部署在不同机房,来提高这个集群的可用性。保证可用性的同时,会发生一种机房间网络线路故障,导致机房间网络不通,而集群被割裂成几个小集群。这时候子集群各自选主导致“脑裂”的情况。
271+
272+
举例说明:比如现在有一个由6台服务器所组成的一个集群,部署在了两个机房,每个机房三台。正常情况下只有一个leader,但是当两个机房中间网络断开的时候,每个机房的三台服务器都会认为另一个机房的三台服务器下线,而选出自己的leader并对外提供服务。若没有过半机制,当网络恢复的时候会发现有两个leader。仿佛是一个大脑(leader)分散成了两个大脑,这就发生了脑裂现象。因为脑裂期间两个大脑都可能对外提供了服务,这将会带来数据一致性等问题。
273+
274+
过半机制防止脑裂:ZooKeeper的过半机制导致不可能产生两个leader,因为少于等于一半是不可能产生leader的,这就使得不论机房的机器如何分配都不可能发生脑裂。
272275

273276
## 5. ZAB 协议和Paxos 算法
274277

0 commit comments

Comments
 (0)