3. 安装zookeeper
3.1 使用docker
https://hub.docker.com/_/zookeeper
后续内容需要使用到docker
以及docker-compose
, 需要先行安装,如果还未安装,可以搜索其它文章或者查看该安装系列docker安装
创建临时镜像,拷贝配置文件,以备后用
# 先拉取镜像
docker pull zookeeper:3.6.2
# 创建本地挂载目录
mkdir -p /opt/zookeeper/conf & mkdir -p /opt/zookeeper/data & mkdir -p /opt/zookeeper/datalog
# 随便启动一下,只是为了将配置文件拷贝出来
docker run -d --name zookeeper zookeeper:3.6.2
# 拷贝文件
docker cp zookeeper:/conf/zoo.cfg /opt/zookeeper/conf
# 停止并删除临时启动的容器
docker stop zookeeper
docker rm zookeeper
3.1.1 单机
docker run -d --name zookeeper -v /opt/zookeeper/conf:/conf -v /opt/zookeeper/data:/data -v /opt/zookeeper/datalog:/datalog -p 2181:2181 zookeeper:3.6.2
3.1.2 集群
使用docker-compose的方式,请先安装docker-compose
# 创建三个zk实例,以及各自实例的数据目录和配置文件
mkdir -p /opt/zookeeper/data/1 /opt/zookeeper/data/2 /opt/zookeeper/data/3
mkdir -p /opt/zookeeper/datalog/1 /opt/zookeeper/datalog/2 /opt/zookeeper/datalog/3
touch /opt/zookeeper/data/1/myid && echo 1 >> /opt/zookeeper/data/1/myid
touch /opt/zookeeper/data/2/myid && echo 2 >> /opt/zookeeper/data/2/myid
touch /opt/zookeeper/data/3/myid && echo 3 >> /opt/zookeeper/data/3/myid
如果还未创建网络,请先创建桥接网络,已创建,则忽略
docker network create --driver=bridge --subnet=172.20.12.0/16 mynet
编写docker-compose, vim docker-compose.yml
version: "3"
services:
zookeeper1:
image: zookeeper
restart: always
hostname: zookeeper1
container_name: zookeeper1
ports:
- "2181:2181"
volumes:
- /etc/localtime:/etc/localtime
- /opt/zookeeper/data/1:/data
- /opt/zookeeper/datalog/1:/datalog
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zookeeper1:2888:3888;2181 server.2=zookeeper2:2888:3888;2181 server.3=zookeeper3:2888:3888;2181
networks:
default:
ipv4_address: 172.20.0.10
zookeeper2:
image: zookeeper
restart: always
hostname: zookeeper2
container_name: zookeeper2
ports:
- "2182:2181"
volumes:
- /etc/localtime:/etc/localtime
- /opt/zookeeper/data/2:/data
- /opt/zookeeper/datalog/2:/datalog
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zookeeper1:2888:3888;2181 server.2=zookeeper2:2888:3888;2181 server.3=zookeeper3:2888:3888;2181
networks:
default:
ipv4_address: 172.20.0.11
zookeeper3:
image: zookeeper
restart: always
hostname: zookeeper3
container_name: zookeeper3
ports:
- "2183:2181"
volumes:
- /etc/localtime:/etc/localtime
- /opt/zookeeper/data/3:/data
- /opt/zookeeper/datalog/3:/datalog
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zookeeper1:2888:3888;2181 server.2=zookeeper2:2888:3888;2181 server.3=zookeeper3:2888:3888;2181
networks:
default:
ipv4_address: 172.20.0.12
networks:
default:
external:
name: mynet
运行docker-compose
# 先启动看下日志,是否有报错,注意,由于启动时间间隔不大,几个实例刚启动时的通讯可能会报错,可以先忽略,查看后续日志
docker-compose up
# 后台运行
docker-compose up -d
查看集群状态
root@zookeeper1:/apache-zookeeper-3.6.2-bin/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@zookeeper1:/apache-zookeeper-3.6.2-bin/bin# cd ..
root@zookeeper1:/apache-zookeeper-3.6.2-bin# ls
LICENSE.txt NOTICE.txt README.md README_packaging.md bin conf docs lib
root@zookeeper1:/apache-zookeeper-3.6.2-bin# exit
exit
[root@ddf-develop zookeeper]# docker exec -it zookeeper2 /bin/bash
root@zookeeper2:/apache-zookeeper-3.6.2-bin# ls
LICENSE.txt NOTICE.txt README.md README_packaging.md bin conf docs lib
root@zookeeper2:/apache-zookeeper-3.6.2-bin# cd bin
root@zookeeper2:/apache-zookeeper-3.6.2-bin/bin# ls
README.txt zkCleanup.sh zkCli.cmd zkCli.sh zkEnv.cmd zkEnv.sh zkServer-initialize.sh zkServer.cmd zkServer.sh zkSnapShotToolkit.cmd zkSnapShotToolkit.sh zkTxnLogToolkit.cmd zkTxnLogToolkit.sh
root@zookeeper2:/apache-zookeeper-3.6.2-bin/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@zookeeper2:/apache-zookeeper-3.6.2-bin/bin# exit
exit
[root@ddf-develop zookeeper]# docker exec -it zookeeper3 /bin/bash
root@zookeeper3:/apache-zookeeper-3.6.2-bin# cd bin
root@zookeeper3:/apache-zookeeper-3.6.2-bin/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader