基础环境
服务器:
test11 192.168.37.11
test12 192.168.37.12
test13 192.168.37.13
系统版本:
centos 7.6
服务器本地安装
服务器test11下安装:
1、需要服务器安装好jdk环境,本例用的是zk3.4.14,需要最低JDK版本现为1.8
2、下载安装包:wget http://apache.website-solution.net/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
3、提取tar文件:
tar -zxvf apache-zookeeper-3.4.14.tar.gz
mv apache-zookeeper-3.4.14 /usr/local/zk-3.4.14
cd /usr/local/zk-3.4.14
mkdir data
4、创建配置文件:
[root@test11 apache-zookeeper-3.4.14]#vi conf/zoo.cfg
tickTime = 2000
dataDir = /usr/local/zk-3.4.14/data
clientPort = 2181
5、启动zookeeper:[root@test11 zk-3.4.14]# ./bin/zkServer.sh start
6、启动CLI,连接本地zk服务器上:./bin/zkCli.sh
7、连接到指定的zk上:./bin/zkCli.sh -server ip:2181
8、查看节点状态:
[root@test11 zk-3.4.14]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zk-3.4.14/bin/../conf/zoo.cfg
Mode: standalone #因为是单节点,所以显示standalone
9、停止zk:./bin/zkServer.sh stop
安装集群
1、在test12,test13服务器上按照上面安装zk
2、test11,test12,test13这三台服务器的zoo.cfg文件配置如下:
[root@test12 zk-3.4.14]# cat conf/zoo.cfg
tickTime = 2000
dataDir = /usr/local/zk-3.4.14/data
clientPort = 2181
initLimit=5
syncLimit=2
server.1=192.168.37.11:2888:3888
server.2=192.168.37.12:2888:3888
server.3=192.168.37.13:2888:3888
3、给test11,test12,test13添加myid,如下:[root@test11 zk-3.4.14]# echo 1 >/usr/local/zk-3.4.14/data/myid
[root@test12 zk-3.4.14]# echo 2 >/usr/local/zk-3.4.14/data/myid
[root@test13 zk-3.4.14]# echo 3 >/usr/local/zk-3.4.14/data/myid
4、启动zk服务,并查看节点状态,如下:
[root@test11 zk-3.4.14]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zk-3.4.14/bin/../conf/zoo.cfg
Mode: leader
[root@test12 zk-3.4.14]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zk-3.4.14/bin/../conf/zoo.cfg
Mode: follower
[root@test13 zk-3.4.14]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zk-3.4.14/bin/../conf/zoo.cfg
Mode: follower
#可以看出在上面test11是leader节点
注:zoo.cfg参数说明
1.tickTime:CS通信心跳数
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
tickTime以毫秒为单位。
tickTime:该参数用来定义心跳的间隔时间,zookeeper的客户端和服务端之间也有和web开发里类似的session的概念,而zookeeper里最小的session过期时间就是tickTime的两倍。
2.initLimit:LF初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间 初始连接 时能容忍的最多心跳数(tickTime的数量)。
此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接 并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。
3.syncLimit:LF同步通信时限
集群中的follower服务器(F)与leader服务器(L)之间 请求和应答 之间能容忍的最多心跳数(tickTime的数量)。
此配置表示, leader 与 follower 之间发送消息,请求 和 应答 时间长度。如果 follower 在设置的时间内不能与leader 进行通信,那么此 follower 将被丢弃。
docker安装
前置环境:安装好docker,并添加docker镜像加速
1、拉取镜像:docker pull zookeeper
2、安装docker-compose,步骤如下:
yum -y install epel-release
yum install python-pip -y
pip install --upgrade pip
pip install docker-compose
3、新建zk_3nodes.yml文件如下:
[root@test14 docker_compose]# cat /scripts/docker_compose/docker-compose.yml
version: '3.5'
services:
zk01:
image: zookeeper
restart: always
hostname: zk01
ports:
- 2181:2181
volumes:
- /docker/zookeeper/data/zk01:/data
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zk02:2888:3888;2181 server.3=zk03:2888:3888;2181
zk02:
image: zookeeper
restart: always
hostname: zk02
ports:
- 2182:2181
volumes:
- /docker/zookeeper/data/zk02:/data
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk01:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk03:2888:3888;2181
zk03:
image: zookeeper
restart: always
hostname: zk03
ports:
- 2183:2181
volumes:
- /docker/zookeeper/data/zk03:/data
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk01:2888:3888;2181 server.2=zk02:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
4、创建集群启动脚本
[root@test14 docker_compose]# cat /scripts/zk_3nodes_start.sh
#/bin/bash
DataPath=/docker/zookeeper/data
for i in {1..3} ; do
[ -d $DataPath/zk0${i} ] || mkdir $DataPath/zk0${i} -p
done
cd /scripts/docker_compose
COMPOSE_PROJECT_NAME=zk_3nodes docker-compose up -d