使用 docker 搭建 zookeeper 集群
前言
本文使用 docker
快捷搭建 zookeeper
集群,参考资料来自于 dockerhub zookeeper,关于参数的解释请移步。
docker 安装可参考 官方安装Docker步骤
多服务器
示例为 3 台 Ubuntu 18.04 虚拟机
在三台服务器上分别新建 zookeeper 相关目录
mkdir -p /home/`whoami`/data/zookeeper/data /home/`whoami`/data/zookeeper/datalog /home/`whoami`/data/zookeeper/logs
在三台服务器上分别拉取 zookeeper
镜像
docker pull zookeeper
# 当前版本为 3.6.2 ,查看版本可使用如下命令
docker inspect zookeeper | grep WorkingDir | grep -E '([0-9]+(\.)?)+'
启动容器
# 在 server.1 上执行
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zookeeper_node \
--privileged --restart always --network host \
-v /home/`whoami`/data/zookeeper/data:/data \
-v /home/`whoami`/data/zookeeper/datalog:/datalog \
-v /home/`whoami`/data/zookeeper/logs:/logs \
-e ZOO_MY_ID=1 \
-e ZOO_SERVERS="clientPort=2181 server.1=192.168.0.10:2888:3888 server.2=192.168.0.11:2888:3888 server.3=192.168.0.12:2888:3888" zookeeper:latest
# 在 server.2 上执行
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zookeeper_node \
--privileged --restart always --network host \
-v /home/`whoami`/data/zookeeper/data:/data \
-v /home/`whoami`/data/zookeeper/datalog:/datalog \
-v /home/`whoami`/data/zookeeper/logs:/logs \
-e ZOO_MY_ID=2 \
-e ZOO_SERVERS="clientPort=2181 server.1=192.168.0.10:2888:3888 server.2=192.168.0.11:2888:3888 server.3=192.168.0.12:2888:3888" zookeeper:latest
# 在 server.3 上执行
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --name zookeeper_node \
--privileged --restart always --network host \
-v /home/`whoami`/data/zookeeper/data:/data \
-v /home/`whoami`/data/zookeeper/datalog:/datalog \
-v /home/`whoami`/data/zookeeper/logs:/logs \
-e ZOO_MY_ID=3 \
-e ZOO_SERVERS="clientPort=2181 server.1=192.168.0.10:2888:3888 server.2=192.168.0.11:2888:3888 server.3=192.168.0.12:2888:3888" zookeeper:latest
单服务器
官方提供了使用
docker-compose
运行的方式,请移步 官方安装Docker步骤
创建目录,由于用途为测试使用,因此,在当前用户目录下创建所需要的目录
# 单机搭建时,不同的容器,需要挂载不同的目录
mkdir -p /home/`whoami`/data/zookeeper1/data /home/`whoami`/data/zookeeper1/datalog /home/`whoami`/data/zookeeper1/logs
mkdir -p /home/`whoami`/data/zookeeper2/data /home/`whoami`/data/zookeeper2/datalog /home/`whoami`/data/zookeeper2/logs
mkdir -p /home/`whoami`/data/zookeeper3/data /home/`whoami`/data/zookeeper3/datalog /home/`whoami`/data/zookeeper3/logs
在单台服务器上搭建 zookeeper
集群时,需要创建 docker 虚拟子网,可根据实际情况修改
docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 zoonet
虚拟子网创建完成后,可使用 docker network ls
查看,示例输出如下,其中包含 zoonet
子网
NETWORK ID NAME DRIVER SCOPE
9392f0e5014b bridge bridge local
415d7218cfa8 host host local
659483ed4688 none null local
5d716a5d1b45 zoonet bridge local
拉取 zookeeper
镜像
docker pull zookeeper
# 当前版本为 3.6.2 ,查看版本可使用如下命令
docker inspect zookeeper | grep WorkingDir | grep -E '([0-9]+(\.)?)+'
启动容器
# 启动 zookeeper_node1
docker run -d -p 2181:2181 --name zookeeper_node1 \
--privileged --restart always --network zoonet --ip 172.18.0.2 \
-v /home/`whoami`/data/zookeeper1/data:/data \
-v /home/`whoami`/data/zookeeper1/datalog:/datalog \
-v /home/`whoami`/data/zookeeper1/logs:/logs \
-e ZOO_MY_ID=1 \
-e ZOO_SERVERS="clientPort=2181 server.1=172.18.0.2:2888:3888 server.2=172.18.0.3:2888:3888 server.3=172.18.0.4:2888:3888" \
zookeeper:latest
# 启动 zookeeper_node2
docker run -d -p 2182:2181 --name zookeeper_node2 \
--privileged --restart always --network zoonet --ip 172.18.0.3 \
-v /home/`whoami`/data/zookeeper2/data:/data \
-v /home/`whoami`/data/zookeeper2/datalog:/datalog \
-v /home/`whoami`/data/zookeeper2/logs:/logs \
-e ZOO_MY_ID=2 \
-e ZOO_SERVERS="clientPort=2182 server.1=172.18.0.2:2888:3888 server.2=172.18.0.3:2888:3888 server.3=172.18.0.4:2888:3888" \
zookeeper:latest
# 启动 zookeeper_node3
docker run -d -p 2183:2181 --name zookeeper_node3 \
--privileged --restart always --network zoonet --ip 172.18.0.4 \
-v /home/`whoami`/data/zookeeper3/data:/data \
-v /home/`whoami`/data/zookeeper3/datalog:/datalog \
-v /home/`whoami`/data/zookeeper3/logs:/logs \
-e ZOO_MY_ID=3 \
-e ZOO_SERVERS="clientPort=2183 server.1=172.18.0.2:2888:3888 server.2=172.18.0.3:2888:3888 server.3=172.18.0.4:2888:3888" \
zookeeper:latest
验证
可通过 ./bin/zkServer.sh status
查看当前 zookeeper 节点的状态
docker exec -it zookeeper_node /bin/bash
./bin/zkServer.sh status
# ---------- 返回值如下 ----------
# server.1 / zookeeper_node1
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
# server.2 / zookeeper_node2
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
# server.3 / zookeeper_node3
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower