本文档基于zookeeper-3.4.10
环境要求
- zookeeper-3.4.10,可从zookeeper官方网站下载介质
- jdk7或者更高版本
- 高性能磁盘,磁盘容量推荐64G及以上
- zookeeper节点个数要求,在允许n个主机宕机的情况下,集群节点数量需要为2n+1个
安装步骤
1. 创建zookeeper home
mkdir zookeeper
cd zookeeper
mkdir data dataLog
注意
- data是zookeeper用来存储内存快照的路径
- dataLog是zookeeper用来记录事务日志的路径
- data和dataLog的创建位置没有强制要求,如果集群的环境区分应用安装盘符和日式/数据存放盘符,则data和dataLog需要建立在可以存放数据的专用盘符
下文中将 zookeeper/ 称之为zookeeper的home,或者$ZK_HOME
2. 解压介质
mv zookeeper-3.4.10.tar.gz zookeeper/
tar -xzvf zookeeper-3.4.10.tar.gz
3. 配置server id
进入到data的路径下,执行
cd data
echo '1' > myid
cat myid
注意事项
- myid是zookeeper集群中每个zookeeper节点的身份标识,不可重复,依次为1、2、3……
- zookeeper的myid中有且仅有一行数据,及该节点的id序号,数字前后不可有空格,上下不可有空行
- zookeeper集群的安装配置中,几乎只有myid是不同的,其他配置均相同
在整个集群安装配置中,除了myid的内容不一样,其他地方配置几乎一模一样,因此后续安装步骤仅以一个节点为例,不再赘述。之所以说几乎,是因为上一节中提到的data和dataLog的路径可能不同,但一般生产上是相同的。
4. 配置zoo.cfg
进入zookeeper的配置文件地址,创建并修改配置
cd $ZK_HOME
cd conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改配置如下
# The number of milliseconds of each tick
# zk的时间单元,其它的配置都是该配置的倍数,默认配置即可
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
# follower初始连接到leader并完成同步的时间上限,默认配置即可
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
#
syncLimit=5
# follower与leader的同步时间上限
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
# zookeeper的内存快照存储路径,需要修改为实际创建的data的路径
dataDir=/……/data
# zookeeper的事务日志存储路径,需要修改为实际创建的dataLog的路径
dataLogDir=/……/dataLog
# 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
# 最大连接数,默认是60,如无特殊需求,无需配置
#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
# 保留的快照数量和事务日志数量,超过该数量将自动清理,根据磁盘空间和需求配置,默认是3
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
# 清理时间间隔,单位是小时
autopurge.purgeInterval=1
# 集群成员配置,用来让zookeeper知道集群中都有谁
# server.x中的是zookeeper的节点id,其id值和ip地址需要和每个节点的myid里的内容对应
# ip之后的两个端口是内部通信和选举用的端口,配置成可用端口即可
server.1=172.21.22.161:2888:3888
server.2=172.21.22.162:2888:3888
server.3=172.21.22.163:2888:3888
这里需要注意的就是
server.1=172.21.22.161:2888:3888
server.2=172.21.22.162:2888:3888
server.3=172.21.22.163:2888:3888
其id值要和之前建立的data里的myid中内容一致,同时ip要互相对应。
5. 配置log4j
zookeeper默认的日志输出在zookeeper.out中,不利于查看和管理,生产上建议对日志进行配置。
创建logs路径
cd $ZK_HOME
mkdir logs
logs建立在哪里没有要求,如果对磁盘有规划,则根据需求建到合适的地方
配置log4j
# Console修改为ROLLINGFILE
zookeeper.root.logger=INFO, ROLLINGFILE
zookeeper.console.threshold=INFO
# 此处修改为上面建立的logs绝对路径(需要替换)
zookeeper.log.dir=/……/logs
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=DEBUG
zookeeper.tracelog.dir=.
zookeeper.tracelog.file=zookeeper_trace.log
# log4j后续配置无需改动,此处省略
配置zkEnv.sh
cd $ZK_HOME/bin
cp zkEnv.sh zkEnv.sh.bak
vim zkEnv.sh
主要是修改两处,一处是加入ZOO_LOG_DIR的赋值
ZOOBINDIR="${ZOOBINDIR:-/usr/bin}"
ZOOKEEPER_PREFIX="${ZOOBINDIR}/.."
#注意这里需要替换为实际的logs的绝对路径需要替换)
ZOO_LOG_DIR="/……/logs"
另一处是
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,CONSOLE"
fi
修改为
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
6. 启动zookeeper
依次登录到每个zookeeper节点,启动zookeeper进程
cd $ZK_HOME
bin/zkServer.sh start
控制台显示
ZooKeeper JMX enabled by default
Using config: /home/czdb/ghshen/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
接着进行状态检查,
检查进程
执行
jps
检查是zk进程,显示为
22757 QuorumPeerMain
QuorumPeerMain是进程名,22757是进程id,可能不同
检查status
bin/zkServer.sh status
显示
ZooKeeper JMX enabled by default
Using config: /home/ds_dfpas/ghshen/usr/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: leader
集群中仅有一台显示为leader,其他节点执行该命令,显示为
ZooKeeper JMX enabled by default
Using config: /home/ds_dfpas/ghshen/usr/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower
检查日志
cd logs
tail -f zookeeper.log
观察日志是否有持续报错,如果有,分析原因,解决后重启。
检查客户端可用性
利用zookeeper自带的客户端,手动连接到zookeeper,执行简单的查询
cd $ZK_HOME
# host和port替换为实际的地址
bin/zkCli.sh -server host:port
连接上zookeeper,执行ls
[zk: localhost:2188(CONNECTED) 1] ls /
[zookeeper]
[zk: localhost:2188(CONNECTED) 2]
显示结果为包含[zookeeper]即可。
类似的,检查所有的zookeeper节点,无误即可。
至此,zookeeper集群安装结束。