mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-25 02:27:10 +08:00
zookeeper 脑裂现象描述完善
This commit is contained in:
parent
9573e365f7
commit
66dd9aa1c2
@ -1,4 +1,3 @@
|
||||
|
||||
<!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} -->
|
||||
|
||||
<!-- code_chunk_output -->
|
||||
@ -31,7 +30,6 @@
|
||||
|
||||
<!-- /code_chunk_output -->
|
||||
|
||||
|
||||
## 1. 前言
|
||||
|
||||
相信大家对 ZooKeeper 应该不算陌生。但是你真的了解 ZooKeeper 到底有啥用不?如果别人/面试官让你给他讲讲对于 ZooKeeper 的认识,你能回答到什么地步呢?
|
||||
@ -50,7 +48,7 @@
|
||||
|
||||
另外,本文不光会涉及到 ZooKeeper 的一些概念,后面的文章会介绍到 ZooKeeper 常见命令的使用以及使用 Apache Curator 作为 ZooKeeper 的客户端。
|
||||
|
||||
*如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!*
|
||||
_如果文章有任何需要改善和完善的地方,欢迎在评论区指出,共同进步!_
|
||||
|
||||
## 2. ZooKeeper 介绍
|
||||
|
||||
@ -260,6 +258,7 @@ ZooKeeper 集群中的所有机器通过一个 **Leader 选举过程** 来选定
|
||||
### 4.3. ZooKeeper 集群为啥最好奇数台?
|
||||
|
||||
ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooKeeper 服务器个数大于宕掉的个数的话整个 ZooKeeper 才依然可用。假如我们的集群中有 n 台 ZooKeeper 服务器,那么也就是剩下的服务数必须大于 n/2。先说一下结论,2n 和 2n-1 的容忍度是一样的,都是 n-1,大家可以先自己仔细想一想,这应该是一个很简单的数学问题了。
|
||||
|
||||
比如假如我们有 3 台,那么最大允许宕掉 1 台 ZooKeeper 服务器,如果我们有 4 台的的时候也同样只允许宕掉 1 台。
|
||||
假如我们有 5 台,那么最大允许宕掉 2 台 ZooKeeper 服务器,如果我们有 6 台的的时候也同样只允许宕掉 2 台。
|
||||
|
||||
@ -267,11 +266,15 @@ ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooK
|
||||
|
||||
### 4.4. ZooKeeper 选举的过半机制防止脑裂
|
||||
|
||||
集群脑裂:对于一个集群,通常多台机器会部署在不同机房,来提高这个集群的可用性。保证可用性的同时,会发生一种机房间网络线路故障,导致机房间网络不通,而集群被割裂成几个小集群。这时候子集群各自选主导致“脑裂”的情况。
|
||||
**何为集群脑裂?**
|
||||
|
||||
举例说明:比如现在有一个由6台服务器所组成的一个集群,部署在了两个机房,每个机房三台。正常情况下只有一个leader,但是当两个机房中间网络断开的时候,每个机房的三台服务器都会认为另一个机房的三台服务器下线,而选出自己的leader并对外提供服务。若没有过半机制,当网络恢复的时候会发现有两个leader。仿佛是一个大脑(leader)分散成了两个大脑,这就发生了脑裂现象。因为脑裂期间两个大脑都可能对外提供了服务,这将会带来数据一致性等问题。
|
||||
对于一个集群,通常多台机器会部署在不同机房,来提高这个集群的可用性。保证可用性的同时,会发生一种机房间网络线路故障,导致机房间网络不通,而集群被割裂成几个小集群。这时候子集群各自选主导致“脑裂”的情况。
|
||||
|
||||
过半机制防止脑裂:ZooKeeper的过半机制导致不可能产生两个leader,因为少于等于一半是不可能产生leader的,这就使得不论机房的机器如何分配都不可能发生脑裂。
|
||||
举例说明:比如现在有一个由 6 台服务器所组成的一个集群,部署在了 2 个机房,每个机房 3 台。正常情况下只有 1 个 leader,但是当两个机房中间网络断开的时候,每个机房的 3 台服务器都会认为另一个机房的 3 台服务器下线,而选出自己的 leader 并对外提供服务。若没有过半机制,当网络恢复的时候会发现有 2 个 leader。仿佛是 1 个大脑(leader)分散成了 2 个大脑,这就发生了脑裂现象。脑裂期间 2 个大脑都可能对外提供了服务,这将会带来数据一致性等问题。
|
||||
|
||||
**过半机制是如何防止脑裂现象产生的?**
|
||||
|
||||
ZooKeeper 的过半机制导致不可能产生 2 个 leader,因为少于等于一半是不可能产生 leader 的,这就使得不论机房的机器如何分配都不可能发生脑裂。
|
||||
|
||||
## 5. ZAB 协议和 Paxos 算法
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user