如何部署Oracle Linux 10.x Apache ZooKeeper 3.4.5集群?
- By : Will
- Category : Apache-Hadoop
1 基础知识
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,请参阅
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,请参阅
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
没有评论