1、下载并解压
通过官网下载文件,tar -zxvf tar.gz结合mv apache-zookeeper-3.7.1 apache-zookeeper-2181解压并重命名,生成3个节点的源码文件
2、修改配置文件
2.1、修改JVM参数
3个节点,每个节点都需要修改JVM参数,位置:/root/zk/apache-zookeeper-2181/bin,修改zkServer.sh,部分配置文件为:-Xmx150M -Xms150M
case $1 in
start)
echo -n "Starting zookeeper ... "
if [ -f "$ZOOPIDFILE" ]; then
if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
echo $command already running as process `cat "$ZOOPIDFILE"`.
exit 1
fi
fi
nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \
"-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' \
-cp "$CLASSPATH" $JVMFLAGS -Xmx150M -Xms150M $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
if [ $? -eq 0 ]
then
case "$OSTYPE" in
*solaris*)
/bin/echo "${!}\\c" > "$ZOOPIDFILE"
;;
*)
/bin/echo -n $! > "$ZOOPIDFILE"
;;
esac
if [ $? -eq 0 ];
2.2、修改zoo.cfg
压缩文件解压后conf中的文件为:zoo_sample.cfg,需要修改为zoo.cfg,同时需要配置该文件,首先介绍该文件中部分参数的含义:
- 基本配置,这些参数都是zk运行所必须的,如果不配置那么zk启动不起来
clientPort:当前服务器对外的服务端口,客户端通过该端口与当前服务器创建连接,一般设置为2181,同时,每台zk都可以配置任意可用端口,集群中所有的服务器不要求clientPort一致;dataDir:zk服务器存储快照数据的目录,默认如果没有配置dataLogDir,那么事务日志也会存储在这个目录中,由于事务日志的写性能直接影响zk的整体服务能力,其对磁盘的IO能力要求非常高,因此建议通过dataDir+dataLogDir的方式来配置,此处使用默认值存储在一个目录中;tickTime:配置zk中最小时间单元,很多运行时的时间间隔都是tickTime的整数倍来表示的,例如,session的最小超时时间是minSessionTimeout=2*tickTime
- 高级配置,介绍几个主要的,还有一些额外的参数
initLimit:leader等待follower启动,并完成数据同步的时间,一般使用默认值10即可,代表tickTime*10syncLimit:leader和follower之间进行心跳检测的最大延迟时间,如果超过该时间后leader未收到follower的心跳检测响应,那么认为该follower已断开同步,一般使用默认值5即可,代表tickTime*5server.id=host:port1:port2:配置zk集群的机器列表- id:serverId,当前zk服务器启动时,根据myid的中的serverId来确定自己是哪台服务器,并使用配置中对应的端口来启动
- host:地址
- port1:用于指定follower和leader进行运行时通信和数据同步时所使用的端口
- port2:leader选举过程中的投票端口
electionAlg:之前的版本中,可以使用该参数来配置zk leaderElection algorithm,但是从3.4.0版本开始,只保留了fastLeaderElection算法,因此该参数已失效
- 通过上述描述,在3个节点上我们的配置分别如下,以client1节点为例,贴出了配置文件
- clientPort=2181,clientPort=2182,clientPort=2183
- dataDir=/root/zk/zookeeper1,dataDir=/root/zk/zookeeper2,dataDir=/root/zk/zookeeper3
- server.N集群节点信息配置,3个节点保持一致,注意:一开始我配置的不是127的ip而是阿里云的公网ip但是发现节点启动后连接不上,所以使用了127的ip,单一节点启动后也是正常的
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial synchronization phase can take
initLimit=10
# The number of ticks that can pass between sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.do not use /tmp for storage,...
dataDir=/root/zk/zookeeper1
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
# autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
2.3、新增myid
在上一节中,针对于每一个节点,我们均配置了dataDir的地址
- 在dataDir所配置的目录下,创建一个名为myid的文件
- 在该文件的第一行写上一个数字,和zoo.cfg中当前机器上的编号对应上
3、启动并验证
进入节点所在的bin目录,使用zkServer.sh脚本进行启动
[root@XXXXX bin]# /root/zk/apache-zookeeper-2181/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/zk/apache-zookeeper-2181/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@XXXXX bin]#
启动一台机器后,jmap发现jvm启动参数生效
[root@XXXXXX conf]# jmap -heap 24145
Attaching to process ID 24145, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.342-b07
using thread-local object allocation.
Parallel GC with 2 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 157286400 (150.0MB)
NewSize = 52428800 (50.0MB)
MaxNewSize = 52428800 (50.0MB)
OldSize = 104857600 (100.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:...[略]
启动2台机器后,查看状态信息
[root@XXXXX conf]# /root/zk/apache-zookeeper-2182/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/zk/apache-zookeeper-2182/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost. Client SSL: false.
Mode: leader