如何搭建一个Zookeeper集群
Zookeeper 在分布式系统中被用来同步各个服务器节点之间的状态,也可以用作服务发现,在各种分布式系统中,有很广泛的应用。
本文介绍一种搭建 Zookeeper 集群的方法。
和大多数分布式系统一样,Zookeeper 适合部署在节点为奇数的服务器集群中。
Zookeeper 的部署的环境和软件要求为:
- 本地服务集群
- openjdk8
- zookeeper-3.4.14
本文使用之前配置好的的本地虚拟机集群,如果有配置服务器集群的需求,可以参照我之前关于搭建服务器集群文章。
软件安装
软件安装相对简单,只需要将 Zookeeper 解压到 /opt/module (对这块有疑问的可以去看我之前的文章),并把目录更名为 apache-zookeeper-3.6.1
。
$ tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz -C /opt/module/
集群配置
在 apache-zookeeper-3.6.1 目录中创建一个 zkData
目录,这里面用来存放服务运行中产生的数据以及集群的配置
$ mkdir -p zkData
进入到 conf
目录,将 zoo_sample.cfg
改名为 zoo.cfg
$ cd conf
$ cp zoo_sample.cfg zoo.cfg
然后编辑 zoo.cfg 文件,将 dataDir
配置为刚才创建好的 zkData 目录
$ vi zoo.cfg
dataDir=/opt/module/apache-zookeeper-3.6.1/zkData
然后将配置好的软件同步到另外两个服务器
$ 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
文件,文件中随便填入一个数字,只要别与另外两台机器重复
$ cd zkData
$ touch myid
然后再编辑 zoo.cfg,在配置文件中加上如下内容,需要注意 server
后面的数字需要与每台服务器中 myid 文件中的数字相同,然后配置好机器名称以及选举时需要用到的的端口号
$ 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 中的内容不能相同。
到这里,配置工作就完成了。
运行验证
配置完成后,在三台机器上分别执行:
$ bin/zkServer.sh start
如果没有报错,那么三台机器上的 Zookeeper 服务应该启动了,在启动前,我们无法确定那台服务器是 leader
,哪台服务器是 follower
,这会根据当时服务器的状态自动选举产生。
启动后,可以来查看机器状态:
bigdata1: 可以看到这是一个从节点
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: 这也是一个从节点
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:这是一台主节点
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
在确认集群启动之后,就可以通过客户端来连接集群,除了下面使用的命令行客户端之外,还可以使用各种编程语言的客户端。
$ bin/zkCli.sh
连接进入集群后,通过 ls /
来查看集群的根节点,默认情况下,只有一个空的 zookeeper 节点
$ ls /
[zookeeper]
创建一个名称为 ray 的节点,里面的内容是 rayjun
$ create /ray "rayjun"
通过 get 命令来查看 ray 节点下的内容
$ get /ray
rayjun
文 / Rayjun