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、ZooKeeperZK 集群
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环境

# 三台机器均要安装,只在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

image-20240806144720100

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.1server.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
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐