如何部署Oracle Linux 10.x Apache ZooKeeper 3.4.5集群?

Apache-Hadoop

1 基础知识

如何部署Apache ZooKeeper 3.4.x集群?

3 最佳实践

3.1 环境信息

3.1.1 角色Hadoop HDFS的基本信息

IP Address = 10.168.0.10[1-3] OS = Oracle Linux 10.x x86_64
Host Name = hd0[1-3].cmdschool.org
详细的角色分布如下,
Apache Hadoop HDFS NameNode(hdfs-nn) = hd01.cmdschool.org
Apache Hadoop HDFS SecondaryNameNode(hdfs-snn) = hd02.cmdschool.org
Apache Hadoop HDFS DataNode(hdfs-snn) = hd0[1-3].cmdschool.org
需要注意的是如果你尚未配置HDFS,请参阅

如何部署Oracle Linux 10.x Apache Hadoop 2.6.0 HDFS集群?

3.1.2 角色Apache Hadoop YARN的基本信息

IP Address = 10.168.0.10[1-3] OS = Oracle Linux 10.x x86_64
Host Name = hd0[1-3].cmdschool.org
详细的角色分布如下,
Apache Hadoop HDFS NameNode(hdfs-nn) = hd01.cmdschool.org
Apache Hadoop HDFS SecondaryNameNode(hdfs-snn) = hd02.cmdschool.org
Apache Hadoop HDFS DataNode(hdfs-snn) = hd0[1-3].cmdschool.org
需要注意的是如果你尚未配置HDFS,请参阅

如何部署Oracle Linux 10.x Apache Hadoop YARN?

3.1.3 角色Apache ZooKeeper的基本信息

IP Address = 10.168.0.10[1-3] OS = Oracle Linux 10.x x86_64
Host Name = hd0[1-3].cmdschool.org
详细的角色分布如下,
Apache Hadoop ZooKeeper(zoo) = hd0[1-3].cmdschool.org.cmdschool.org
需要注意的是:
– ZooKeeper的“leader”与“followers”角色由集群投票自行选举
– 本章ZooKeeper实例的版本为“zookeeper-3.4.4”

3.2 部署Apache ZooKeeper软件包

In hd0[1-3],

3.2.1 配置运行用户

groupadd zookeeper
useradd -g zookeeper -d /var/lib/zookeeper/ -s /bin/false zookeeper

3.2.2 下载二进制安装包

cd ~
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.4/zookeeper-3.4.4.tar.gz

其他版本请从以下链接下载,
https://archive.apache.org/dist/zookeeper/

3.2.3 解压安装包

cd ~
tar -xf zookeeper-3.4.4.tar.gz

3.2.4 部署软件包

cd ~
mv zookeeper-3.4.4 /usr/
chown zookeeper:zookeeper -R /usr/zookeeper-3.4.4
chmod 775 -R /usr/zookeeper-3.4.4

3.2.5 创建目录的软连接

mkdir -p /etc/zookeeper
ln -s /usr/zookeeper-3.4.4/conf /etc/zookeeper/conf
ln -s /usr/zookeeper-3.4.4 /usr/zookeeper

注:以上目的是管理方便

3.3 配置Apache ZooKeeper软件包

In hd0[1-3],

3.3.1 配置环境公共的变量

vim /etc/profile.d/zookeeper.sh

加入如下配置,

export ZOOKEEPER_HOME=/usr/zookeeper-3.4.4
export PATH=${ZOOKEEPER_HOME}/bin:$PATH
export ZOOCFGDIR=/etc/zookeeper/conf
export ZOO_LOG_DIR=/var/log/zookeeper
export ZOOPIDFILE=/var/run/zookeeper/zookeeper_server.pid

创建完毕后,请使用如下命令导入环境变量,

source /etc/profile.d/zookeeper.sh

另外,我们建议根据配置文件创建目录,

mkdir -p /var/log/zookeeper/ /var/run/zookeeper/
chown zookeeper:zookeeper /var/log/zookeeper/ /var/run/zookeeper/
chmod 775 /var/log/zookeeper/ /var/run/zookeeper/

3.3.2 配置运行所需的环境变量

In hd0[1-3],

vim /etc/zookeeper/conf/java.env

加入如下内容,

. /etc/profile.d/jdk.sh
. /etc/profile.d/zookeeper.sh

注:以上两行用于导入JDK与zookeeper所需的环境变量

3.3.3 创建配置文件

In hd0[1-3],

cp /etc/zookeeper/conf/zoo_sample.cfg /etc/zookeeper/conf/zoo.cfg
vim /etc/zookeeper/conf/zoo.cfg

修改配置如下,

maxClientCnxns=50
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
dataLogDir=/var/lib/zookeeper
server.1=hd01:2888:3888
server.2=hd02:2888:3888
server.3=hd03:2888:3888

根据以上配置,需要为主机创建“myid”,详细使用如下命令,
In hd01,

echo 1 > /var/lib/zookeeper/myid

In hd02,

echo 2 > /var/lib/zookeeper/myid

In hd03,

echo 3 > /var/lib/zookeeper/myid

3.3.4 测试配置

In hd0[1-3],

sudo -u zookeeper /usr/zookeeper-3.4.4/bin/zkServer.sh status /etc/zookeeper/conf/zoo.cfg

如果输出如下则配置可用,

ZooKeeper JMX enabled by default
Using config: /etc/zookeeper/conf/zoo.cfg
Error contacting service. It is probably not running.

3.3.5 手动测试程序启动

In hd0[1-3],

sudo -u zookeeper /usr/zookeeper-3.4.4/bin/zkServer.sh start /etc/zookeeper/conf/zoo.cfg

启动过程中的日志可使用如下命令查看,

cat /var/log/zookeeper/zookeeper.out

可使用以下命令查看启动的倾听端口,

ss -antp | grep -f <(pgrep -u zookeeper java)

可见如下显示,

LISTEN 0      50                          *:46883                      *:*     users:(("java",pid=110670,fd=18))                                      
LISTEN 0      50                          *:2181                       *:*     users:(("java",pid=110670,fd=23))                                      
LISTEN 0      50                          *:3888                       *:*     users:(("java",pid=110670,fd=24))  

根据以上端口的记录并且结合配置文件,你可能需要开放如下防火墙端口,

firewall-cmd --permanent --add-port 2181/tcp --add-port 2888/tcp --add-port 3888/tcp
firewall-cmd --reload
firewall-cmd --list-all

可使用如下命令手动停止服务,

sudo -u zookeeper /usr/zookeeper-3.4.4/bin/zkServer.sh stop /etc/zookeeper/conf/zoo.cfg

3.3.6 配置服务控制脚本

In hd0[1-3],

vim /usr/lib/systemd/system/zoo.service

可加入如下配置,

[Unit]
Description=Apache ZooKeeper manager
Wants=network.target
Before=network.target
After=network-pre.target
Documentation=https://zookeeper.apache.org/doc/current/index.html

[Service]
Type=forking
User=zookeeper
Group=zookeeper

ExecStartPre=+/bin/sh -c 'mkdir -p /var/run/zookeeper;chown zookeeper:zookeeper /var/run/zookeeper;chmod 775 /var/run/zookeeper'
ExecStartPre=+/bin/sh -c 'mkdir -p /var/log/zookeeper;chown zookeeper:zookeeper /var/log/zookeeper;chmod 775 /var/log/zookeeper'
ExecStart=/usr/zookeeper-3.4.4/bin/zkServer.sh start /etc/zookeeper/conf/zoo.cfg
ExecStop=/usr/zookeeper-3.4.4/bin/zkServer.sh stop /etc/zookeeper/conf/zoo.cfg
PIDFile=/var/run/zookeeper/zookeeper_server.pid
Restart=on-success

[Install]
WantedBy=multi-user.target

修改完脚本后,你需要使用如下命令重载服务,

systemctl daemon-reload

你可使用如下命令启动服务并设置自启动,

systemctl start zoo.service
systemctl status zoo.service
systemctl enable zoo.service

3.3.7 使用客户端测试登录

In hd0[1-3],

zkCli.sh -server 127.0.0.1:2181

可见如下显示,

Connecting to 127.0.0.1:2181
2026-03-11 14:46:17,775 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.4-1386507, built on 09/17/2012 08:33 GMT
2026-03-11 14:46:17,779 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=hd01
2026-03-11 14:46:17,779 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_121
2026-03-11 14:46:17,779 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2026-03-11 14:46:17,780 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/java/jdk1.8.0_121/jre
2026-03-11 14:46:17,780 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/usr/zookeeper-3.4.4/bin/../build/classes:/usr/zookeeper-3.4.4/bin/../build/lib/*.jar:/usr/zookeeper-3.4.4/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/zookeeper-3.4.4/bin/../lib/slf4j-api-1.6.1.jar:/usr/zookeeper-3.4.4/bin/../lib/netty-3.2.2.Final.jar:/usr/zookeeper-3.4.4/bin/../lib/log4j-1.2.15.jar:/usr/zookeeper-3.4.4/bin/../lib/jline-0.9.94.jar:/usr/zookeeper-3.4.4/bin/../zookeeper-3.4.4.jar:/usr/zookeeper-3.4.4/bin/../src/java/lib/*.jar:/etc/zookeeper/conf:.:/usr/java/jdk1.8.0_121/lib:/usr/java/jdk1.8.0_121/jre/lib
2026-03-11 14:46:17,780 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2026-03-11 14:46:17,780 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2026-03-11 14:46:17,780 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=
2026-03-11 14:46:17,781 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2026-03-11 14:46:17,781 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2026-03-11 14:46:17,781 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=6.12.0-105.51.5.el10uek.x86_64
2026-03-11 14:46:17,782 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2026-03-11 14:46:17,782 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2026-03-11 14:46:17,783 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/root
2026-03-11 14:46:17,784 [myid:] - INFO  [main:ZooKeeper@433] - Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@42110406
Welcome to ZooKeeper!
2026-03-11 14:46:17,812 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2026-03-11 14:46:17,919 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/127.0.0.1:2181, initiating session
2026-03-11 14:46:17,934 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0xff9cdb9be0550004, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0] 

然后,你可以通过以下命令获取命令的使用帮助,

[zk: 127.0.0.1:2181(CONNECTED) 0] help

可见如下显示,

ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit
        getAcl path
        close
        connect host:port

然后,你可以通过以下命令取得集群配置,

[zk: 127.0.0.1:2181(CONNECTED) 0] ls /

可见如下显示,

[zookeeper]

由于命令不是本章重点,这里不再演示, 详细请参阅官方的以下链接,
https://zookeeper.apache.org/doc/current/zookeeperStarted.html

没有评论

发表回复

Apache-Hadoop
如何部署Oracle Linux 10.x Apache Hadoop YARN?

1 基础知识 如何部署Apache Hadoop YARN集群? 2 最佳实践 2.1 部署环境信息 …

Apache-Hadoop
如何部署Oracle Linux 10.x Apache Hadoop 2.6.0 HDFS集群?

1 基础知识 如何部署Apache Hadoop HDFS集群? 2 最佳实践 2.1 系统环境配置 …

Apache-Hadoop
如何测试Apache Hadoop HDFS?

1 前言 一个问题,一篇文章,一出故事。 今天完成 Apache Hadoop 2.6.0 HDFS …