From bfd6faa26d08caecb6dfd15db58b77699a0a63bd Mon Sep 17 00:00:00 2001 From: VinterHe Date: Thu, 15 Jul 2021 17:17:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0zookeeper=E9=80=89=E4=B8=BE?= =?UTF-8?q?=E7=9A=84=E8=BF=87=E5=8D=8A=E6=9C=BA=E5=88=B6=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E8=84=91=E8=A3=82=E7=9A=84=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../distributed-system/zookeeper/zookeeper-intro.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/system-design/distributed-system/zookeeper/zookeeper-intro.md b/docs/system-design/distributed-system/zookeeper/zookeeper-intro.md index 4978fb1a..8c6d9645 100644 --- a/docs/system-design/distributed-system/zookeeper/zookeeper-intro.md +++ b/docs/system-design/distributed-system/zookeeper/zookeeper-intro.md @@ -265,6 +265,11 @@ ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooK 综上,何必增加那一个不必要的 ZooKeeper 呢? +### 4.4. ZooKeeper 选举的过半机制防止脑裂 +另外过半机制也可以防止脑裂情况的发生。 + +脑裂:对于一个集群,想要提高这个集群的可用性,通常会采用多机房部署,比如现在有一个由6台服务器所组成的一个集群,部署在了两个机房,每个机房三台。正常情况下只有一个leader,但是当两个机房中间网络断开的时候,每个机房的三台服务器都会认为另一个机房的三台服务器下线,而选出自己的leader并对外提供服务。若没有过半机制,当网络恢复的时候会发现有两个leader。仿佛是一个大脑(leader)分散成了两个大脑,这就发生了脑裂现象。因为脑裂期间两个大脑都对外提供了服务,这将会带来数据一致性等问题。 + ## 5. ZAB 协议和Paxos 算法 Paxos 算法应该可以说是 ZooKeeper 的灵魂了。但是,ZooKeeper 并没有完全采用 Paxos算法 ,而是使用 ZAB 协议作为其保证数据一致性的核心算法。另外,在ZooKeeper的官方文档中也指出,ZAB协议并不像 Paxos 算法那样,是一种通用的分布式一致性算法,它是一种特别为Zookeeper设计的崩溃可恢复的原子消息广播算法。 @@ -296,4 +301,4 @@ ZAB 协议包括两种基本的模式,分别是 ## 7. 参考 -1. 《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》 \ No newline at end of file +1. 《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》