《Linux 环境下,ZooKeeper 安装及运行(单机模式)》一文中总结了单机模式的 zookeeper 安装及运行方法,本文简单总结下如何搭建 zookeeper 集群。

一、环境准备
1.1 下载 zookeeper 的安装包

  笔者准备的 ZK 版本是 apache-zookeeper-3.6.2-bin.tar.gz,其他版本可以至官方网站 https://zookeeper.apache.org/releases.html 下载。

1.2 准备三台 Linux 服务器,IP 地址如下所示(IP 是随便编写的几个数字,仅仅示意)。

节点

IP

node1

10.20.42.13

node2

10.20.42.14

node3

10.20.42.26

1.3 服务器安装 JDK 环境(版本需要 1.7 以上)

  安装方法见 《Linux yum 安装 JDK 的方法》或 《Linux 手动安装 JDK 的方法》。

二、安装 zookeeper

  分别在三台服务器上执行如下操作,搭建并配置 zookeeper 集群。

2.1 上传 zookeeper 安装包并解压

  分别将 apache-zookeeper-3.6.2-bin.tar.gz 文件上传到三台服务器的 /home/cpctest 目录下,然后解压:

[cpctest@vm-10-20-42-13 ~]$ pwd
/home/cpctest
[cpctest@vm-10-20-42-13 ~]$ tar zxvf apache-zookeeper-3.6.2-bin.tar.gz
2.2 创建数据文件存储目录:
[cpctest@vm-10-20-42-13 ~]$ pwd
/home/cpctest
[cpctest@vm-10-20-42-13 ~]$ mkdir zklogs
[cpctest@vm-10-20-42-13 ~]$ ls
apache-zookeeper-3.6.2-bin  apache-zookeeper-3.6.2-bin.tar.gz zklogs
2.3 配置 zoo.cfg

  将 zookeeper 的 /conf 路径下的配置文件 zoo_sample.cfg 拷贝为 zoo.cfg,添加如下内容:

# 集群服务器配置,数字1/2/3需要与 myid 文件一致。右边两个端口,2888 表示数据同步和通信端口;3888 表示选举端口
server.1=10.20.42.13:2888:3888
server.2=10.20.42.14:2888:3888
server.3=10.20.42.26:2888:3888

  修改 zoo.cfg 中的 zookeeper 数据文件存放目录:

dataDir=/home/cpctest/zklogs

  修改完后的 zoo.cfg 文件为

[cpctest@vm-10-20-42-13 conf]$ pwd
/home/cpctest/apache-zookeeper-3.6.2-bin/conf 
[cpctest@vm-10-20-42-13 conf]$ cat zoo.cfg 
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/cpctest/zklogs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
server.1=10.20.42.13:2888:3888
server.2=10.20.42.14:2888:3888
server.3=10.20.42.26:2888:3888

  上述文件中的各个属性含义详见 《Linux 环境下,ZooKeeper 安装及运行(单机模式)》。

2.4 在服务器的数据存放目录 /home/cpctest/zklogs 下新建 myid 文件,并分别写入对应的 server.num 中的 num 数字,如在10.20.42.13 上将 server.1 中 1 写入 myid:
[cpctest@vm-10-20-42-13 zklogs]$ pwd
/home/cpctest/zklogs
[cpctest@vm-10-20-42-13 zklogs]$ echo 1 > myid
2.5 修改日志存放目录(可选):

  vi /home/cpctest/apache-zookeeper-3.6.2-bin/bin/zkEnv.sh,找到 ZOO_LOG_DIR 和 ZOO_LOG4J_PROP 位置

if [ "x${ZOO_LOG_DIR}" = "x" ]
then
   # 配置zookeeper日志输出存放路径 
    ZOO_LOG_DIR="/home/cpctest/zklogs/applog/zookeeper"
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
   # 配置日志输出级别,这里把几个级别一并配上
    ZOO_LOG4J_PROP="INFO,CONSOLE,POLLINGFILE,TRACEFILE"
fi
2.6 编辑 /home/cpctest/apache-zookeeper-3.6.2-bin/conf 目录下的 log4j.properties,完成 log 的日志目录的修改:
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE, POLLINGFILE, TRACEFILE

zookeeper.console.threshold=INFO

zookeeper.log.dir=.
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=ERROR
zookeeper.log.maxfilesize=256MB
zookeeper.log.maxbackupindex=20

zookeeper.tracelog.dir=.
zookeeper.tracelog.file=zookeeper_trace.log

log4j.rootLogger=${zookeeper.root.logger}
三、分别启动三台 zookeeper 服务

  进入 /bin 路径下,执行如下命令,启动 zookeeper 服务:

[cpctest@vm-10-20-42-13 bin]$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/cpctest/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[cpctest@vm-10-20-42-13 bin]$

  其他 zookeeper 操作命令见 《Linux 环境下,ZooKeeper 安装及运行(单机模式)》。

  然后用 status 命令检查下状态,如果出现 Mode:leader 或者 Mode:follower 表示搭建成功。

[cpctest@vm-10-20-42-13 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/cpctest/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[cpctest@vm-10-20-42-14 bin]$ ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/cpctest/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
[cpctest@vm-10-20-42-26 bin]$ ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/cpctest/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
四、验证是否搭建成功

  在命令行中输入:./zkCli.sh -server 127.0.0.1:2181,即可连接到本机 ZooKeeper 服务器。其他自动实现同步,客户端只需要和一台保持连接即可。出现如下语句表示链接成功:

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0]
文章参考:
  • 《Linux下zookeeper集群搭建》