Linux 安装 ZooKeeper 单机实例

大纲

前言

本文将介绍如何在 Linux 上手动安装 ZooKeeper 服务,适用于 Centos/Debian/Ubuntu 等发行版。

准备工作

特别注意

由于 ZooKeeper 的运行需要依赖 JDK,因此需要提前将 JDK 安装好。

1
2
3
4
5
6
7
8
9
10
11
# 下载文件
$ wget https://download.java.net/openjdk/jdk11.0.0.2/ri/openjdk-11.0.0.2_linux-x64.tar.gz

# 创建解压目录
$ sudo mkdir -p /usr/lib/jvm

# 解压文件
$ sudo tar -xvf openjdk-11.0.0.2_linux-x64.tar.gz -C /usr/lib/jvm

# 重命名文件
$ sudo mv /usr/lib/jvm/jdk-11.0.0.2 /usr/lib/jvm/openjdk-11.0.0.2
  • 添加系统环境变量
1
2
3
4
5
6
7
# 编辑配置文件,添加环境变量
$ vi ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/openjdk-11.0.0.2
export PATH=$PATH:$JAVA_HOME/bin

# 使环境变量生效
$ source ~/.bashrc
  • 验证 OpenJDK 安装
1
2
# 查看 OpenJDK 的版本号
$ java -version

下载文件

  • 浏览器访问 ZooKeeper 的官网,点击下载页面的跳转链接

  • 选择合适的 ZooKeeper 版本进行下载,一般下载二进制版本(比如 apache-zookeeper-3.5.7-bin.tar.gz

安装步骤

开始安装

1
2
3
4
5
6
7
8
9
10
11
# 下载文件
$ wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz

# 解压文件
$ sudo tar -xvf apache-zookeeper-3.5.7-bin.tar.gz -C /usr/local

# 重命名文件
$ sudo mv /usr/local/apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7

# 文件授权
$ sudo chmod -R 777 /usr/local/zookeeper-3.5.7

配置修改

核心配置文件

  • 创建数据目录
1
2
# 创建数据目录
$ mkdir /usr/local/zookeeper-3.5.7/data
  • 创建配置文件
1
2
3
4
5
# 进入配置目录
$ cd /usr/local/zookeeper-3.5.7/conf

# 创建配置文件
$ cp zoo_sample.cfg zoo.cfg
  • 编辑配置文件
1
2
3
4
# 更改配置文件,指定数据目录的路径
$ vi zoo.cfg

dataDir=/usr/local/zookeeper-3.5.7/data

日志配置文件

若需要更改 ZooKeeper 存放日志文件的目录,可以在 conf/log4j.properties 配置文件中指定日志目录。

  • 创建日志目录
1
2
# 创建日志目录
$ mkdir /usr/local/zookeeper-3.5.7/logs
  • 编辑配置文件
1
2
3
4
5
6
7
# 进入配置目录
$ cd /usr/local/zookeeper-3.5.7/conf

# 编辑配置文件,指定日志目录的路径
$ vi log4j.properties

zookeeper.log.dir=/usr/local/zookeeper-3.5.7/logs

服务管理

  • 首先进入 ZooKeeper 的安装目录
1
2
# 进入安装目录
$ cd /usr/local/zookeeper-3.5.7/bin
  • 启动 ZooKeeper 服务
1
2
3
4
5
6
7
8
# 启动服务
$ ./zkServer.sh start

# 或者前台启动服务
$ ./zkServer.sh start-foreground

# 查看进程
$ ps -aux|grep zookeeper
  • 查看 Zookeeper 服务的状态
1
2
# 查看状态
$ ./zkServer.sh status
  • 关闭 ZooKeeper 服务
1
2
# 停止服务
$ ./zkServer.sh stop

安装验证

  • 启动 ZooKeeper 客户端
1
2
3
4
5
# 进入安装目录
$ cd /usr/local/zookeeper-3.5.7/bin

# 启动客户端
$ ./zkCli.sh -server 127.0.0.1:2181
  • 操作 ZooKeeper 客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 创建节点
[zk: 127.0.0.1:2181(CONNECTED) 1] create /test "test"

# 列出所有根节点
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[test-node, zookeeper]

# 获取指定节点的数据
[zk: 127.0.0.1:2181(CONNECTED) 3] get /test
123456
cZxid = 0x4
ctime = Fri Feb 22 02:27:43 UTC 2019
mZxid = 0x4
mtime = Fri Feb 22 02:27:43 UTC 2019
pZxid = 0x4
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1000a766c5e0001
dataLength = 6
numChildren = 0

# 断开客户端连接
[zk: 127.0.0.1:2181(CONNECTED) 4] quit

配置参数说明

在 Zookeeper 的 zoo.cfg 配置文件中,各个参数的含义如下:

  • tickTime = 2000:通信心跳时间,Zookeeper 服务器与客户端的心跳时间,单位是毫秒。

  • initLimit = 10:LF 初始通信时限,Leader 和 Follower 初始连接时能容忍的最多心跳数(tickTime 的数量)。

  • syncLimit = 5:LF 同步通信时限,如果 Leader 和 Follower 之间的未通信时间超过 syncLimit * tickTime,Leader 会认为 Follwer 挂掉,并从服务器列表中删除 Follwer。

  • dataDir = /tmp/zookeeper:存放 Zookeeper 数据的目录。特别注意,默认使用的 /tmp 目录容易被 Linux 系统定期删除,所以一般不用默认的 /tmp 目录。

  • clientPort = 2181:客户端连接端口,通常不需要修改,除非是发生端口冲突。