1. ZooKeeper安装部署
1.1 系统要求
1.1.1 支持的平台
ZooKeeper 由多个组件组成。一些组件得到广泛支持,而另一些组件仅在较小的一组平台上得到支持。
-
客户端是 Java 客户端库,由应用程序用于连接到 ZooKeeper 集群。
-
服务器是在 ZooKeeper 集群节点上运行的 Java 服务器。
-
本机客户端是用 C 实现的客户端,类似于 Java 客户端,由应用程序用于连接到 ZooKeeper 集群。
-
Contrib 指多个可选的附加组件。
下表描述了在不同操作系统平台上运行每个组件的承诺支持级别。
1.1.2 支持矩阵
操作系统 | 客户端 | 服务器 | 本机客户端 | Contrib |
---|---|---|---|---|
GNU/Linux | 开发和生产 | 开发和生产 | 开发和生产 | 开发和生产 |
Solaris | 开发和生产 | 开发和生产 | 不支持 | 不支持 |
FreeBSD | 开发和生产 | 开发和生产 | 不支持 | 不支持 |
Windows | 开发和生产 | 开发和生产 | 不支持 | 不支持 |
Mac OS X | 仅限开发 | 仅限开发 | 不支持 | 不支持 |
- 对于矩阵中未明确提及为受支持的任何操作系统,组件可能可以工作,也可能无法工作。ZooKeeper 社区将修复针对其他平台报告的明显错误,但不会提供全面支持。
1.1.3 必需的软件
属性 | 描述或推荐配置 |
---|---|
运行环境 | Java 1.8 或更高版本(支持 JDK 8 LTS、JDK 11 LTS、JDK 12) |
部署方式 | 作为 ZooKeeper 服务器的集群运行 |
最小推荐集群大小 | 三个 ZooKeeper 服务器 |
部署建议 | 建议在不同的机器上运行不同的 ZooKeeper 服务器 |
Yahoo! 部署示例 | 专用的 RHEL 机箱,配备以下配置: |
处理器 | 双核处理器 |
内存 | 2GB RAM |
存储 | 80GB IDE 硬盘 |
支持的 Java 版本 | 不支持 Java 9 和 10 |
1.2 部署ZooKeeper集群
主机 | 服务/程序 | 备注 |
---|---|---|
191.168.110.21(4C/4G) | JDK、ZooKeeper | ZK 集群 |
191.168.110.32(4C/4G) | JDK、ZooKeeper | - |
191.168.110.33(4C/4G) | JDK、ZooKeeper | - |
1.1.1 配置HOSTS解析
# 三台机器均操作
[root@zk-server-all ~]# cat >> /etc/hosts <<EOF
191.168.110.31 zk-server-01
191.168.110.32 zk-server-02
191.168.110.33 zk-server-03
EOF
1.1.2 安装JDK环境
- 二进制包下载连接:Index of java-local/jdk
# 三台机器均要安装,只在zk-server-01上操作
# ZK 依赖于 JDK,所以部署 ZK 之前确保 JDK 环境正常。
[root@zk-server-01 ~]# wget -c https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
[root@zk-server-01 ~]# rsync -avz jdk-8u202-linux-x64.tar.gz zk-server-02:/root/
[root@zk-server-01 ~]# rsync -avz jdk-8u202-linux-x64.tar.gz zk-server-03:/root/
1.1.3 解压
[root@zk-server-all ~]# mkdir -p /home/data
[root@zk-server-all ~]# tar xzf jdk-8u202-linux-x64.tar.gz -C /home/data/
[root@zk-server-all ~]# mv /home/data/jdk1.8.0_202/ /home/data/jdk
[root@zk-server-all ~]# ln -s /home/data/jdk/bin/* /usr/bin/
[root@zk-server-all ~]# java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
1.1.4 下载稳定版本的ZK
下载地址:https://zookeeper.net.cn/releases.html
1.1.5 安装
[root@zk-server-all ~]# wget -c https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
[root@zk-server-all ~]# tar xzf apache-zookeeper-3.8.4-bin.tar.gz -C /usr/local/
[root@zk-server-all ~]# mv /usr/local/apache-zookeeper-3.8.4-bin/ /usr/local/zookeeper
[root@zk-server-all ~]# ll /usr/local/zookeeper/
total 36
drwxr-xr-x 2 1000 1000 4096 Feb 13 06:15 bin
drwxr-xr-x 2 1000 1000 72 Feb 13 06:15 conf
drwxr-xr-x 5 1000 1000 4096 Feb 13 06:16 docs
drwxr-xr-x 2 root root 4096 Aug 7 14:37 lib
-rw-r--r-- 1 1000 1000 11358 Feb 13 06:15 LICENSE.txt
-rw-r--r-- 1 1000 1000 2084 Feb 13 06:15 NOTICE.txt
-rw-r--r-- 1 1000 1000 2335 Feb 13 06:15 README.md
-rw-r--r-- 1 1000 1000 3570 Feb 13 06:15 README_packaging.md
1.1.6 修改配置
[root@zk-server-all ~]# cd /usr/local/zookeeper/conf/
[root@zk-server-all conf]# mv zoo_sample.cfg zoo.cfg
[root@zk-server-all conf]# cd ..
# 首先 zookeeper 目录下创建 zookeeper 数据和日志的存放目录,并且添加文件读写权限
[root@zk-server-all zookeeper]# mkdir {data,logs}
[root@zk-server-all zookeeper]# cd conf/
[root@zk-server-all conf]# vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1= zk-server-01:2888:3888
server.2= zk-server-02:2888:3888
server.3= zk-server-03:2888:3888
[!IMPORTANT]
tickTime=2000
: 这个参数设置了基本的时间单元(tick),它是 Zookeeper 会话超时和选举超时等操作的时间基础。这里设置为 2000 毫秒。
initLimit=10
: 这个参数定义了 Zookeeper 服务在初始化时,允许的最小服务器连接数(服务器间)。这个值应该是2 * tickTime
的倍数,这里设置为 10 个 tickTime。
syncLimit=5
: 这个参数定义了 Zookeeper 服务在进行数据同步时,允许的最大服务器连接数(服务器间)。这个值应该是2 * tickTime
的倍数,这里设置为 5 个 tickTime。
dataDir=/usr/local/zookeeper/data
: 这个参数指定了 Zookeeper 存储数据的目录。所有的数据和快照都会存储在这个目录下。
dataLogDir=/usr/local/zookeeper/logs
: 这个参数指定了 Zookeeper 存储事务日志的目录。事务日志用于确保数据的一致性。
clientPort=2181
: 这个参数定义了 Zookeeper 服务监听客户端连接的端口号。客户端通过这个端口与 Zookeeper 服务进行通信。
autopurge.snapRetainCount=500
: 这个参数设置了 Zookeeper 服务自动清理时保留的快照数量。这里设置为保留 500 个快照。
autopurge.purgeInterval=24
: 这个参数设置了 Zookeeper 服务自动清理的间隔时间,单位是小时。这里设置为每 24 小时清理一次。
server.1=zk-server-01:2888:3888
: 这个参数定义了 Zookeeper 集群中的服务器 1 的信息。zk-server-01
是服务器的主机名,2888
是用于集群通信的端口,3888
是用于领导者选举的端口。
server.2=zk-server-02:2888:3888
: 类似于server.1
,这是集群中服务器 2 的配置。
server.3=zk-server-03:2888:3888
: 这是集群中服务器 3 的配置,与server.1
和server.2
类似。
1.1.7 创建 ServerID 标识
[root@zk-server-01 ~]# echo "1" > /usr/local/zookeeper/data/myid
[root@zk-server-02 ~]# echo "2" > /usr/local/zookeeper/data/myid
[root@zk-server-03 ~]# echo "3" > /usr/local/zookeeper/data/myid
1.1.8 集群启动测试
[root@zk-server-01 ~]# /usr/local/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zk-server-01 ~]# /usr/local/zookeeper/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@zk-server-02 ~]# /usr/local/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zk-server-02 ~]# /usr/local/zookeeper/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
[root@zk-server-03 ~]# /usr/local/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zk-server-03 ~]# /usr/local/zookeeper/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower