zookeeper安装
以zookeeper-3.5.8版本为例。
首先,zookeeper安装需要JDK环境,在安装zookeeper之前准备好jdk环境。
官网所有版本下载地址:http://archive.apache.org/dist/zookeeper
下载zookeeper:(将zookeeper压缩下载到 /usr/local/tmp 路径下)
cd /usr/local/tmp
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz
解压并复制解压文件夹到 /usr/local/zookeeper-cluster 路径下,并修改名为zookeeper01,为搭建集群做准备:
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
mv apache-zookeeper-3.5.8-bin /usr/local/zookeeper-cluster/zookeeper01
zookeeper01路径下,创建data:
cd /usr/local/zookeeper-cluster/zookeeper01
mkdir data
进入zookeeper01的配置文件路径,将zoo_sample.cfg示例配置文件复制一份为zoo.cfg,zoo.cfg是zookeeper的默认配置文件:
cd /usr/local/zookeeper-cluster/zookeeper01/conf
cp zoo_sample.cfg zoo.cfg
修改zoo.cfg配置文件:
# 指定zookeeper的快照存放路径
dataDir=/usr/local/zookeeper-cluster/zookeeper01/data
到此,单个zookeeper接安装完了,可以进入bin目录中做启动测试(打印日志启动,可以看有没有异常):
cd ../bin
./zkServer.sh start-foreground
使用端口监听判断是否启动成功:
netstat -lntp|grep 2181
出现结果:
tcp6 0 0 :::2181 :::* LISTEN 3939/java
开放防火墙端口:
firewall-cmd --zone-public --add-port=2181/tcp --permanent
firewall-cmd --reload
zookeeper安装成功了。
zookeeper集群搭建
在上面安装的zookeeper的基础上,搭建zookeeper集群。
在data中添加文件myid,文件内容为1:
cd /usr/local/zookeeper-cluster/zookeeper01/data
echo 1 > myid
修改zoo.cfg配置文件:
cd ../conf
vim zoo.cfg
在配置文件结尾添加集群配置,
格式:server.id = hosts:port1:port2
其中:id:zookeeper的id,也就是dataDir所指路径下的myid的内容
hosts:zookeeper的ip
port1:follower和leader交换信息端口
port2:选举leader投票的端口
server.1=192.168.205.128:2881:3881
server.2=192.168.205.128:2882:3882
server.3=192.168.205.128:2883:3883
将zookeeper01复制两份:
cp -rf zookeeper01 zookeeper02
cp -rf zookeeper01 zookeeper03
修改zookeeper02和zookeeper03,共三处:
1、修改myid文件内容分别为2和3;
2、修改zoo.cfg配置文件中的clientPort为2182和2183;
3、修改dataDir值分别为:
dataDir=/usr/local/zookeeper-cluster/zookeeper02/data
dataDir=/usr/local/zookeeper-cluster/zookeeper03/data
到此,集群搭建配置结束,创建集群启动和关闭脚本文件,将脚本文件放在zookeeper-cluster中,便于操作集群:
cd /usr/local/zookeeper-cluster
vim zookeeper_startAll.sh
vim zookeeper_stopAll.sh
启动脚本内容为:
cd zookeeper01/bin
./zkServer.sh start
cd ../../zookeeper02/bin
./zkServer.sh start
cd ../../zookeeper03/bin
./zkServer.sh start
cd ../../
关闭脚本内容为:
cd zookeeper01/bin
./zkServer.sh stop
cd ../../zookeeper02/bin
./zkServer.sh stop
cd ../../zookeeper03/bin
./zkServer.sh stop
cd ../../
保存退出后,给脚本授权,u:当前用户可以执行:
chmod u+x zookeeper_startAll.sh
chmod u+x zookeeper_stopAll.sh
启动,测试结果,分别到zookeeper01/bin,zookeeper03/bin,zookeeper03/bin下,查询当前zookeeper状态:
./zkServer.sh status
出现下列结果,集群启动成功:follower表示从节点,leader表示主节点,主从节点的分配随机。
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-cluster/zookeeper01/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-cluster/zookeeper02/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost.
Mode: leader
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-cluster/zookeeper03/bin/../conf/zoo.cfg
Client port found: 2183. Client address: localhost.
Mode: follower
zookeeper配置文件解析
# The number of milliseconds of each tick
# 配置zookeeper中最小的时间单位长度,运行时的时间间隔为tickTime的倍数,单位:ms
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
# Follower在启动过程中,会从Leader同步所有最新数据,Leader允许Follower在一定时间
# 内完成这个工作,initLimit设置的就是这个时间,时间值=initLimit*tickTime
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
# Leader向Follower发送心跳包检测Follower是否运行正常,如果在发出心跳包后的一定时间内没有收到
# Follower的响应,就认为Follower下线了,syncLimit用来设置这个时间,时间值=syncLimit*tickTime
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
#指定zookeeper存储快照文件的路径,一定要设置
dataDir=/tmp/zookeeper
# 指定zookeeper的日志存储路径
dataLogDir=
# 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
# 单个客户端与单台服务器之间的连接数的限制,是ip级别的,
# 默认是60,如果设置为0,那么表明不作任何限制。
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
# zookeeper自动清理快照和日志的时间间隔,单位小时,如果设置为0,表示不开启自动清理功能
autopurge.purgeInterval=1
## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true