Zookeeper集群详解

Zookeeper集群角色

Leader:领导者,一个Zookeeper集群同一时间只能有一个Leader,,Leader服务器是整个Zookeeper集群工作制中的核心,其主要工作有以下:

  • 事务请求的唯一调度和处理者,保证集群事务处理的顺序性。Zookeeper中所有事务操作都是由leader服务器进行处理。
  • 集群内部服务器的调用者。
  • 接受所有的Follower的提案请求并统一协调发起提案投票,负责与所有Follower进行内部数据交换(同步)。

Follower:跟随者,主要工作:

  • 处理客户端的非事务请求,并转发事务请求给Leader服务器。
  • 参与事务请求的同步提交投票。同时与Leader进行数据交换(同步)。
  • 参与Leader选举投票。

Observer:观察者,从Zookeeper3.3.0引入的一个全新的服务器角色,该服务器充当一个观察者角色,观察Zookeeper集群的最新状态变化,并将这些状态变更同步过来。Observer服务器在工作原理上和Follower基本一致,对于非事务请求,可以直接独立处理,而对于事务请求,则会转发给Leader服务器进行处理。和Follower唯一区别是,Observer不参与任何形式投票,包括事务请求提交投票、Leader选举投票。仅仅观察集群状态变化并把变化同步过来。

Observer不属于Zookeeper的关键部位,通常用于在不影响集群事务处理能力的前提下提升进去非事务处理的能力,就是不影响集群写性能的情况下,提高集群读性能。因为使用增加Follower固然会提高集群的读性能,但是也会降低集群事务处理的写性能。因为Follower太多的话,会把时间浪费在事务投票同步过程和Leader选举过程中,因为要通信、投票的机器多了。而Observer不参与任何形式投票,仅仅只是进行读操作。所以增加再多Observer也不会影响集群的写性能,反而能够提升集群的读性能。但是Observer太多,而Follower太少的话会降低系统的可用性。

Zookeeper集群中有一半以上的机器正常工作的话,集群对外提供的服务就是可用的。假如有1个Leader,100个Follower,那么就算有50台机器宕机,集群照样可用。假设现在采用1个Leader,10个Follower,90个Observer的话,只要集群里面有大于5台机器宕机,集群就会处于不可用状态,至少处理不了事务请求,因为事务投票需要一半以上的同意,而可用的Leader加Follower已经不足一半了。

在这里插入图片描述

集群构建

在进行集群搭建时,一般要知道单机环境的搭建https://blog.csdn.net/qq_40837310/article/details/106792984
环境:
五台虚拟机模拟:192.168.18.130、192.168.18.131、192.168.18.132、192.168.18.133、192.168.18.134。一台Leader、3台Follower、1台Observer(192.168.18.134)。Leader是选举出来的,Observer是指定的。
第一步:修改配置文件:

server.1=192.168.18.130:2182:2183
server.2=192.168.18.131:2182:2183
server.3=192.168.18.132:2182:2183
server.4=192.168.18.133:2182:2183
server.5=192.168.18.134:2182:2183:observer

语法:server.id=host:port1:port2

  1. server固定。
  2. id:集群中节点的唯一标志,是一个整形数字。
  3. host:可以是ip,也可以是IP的映射。
  4. port1:集群中进行leader选举的端口号。
  5. port2:集群中服务器进行通信的端口。

集群中每个节点的zoo.cfg配置文件都要加上这段修改,这段修改就好比一个通信录,然集群中的每一个节点都能互相知道其他节点的存在。

集群中一台服务器需要三个端口,面向客户端连接的端口,集群中进行leader选举的端口、集群中服务器进行通信的端口。

指定某节点为Observer:

  1. 要设置为Observer节点的配置文件添加配置peerType=observer
  2. 在server.id=host:port1:port2 后面加observer ,比如server.5=192.168.18.134:2182:2183:observer

第二步:创建myid文件
在Zookeeper服务器dataDir创建一个myid文件,文件内容就是该集群服务器的唯一id,就是上面配置文件配置的server.id中的id。比如192.168.18.131服务器的id为2,192.168.18.132的id为3。
在这里插入图片描述
第三步:启动Zookeeper
就跟单机环境下那样启动就行了。前提是服务器的配置的Zookeeper的那三个端口的要对外开放。

验证:
在这里插入图片描述
启动成功,为Follower节点。
在这里插入图片描述
启动成功,为leader节点。
在这里插入图片描述
启动成功,为observer。还有其他几台服务器就不贴了。

使用该三种角色分别进行添加一个节点和查看节点操作。
Leader:
在这里插入图片描述
Follower
在这里插入图片描述
Observer:
在这里插入图片描述

  1. 三种集群角色都能进行节点新增(事务操作),原因是Follower和Observer会把事务操作转发给Leader,实际上只有Leader会进行事务处理。
  2. 能够获取到其他节点添加的节点,说明Zookeeper各个节点会进行事务提交和数据同步。

javaAPI进行集群连接:

连接集群与连接单机类似,只是连接的地址是多个,用逗号分隔起来。其他操作与单机操作基本一致。
在这里插入图片描述
单机java API操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章