Zookeeper 3.8.4 安装部署帮助手册
Zookeeper3.4.6+升级至3.5.5以上的升级方案
文章目录
- [Zookeeper 3.8.4 安装部署帮助手册](#Zookeeper 3.8.4 安装部署帮助手册)
若没有特殊标注,命令使用 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;
解压软件包
解压JDK
和zookeeper
安装包至/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用户的java
和zookeeper
的环境变量。
切换到zookeeper用户,本文档zookeeper安装的后续操作均使用zookeeper用户。
shell
su - zookeeper
编辑/home/zookeeper/.bashrc
,设置java
和zookeeper
的环境变量
文件追加内容末尾添加
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