如何搭建一个Zookeeper集群

Zookeeper 在分布式系统中被用来同步各个服务器节点之间的状态,也可以用作服务发现,在各种分布式系统中,有很广泛的应用。

本文介绍一种搭建 Zookeeper 集群的方法。

和大多数分布式系统一样,Zookeeper 适合部署在节点为奇数的服务器集群中。

Zookeeper 的部署的环境和软件要求为:

  • 本地服务集群
  • openjdk8
  • zookeeper-3.4.14

本文使用之前配置好的的本地虚拟机集群,如果有配置服务器集群的需求,可以参照我之前关于搭建服务器集群文章。

软件安装

软件安装相对简单,只需要将 Zookeeper 解压到 /opt/module (对这块有疑问的可以去看我之前的文章),并把目录更名为 apache-zookeeper-3.6.1

1
$ tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz -C /opt/module/

集群配置

在 apache-zookeeper-3.6.1 目录中创建一个 zkData 目录,这里面用来存放服务运行中产生的数据以及集群的配置

1
$ mkdir -p zkData

进入到 conf 目录,将 zoo_sample.cfg 改名为 zoo.cfg

1
2
$ cd conf
$ cp zoo_sample.cfg zoo.cfg

然后编辑 zoo.cfg 文件,将 dataDir 配置为刚才创建好的 zkData 目录

1
2
$ vi zoo.cfg
dataDir=/opt/module/apache-zookeeper-3.6.1/zkData

然后将配置好的软件同步到另外两个服务器

1
2
$ rsync -rvl /opt/module/apache-zookeeper-3.6.1/ root@192.168.56.4:/opt/module/apache-zookeeper-3.6.1
$ rsync -rvl /opt/module/apache-zookeeper-3.6.1/ root@192.168.56.5:/opt/module/apache-zookeeper-3.6.1

还有最后一步,需要在三台机器上分别执行,以 192.168.56.3 机器为例,进入 zkData 目录,然后创建 myid 文件,文件中随便填入一个数字,只要别与另外两台机器重复

1
2
$ cd zkData
$ touch myid

然后再编辑 zoo.cfg,在配置文件中加上如下内容,需要注意 server 后面的数字需要与每台服务器中 myid 文件中的数字相同,然后配置好机器名称以及选举时需要用到的的端口号

1
2
3
4
5
$ cd conf
$ vi zoo.cfg
server.3=bigdata1:2888:3888
server.4=bigdata2:2888:3888
server.5=bigdata3:2888:3888

bigdata1,bigdata2,bigdata3 是三台机器的别名,在 /etc/hosts 文件中定义。

在另外两台机器上分别编辑 myid 和 zoo.cfg,myid 中的内容不能相同。

到这里,配置工作就完成了。

运行验证

配置完成后,在三台机器上分别执行:

1
$ bin/zkServer.sh start

如果没有报错,那么三台机器上的 Zookeeper 服务应该启动了,在启动前,我们无法确定那台服务器是 leader,哪台服务器是 follower ,这会根据当时服务器的状态自动选举产生。

启动后,可以来查看机器状态:

bigdata1: 可以看到这是一个从节点

1
2
3
4
ZooKeeper JMX enabled by default
Using config: /opt/module/apache-zookeeper-3.6.1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

bigdata2: 这也是一个从节点

1
2
3
4
ZooKeeper JMX enabled by default
Using config: /opt/module/apache-zookeeper-3.6.1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower

bigdata3:这是一台主节点

1
2
3
4
ZooKeeper JMX enabled by default
Using config: /opt/module/apache-zookeeper-3.6.1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

在确认集群启动之后,就可以通过客户端来连接集群,除了下面使用的命令行客户端之外,还可以使用各种编程语言的客户端。

1
$ bin/zkCli.sh

连接进入集群后,通过 ls / 来查看集群的根节点,默认情况下,只有一个空的 zookeeper 节点

1
2
$ ls /
[zookeeper]

创建一个名称为 ray 的节点,里面的内容是 rayjun

1
$ create /ray "rayjun"

通过 get 命令来查看 ray 节点下的内容

1
2
$ get /ray
rayjun

文 / Rayjun

微信公众号

© 2020 ray