Zookeeper

Zookeeper概述

2019-06-03  本文已影响0人  码道功臣

什么是zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。

简单来说zookeeper=文件系统+监听通知机制

zookeeper的作用

znode节点类型

高可用

leader选举

zookeeper leader 选举

服务器启动时期的Leader选举

若进行Leader选举,则至少需要两台机器,这里选取3台机器组成的服务器集群为例。在集群初始化阶段,当有一台服务器Server1启动时,其单独无法进行和完成Leader选举,当第二台服务器Server2启动时,此时两台机器可以相互通信,每台机器都试图找到Leader,于是进入Leader选举过程。选举过程如下

服务器运行时期的Leader选举

在Zookeeper运行期间,Leader与非Leader服务器各司其职,即便当有非Leader服务器宕机或新加入,此时也不会影响Leader,但是一旦Leader服务器挂了,那么整个集群将暂停对外服务,进入新一轮Leader选举,其过程和启动时期的Leader选举过程基本一致。假设正在运行的有Server1、Server2、Server3三台服务器,当前Leader是Server2,若某一时刻Leader挂了,此时便开始Leader选举。

选举过程如下:

数据同步

使用2PC两段式提交确保数据一致性

为什么建议集群节点建议为奇数个节点

zookeeper集群节点数需要超过半数,整个集群对外才可用。这里所谓的整个集群对外才可用,是指整个集群还能选出一个Leader来,zookeeper默认采用quorums来支持Leader的选举。

quorums机制有两个作用:

举个列子(设集群的最少节点数为n):

集群总节点数 最少可用的节点数 可容忍失效的节点数
1 1 0
2 2 0
3 2 1
4 3 1
5 3 2
6 4 2
... ... ...
2n-1 n n-1
2n n+1 n-1

由此可见:当集群总数为1或2,都不行,因为可容忍失效的节点数都为0,所以要想保证zookeeper的高可用,至少需要3台+。同时,我们可以发现一个规律,3个节点与4个节点的效果是一样的,可容忍失效的节点数都是1,即2n-1与2n,可容忍失效的节点数都是n-1。2n-1个节点能达到的效果,为啥要用2n个节点呢?
省一台主机,节省了成本。配置成偶数台也不会有问题,只不过浪费了而已。

脑裂现象

ZooKeeper集群中的节点应为网络或者其他原因,监听不到leader节点的心跳,就会认为leader节点出了问题,此时集群将分裂为不同的小集群,这些小集群会各自选举出自己的leader节点,导致原有的集群中出现多个leader节点。

解决方法
ZooKeeper默认采用了Quorums(法定人数)的方式:只有获得超过半数节点的投票,才能选举出leader。这种方式可以确保要么选出唯一的leader,要么选举失败。

上一篇 下一篇

猜你喜欢

热点阅读