基础环境

服务器:
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
文档更新时间: 2019-07-03 18:05   作者:子木