Zookeeper 3.8.4 安装部署帮助手册

Zookeeper 3.8.4 安装部署帮助手册

Zookeeper3.4.6+升级至3.5.5以上的升级方案

文章目录

若没有特殊标注,命令使用 root执行。

安装包

安装本软件,涉及的软件包为:

  • jdk1.8.0_161.tgz
  • apache-zookeeper-3.8.4-bin.tar.gz

系统准备

### 端口检查

确认如下端口不被占用

  • 2181 :对客户端提供服务

  • 2888 :内部通讯端口

  • 3888 :选举leader端口

执行命令:

shell 复制代码
 netstat -apn | grep 2181;
 netstat -apn | grep 2888;
 netstat -apn | grep 3888; 

安装步骤

创建用户

命令如下:

shell 复制代码
groupadd zookeeper -g 800 && useradd -g zookeeper -u 800 zookeeper;

创建目录

命令如下:

shell 复制代码
mkdir  -p  /data/zookeeper/{zkdata,logs,software};
chown -R zookeeper:zookeeper  /data/zookeeper;
ln -snf  /data/zookeeper/zkdata  /home/zookeeper/zkdata;
ln -snf  /data/zookeeper/logs  /home/zookeeper/logs;
ln -snf  /data/zookeeper/software  /home/zookeeper/software;
chown -R zookeeper:zookeeper  /home/zookeeper;

解压软件包

解压JDKzookeeper安装包至/home/zookeeper/software下,并创建相应的软链接。命令如下:

shell 复制代码
tar -zxf   /data/install_package/jdk1.8.0_161.tgz -C /home/zookeeper/software/;
tar -zxf   /data/install_package/apache-zookeeper-3.8.4-bin.tar.gz   -C /home/zookeeper/software/;
cd /home/zookeeper/software;
ln -snf jdk1.8.0_161 java;
ln -snf apache-zookeeper-3.8.4-bin zookeeper;
chown -R  zookeeper:zookeeper /home/zookeeper/software/;

此时/home/zookeeper/software目录有关zookeeper的如下:

shell 复制代码
lrwxrwxrwx  1 zookeeper zookeeper   12 Jul 19 19:07 java -> jdk1.8.0_161
drwxr-xr-x  8 zookeeper zookeeper 4096 Dec 20  2017 jdk1.8.0_161
lrwxrwxrwx  1 zookeeper zookeeper   15 Jul 19 19:07 zookeeper -> zookeeper-3.4.9
drwxr-xr-x 10 zookeeper zookeeper 4096 Aug 23  2016 zookeeper-3.4.9

配置zookeeper环境变量

配置zookeeper用户的javazookeeper的环境变量。

切换到zookeeper用户,本文档zookeeper安装的后续操作均使用zookeeper用户。

shell 复制代码
su - zookeeper

编辑/home/zookeeper/.bashrc,设置javazookeeper的环境变量

文件追加内容末尾添加

shell 复制代码
#Java config
export JAVA_HOME=/home/zookeeper/software/java
#ZooKeeper config
export ZOOKEEPER_HOME=/home/zookeeper/software/zookeeper
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/tools:$PATH

立即生效,执行命令:

shell 复制代码
source /home/zookeeper/.bashrc

配置文件

配置zoo.cfg

生成/home/zookeeper/software/zookeeper/conf/zoo.cfg文件,命令如下:

shell 复制代码
cp /home/zookeeper/software/zookeeper/conf/zoo_sample.cfg /home/zookeeper/software/zookeeper/conf/zoo.cfg

编辑zoo.cfg文件内容,命令如下:

shell 复制代码
vim /home/zookeeper/software/zookeeper/conf/zoo.cfg

zoo.cfg需要修改的内容说明

shell 复制代码
# tick时间单位长度,单位毫秒
tickTime=2000
# follower初始连接leader超时,其值代表tickTime的倍数
initLimit=10
# follower同步超时,其值代表tickTime的倍数
syncLimit=5
# 客户端连接端口
clientPort=2181
# ZooKeeper存储内存数据库快照的位置
dataDir=/home/zookeeper/zkdata/
# ZooKeeper存储数据库更新事务日志的位置
dataLogDir=/home/zookeeper/logs/
# 启用后,ZooKeeper 自动清除功能会在 dataDir 和 dataLogDir 中分别保留 autopurge.snapRetainCount 值相同个数的最新快照和相应的事务日志,并删除其余部分。默认为 3。最小值为 3。
autopurge.snapRetainCount=5
# 触发清除任务的时间间隔(小时)。设置为正整数(1 及以上)可启用自动清除。默认为 0。
autopurge.purgeInterval=1
# 关闭 AdminServer(Jetty服务)
admin.enableServer=false
# 四字快捷命令白名单
4lw.commands.whitelist=*

# 配置ZK集群服务器地址与开放端口信息
server.1=hadoop1-outer1.test.com:2888:3888
server.2=hadoop1-outer2.test.com:2888:3888
server.3=hadoop1-outer3.test.com:2888:3888

配置zookeeper集群服务器地址说明:

shell 复制代码
server.1=hadoop1-outer1.test.com:2888:3888
server.2=hadoop1-outer2.test.com:2888:3888
server.3=hadoop1-outer3.test.com:2888:3888

每个zk服务器都在配置文件中用一个server.行表示,后跟服务器的唯一标识符(这里用从1开始递增的数字),然后是服务器的主机名(例如hadoop1.test.com):内部通讯端口:选举leader端口

配置myid文件

根据zoo.cfg中zookeeper集群服务器配置,每个节点都创建各自的myid文件,每个节点文件内容不相同。

文件内容是:在zoo.cfg文件中,当前主机名对应的server.开头的行,server.后的唯一标识符。

例如:当前是hadoop1-outer1节点,则服务器的唯一标识符为1,执行如下命令:

shell 复制代码
echo 1 >/home/zookeeper/zkdata/myid

查看下创建成功,执行cat命令:

shell 复制代码
cat  /home/zookeeper/zkdata/myid

显示如下

shell 复制代码
[root@hadoop1 software]# cat /home/zookeeper/zkdata/myid
1

#### 配置zookeeper服务的内存

(需要调整么,怎么验证呢?垃圾回收器是否要用G1GC?)

新增java.env文件,增加关于JAVA的启动参数配置JVMFLAGS,编辑命令如下:

shell 复制代码
vim /home/zookeeper/software/zookeeper/conf/java.env

文件内容如下:

ini 复制代码
export JVMFLAGS="-server -Xmx2g -Xms2g -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../dumps $JVMFLAGS"

其中可以可以根据情况,调整如下2项的内容:

  • -Xmx : JVM最大允许分配的堆内存
  • -Xms :JVM初始化分配的堆内存
配置日志

配置运行日志与审计日志

复制代码
vim /home/zookeeper/software/zookeeper/conf/logback.xml

节点运行日志输出到日志文件,解开ROLLINGFILE的appender节点注释,并调整其内容

xml 复制代码
  <appender name="ROLLINGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${zookeeper.log.dir}/${zookeeper.log.file}</File>
    <encoder>
      <pattern>%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>${zookeeper.log.threshold}</level>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <maxIndex>${zookeeper.log.maxbackupindex}</maxIndex>
      <FileNamePattern>${zookeeper.log.dir}/${zookeeper.log.file}.%i</FileNamePattern>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <MaxFileSize>${zookeeper.log.maxfilesize}</MaxFileSize>
    </triggeringPolicy>
  </appender>

  <root level="INFO">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="ROLLINGFILE" />
  </root>

rollingPolicy节点代表设置日志滚动策略。其下支持参数:

  • maxIndex:代表最多保留的日志文件个数的上限
  • minIndex:代表最多保留的日志文件个数的下限(基本不用配置)
  • fileNamePattern:代表指定文件滚动文件的命名模式,.%i用于处理当单个文件达到maxFileSize时的情况,.%i会递增数字以创建新的文件。

triggeringPolicy节点代表设置日志文件触发滚动条件。其下支持参数:

  • MaxFileSize:设置为当单个日志文件大小达到某个值时触发滚动。

启停ZooKeeper

本节内容均使用zookeeper用户

shell 复制代码
su - zookeeper

启动

所有zookeeper节点分别执行以下命令:

shell 复制代码
cd /home/zookeeper;zkServer.sh start

结果显示如下

shell 复制代码
[zookeeper@hadoop1 ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/software/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

检查

状态检查

ZooKeeper机器分别执行以下命令

shell 复制代码
zkServer.sh status

显示结果,仅有1台机器Mode显示为leader ,其他都为follower

shell 复制代码
[zookeeper@hadoop1 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/software/zookeeper/bin/../conf/zoo.cfg
Mode: follower
命令行执行检查

任意选择一台节点,进入ZooKeeper的命令行,连接地址为ZooKeeper所有机器和配置文件zoo.cfg的clientPort,格式为 host1:port,host2:port,host3:port

shell 复制代码
zkCli.sh -server hadoop1-outer1.test.com:2181,hadoop2-outer1.test.com:2181,hadoop3-outer1.test.com:2181

结果显示,正常状态下进入CONNECTED

shell 复制代码
[zookeeper@hadoop1-outer1 ~]$ zkCli.sh -server hadoop1-outer1.test.com:2181,hadoop2-outer1.test.com:2181,hadoop3-outer1.test.com:2181
Connecting to hadoop1-outer1.test.com:2181,hadoop1-outer1.test.com:2181,hadoop1-outer1.test.com:2181
...
...
...
2025-06-11 17:34:50,078 [myid:] - INFO  [main:o.a.z.ZooKeeper@637] - Initiating client connection, connectString=hadoop1-outer1.test.com:2181,hadoop1-outer1.test.com:2181,hadoop1-outer1.test.com:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@6a41eaa2
2025-06-11 17:34:50,086 [myid:] - INFO  [main:o.a.z.c.X509Util@78] - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
2025-06-11 17:34:50,095 [myid:] - INFO  [main:o.a.z.ClientCnxnSocket@239] - jute.maxbuffer value is 1048575 Bytes
2025-06-11 17:34:50,108 [myid:] - INFO  [main:o.a.z.ClientCnxn@1747] - zookeeper.request.timeout value is 0. feature enabled=false
Welcome to ZooKeeper!
2025-06-11 17:34:50,122 [myid:hadoop1-outer1.test.com:2181] - INFO  [main-SendThread(hadoop1-outer1.test.com:2181):o.a.z.ClientCnxn$SendThread@1177] - Opening socket connection to server hadoop1-outer1.test.com/10.237.195.42:2181.
2025-06-11 17:34:50,122 [myid:hadoop1-outer1.test.com:2181] - INFO  [main-SendThread(hadoop1-outer1.test.com:2181):o.a.z.ClientCnxn$SendThread@1179] - SASL config status: Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2025-06-11 17:34:50,133 [myid:hadoop1-outer1.test.com:2181] - INFO  [main-SendThread(hadoop1-outer1.test.com:2181):o.a.z.ClientCnxn$SendThread@1013] - Socket connection established, initiating session, client: /10.237.195.42:40616, server: hadoop1-outer1.test.com/10.237.195.42:2181
2025-06-11 17:34:50,155 [myid:hadoop1-outer1.test.com:2181] - INFO  [main-SendThread(hadoop1-outer1.test.com:2181):o.a.z.ClientCnxn$SendThread@1453] - Session establishment complete on server hadoop1-outer1.test.com/10.237.195.42:2181, session id = 0x10df9f7f0320005, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: hadoop1-outer1.test.com:2181,hadoop1-outer1.test.com:2181,hadoop1-outer1.test.com:2181(CONNECTED) 0] 

zkCli模式下创建znode操作命令:

shell 复制代码
create /test '1'

正常的显示信息

shell 复制代码
Created /test

zkCli模式下查看znode信息操作命令:

shell 复制代码
get -s /test

正常的显示信息

shell 复制代码
1
cZxid = 0x100000032
ctime = Wed Jun 11 17:37:06 CST 2025
mZxid = 0x100000032
mtime = Wed Jun 11 17:37:06 CST 2025
pZxid = 0x100000032
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0

zkCli模式下删除znode操作命令:

shell 复制代码
delete /test

退出zkCli模式的命令:

shell 复制代码
quit

停止

所有ZooKeeper节点分别执行

shell 复制代码
zkServer.sh stop
相关推荐
G探险者2 小时前
为什么 Zookeeper 越扩越慢,而 Nacos 却越扩越快?
分布式·后端
Pitayafruit4 小时前
跟着大厂学架构01:如何利用开源方案,复刻B站那套“永不崩溃”的评论系统?
spring boot·分布式·后端
苏格拉没有底_coder9 小时前
引入 Kafka 消息队列解耦热点操作
分布式·kafka
猕员桃14 小时前
《Elasticsearch 分布式搜索在聊天记录检索中的深度优化》
分布式·elasticsearch·wpf
沛沛老爹14 小时前
深入剖析 Celery:分布式异步任务处理的利器
分布式·python·微服务·celery·架构设计·worker节点
fajianchen16 小时前
如何调优Kafka
分布式·kafka
没毛的刷子16 小时前
kafka版本升级3.5.1-->3.9.1(集群或单体步骤一致)
分布式·kafka
yuren_xia17 小时前
RabbitMQ的交换机和队列概念
分布式·rabbitmq
菜鸟康1 天前
C++实现分布式网络通信框架RPC(3)--rpc调用端
分布式·网络协议·rpc