在之前我们介绍的Zookeeper都是单节点的,这里我们再来了解一下Zookeeper集群如何部署,首先我们下来看一下Zookeeper集群的特点:

  • 顺序一致性: 客户端的更新顺序与它们被发送的顺序相一致
  • 原子性: 更新操作要么成功要么失败,没有第三种结果
  • 单一视图: 无论客户端连接到哪一个服务器,客户端将看到相同的 ZooKeeper 视图
  • 可靠性: 一旦一个更新操作被应用,那么在客户端再次更新它之前,它的值将不会改变
  • 实时性: 连接上一个服务端数据修改,所以其他的服务端都会实时的跟新,不算完全的实时,存在一定延时
  • 角色轮换避免单点故障: 当Leader出现问题的时候,会从Follower中选举一个新的Leader

在上述Zookeeper集群特点中,我们提到了Leader与Follower,这其实是指Zookeeper集群中的角色,我们可以通过 status 命令进行查看,我们先来查看下我们单节点下的status,如下:
Zookeeper集群部署


那么在Zookeeper集群中有哪些角色呢?有Leader、Follower、Observer,具体如下:
Zookeeper集群部署

  • Leader 集群工作机制中的核心
    1.事务请求的唯一调度和处理者,保证集群事务处理的顺序性
    2.集群内部个服务器的调度者(管理Follower、数据同步)

  • Follower 集群工作机制中的跟随者
    1.处理非事务请求,转发事务请求给Leader
    2.参与事务请求Proposal投票
    3.参与Leader选举投票

  • Observer 观察者,3.30以上版本提供
    1.和Follower功能相同,但不参与任何形式投票
    2.处理非事务请求,转发事务请求给Leader
    3.提高集群非事务处理能力




简单介绍完了Zookeeper集群,我们就先来看看Zookeeper集群是如何部署的,首先我们需要准备几台安装了Zookeeper的机器,至于如何安装Zookeeper,我们之前已经介绍过了。
Zookeeper集群部署

然后我们我们就回顾一下我们之前在安装Zookeeper时,配置的存储快照文件snapshot的目录,其一开始是有一个默认的配置路径的,我们可以进行修改的,如下:
Zookeeper集群部署

我们首先以 192.168.80.130 机器为例,切换至上述红框中的路径,然后就可以进行创建服务器标识,我们在该路径下使用 vi/vim myid 创建名为myid 的文件
Zookeeper集群部署

在其中输入:0 ,进行保存,表示内容为服务器标识 : 0
Zookeeper集群部署


然后其实三台机器,操作步骤类似,不同的是每一台及其我们设置的服务器标识不同,分别为1、2、3,如下:
Zookeeper集群部署
Zookeeper集群部署
Zookeeper集群部署


把每一台机器的服务器标识设置完成之后,我们还需要修改一下每一台机器的Zookeeper配置文件 zoo.cfg,配置文件 zoo.cfg 的修改每一台机器上都需要进行,修改的配置文件内容都是一致的,如下:
Zookeeper集群部署

  • IDn:server id 集群中机器序号
  • IPn:机器IP地址
  • nnnn:同步端口
  • mmmm:选举端口
  • observer:是否为观察者

这里我们把 192.168.80.133 机器设置为了 Observer 观察者,所以除了 192.168.80.133 机器以外,其余机器上的Zookeeper配置文件 zoo.cfg 都是按照上述配置,而 192.168.80.133 机器需要额外加上 peerType=observer 来指定设置观察者角色
Zookeeper集群部署




好了,现在我们就可以启动我们的Zookeeper集群了,首先我们先来启动 192.168.80.130 这台机器,如下:
Zookeeper集群部署


我们发现我们在只启动一台Zookeeper的情况下,是无法成功运行的,接下来我们再去启动 192.168.80.131 机器,发现成功启动了。因为除去我们配置的Observer节点(它不参与任何形式的投票),我们现在共有三台机器,现在启动了两台,已经达到了大多数节点存活的要求, 192.168.80.131 机器状态如下:
Zookeeper集群部署


我们现在一共启动了两台机器,发现已经成功运行了,在上述我们已经可以看到 192.168.80.131 在Zookeeper集群的角色为 follower,然后我们在看看刚刚显示未运行的 192.168.80.130 机器
Zookeeper集群部署


接下来我们可以继续启动 192.168.80.132 机器及 192.168.80.133 机器,如下:
Zookeeper集群部署
Zookeeper集群部署

注意: 我们在配置的时候,千万不要忘记了开启我们上述所使用到端口哦




这里我们我们可以在任何一台机器上创建一个节点,然后我们可以在其他机器上都可以进行查询到的,如下:
Zookeeper集群部署
Zookeeper集群部署



接下来我们还可以将任何一个机器上的Zookeeper进行关闭,比如我们把 192.168.80.130 Leader 节点进行关闭,
Zookeeper集群部署

这我们进行查看其余两个follower节点,及 192.168.80.131 和 192.168.80.132 ,从中就可以发现, 192.168.80.132 成为了新的Leader了
Zookeeper集群部署
Zookeeper集群部署




最后我们来了解一下,如何使用Java客户端连接Zookeeper集群,其实非常的简单,和我们之前学习的单节点部署是一样的,我们只要将Zookeeper集群中多个节点的host路径拼接在一直即可,如ZkClinet为例:
ZkClient client = new ZkClient("host1,host2,host3,host4,host5");

这样ZK客户端在处理得过程中,就会将其解析→打散→形成环形地址列表队列,如下:
Zookeeper集群部署

相关文章: