1、docker 查看zookeeper镜像。
docker search zookeeper
[root@localhost /]# docker search zookeeper
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
zookeeper Apache ZooKeeper is an open-source server wh… 915 [OK]
jplock/zookeeper Builds a docker image for Zookeeper version … 165 [OK]
wurstmeister/zookeeper 127 [OK]
mesoscloud/zookeeper ZooKeeper 73 [OK]
bitnami/zookeeper ZooKeeper is a centralized service for distr… 40 [OK]
mbabineau/zookeeper-exhibitor 24 [OK]
digitalwonderland/zookeeper Latest Zookeeper - clusterable 20 [OK]
tobilg/zookeeper-webui Docker image for using `zk-web` as ZooKeeper… 15 [OK]
confluent/zookeeper 13 [OK]
debezium/zookeeper Zookeeper image required when running the De… 12 [OK]
31z4/zookeeper Dockerized Apache Zookeeper. 8 [OK]
thefactory/zookeeper-exhibitor Exhibitor-managed ZooKeeper with S3 backups … 6 [OK]
emccorp/zookeeper Zookeeper 2
engapa/zookeeper Zookeeper image optimised for being used int… 2
paulbrown/zookeeper Zookeeper on Kubernetes (PetSet) 1 [OK]
duffqiu/zookeeper-cli 1 [OK]
perrykim/zookeeper k8s - zookeeper ( forked k8s contrib ) 1 [OK]
strimzi/zookeeper 1
josdotso/zookeeper-exporter ref: https://github.com/carlpett/zookeeper_e… 1 [OK]
openshift/zookeeper-346-fedora20 ZooKeeper 3.4.6 with replication support 1
midonet/zookeeper Dockerfile for a Zookeeper server. 0 [OK]
humio/zookeeper-dev zookeeper build with zulu jvm. 0
dabealu/zookeeper-exporter zookeeper exporter for prometheus 0 [OK]
phenompeople/zookeeper Apache ZooKeeper is an open-source server wh… 0 [OK]
pravega/zookeeper-operator Kubernetes operator for Zookeeper 0
[root@localhost /]#
我们就选取官方版本 Apache Zookeeper,如果不指定版本默认拉去最新版本3.5.X(latest)。如果有特殊版本需要可以加上版本号。我们这里就用默认版本
docker pull zookeeper
2、集群部署zookeeper有两种方式:
- 直接启动三个容器,运行zookeeper
- 利用docker-compose 部署
2.1 在这之前我们需要创建一个自己的网络,用于不同容器的通信。这样做是因为Docker网络分为三种网络模式,bridge、host、none,在你创建容器的时候,不指定--network默认是bridge。
bridge:为每一个容器分配IP,并将容器连接到一个docker0虚拟网桥,通过docker0网桥与宿主机通信。也就是说,此模式下,你不能用宿主机的IP+容器映射端口来进行Docker容器之间的通信。
host:容器不会虚拟自己的网卡,配置自己的IP,而是使用宿主机的IP和端口。这样一来,Docker容器之间的通信就可以用宿主机的IP+容器映射端口
none:无网络。
docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 zoonet
然后执行命令:
docker run -d -p 2181:2181 --name zookeeper_node1 --privileged --restart always --network zoonet --ip 172.18.0.2 \
-v /work/zookeeper/node1/volumes/data:/data \
-v /work/zookeeper/node1/volumes/datalog:/datalog \
-v /work/zookeeper/node1/volumes/logs:/logs \
-e ZOO_MY_ID=1 \
-e "ZOO_SERVERS=server.1=172.18.0.2:2888:3888;2181 server.2=172.18.0.3:2888:3888;2181 server.3=172.18.0.4:2888:3888;2181" 6ad6cb039dfa
docker run -d -p 2182:2181 --name zookeeper_node2 --privileged --restart always --network zoonet --ip 172.18.0.3 \
-v /work/zookeeper/node2/volumes/data:/data \
-v /work/zookeeper/node2/volumes/datalog:/datalog \
-v /work/zookeeper/node2/volumes/logs:/logs \
-e ZOO_MY_ID=2 \
-e "ZOO_SERVERS=server.1=172.18.0.2:2888:3888;2181 server.2=172.18.0.3:2888:3888;2181 server.3=172.18.0.4:2888:3888;2181" 6ad6cb039dfa
docker run -d -p 2183:2181 --name zookeeper_node3 --privileged --restart always --network zoonet --ip 172.18.0.4 \
-v /work/zookeeper/node3/volumes/data:/data \
-v /work/zookeeper/node3/volumes/datalog:/datalog \
-v /work/zookeeper/node3/volumes/logs:/logs \
-e ZOO_MY_ID=3 \
-e "ZOO_SERVERS=server.1=172.18.0.2:2888:3888;2181 server.2=172.18.0.3:2888:3888;2181 server.3=172.18.0.4:2888:3888;2181" 6ad6cb039dfa
2.2 利用docker-compose 部署zookeeper集群
首先安装docker-compose
方式1、
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
方法2:
1、安装python-pip
yum -y install epel-release
yum -y install python-pip
2、安装docker-compose
pip install docker-compose
安装完成之后,创建数据挂载目录:
[root@localhost root]# mkdir /work/zookeeper/node1
[root@localhost root]# mkdir /work/zookeeper/node2
[root@localhost root]# mkdir /work/zookeeper/node3
然后创建docker-compose文件
[root@localhost root]# mkdir DockerComposeFolder
[root@localhost root]# cd DockerComposeFolder/
[root@localhost DockerComposeFolder]# vim docker-compose.yml
写入如下内容:
version: '3.1'
services:
zoo1:
image: zookeeper
restart: always
privileged: true
hostname: zoo1
ports:
- 2181:2181
volumes: # 挂载数据
- /work/zookeeper/node1/data:/data
- /work/zookeeper/node1/datalog:/datalog
- /work/zookeeper/node1/conf:/conf
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
networks:
default:
ipv4_address: 172.18.0.14
zoo2:
image: zookeeper
restart: always
privileged: true
hostname: zoo2
ports:
- 2182:2181
volumes: # 挂载数据
- /work/zookeeper/node2/data:/data
- /work/zookeeper/node2/datalog:/datalog
- /work/zookeeper/node2/conf:/conf
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181
networks:
default:
ipv4_address: 172.18.0.15
zoo3:
image: zookeeper
restart: always
privileged: true
hostname: zoo3
ports:
- 2183:2181
volumes: # 挂载数据
- /work/zookeeper/node3/data:/data
- /work/zookeeper/node3/datalog:/datalog
- /work/zookeeper/node3/conf:/conf
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
networks:
default:
ipv4_address: 172.18.0.16
networks: # 自定义网络
default:
external:
name: zoonet
修改zookeeper配置文件zoo.cof:在/work/zookeeper/node1/conf目录下复制一份zoo.cfg.dynamic.next 重命名为:zoo.cnf
内容:
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=5
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
server.1=0.0.0.0:2888:3888;2181
server.2=zoo2:2888:3888;2181
server.3=zoo3:2888:3888;2181
然后在当前目录下启动容器:
docker-compose -f docker-compose.yml up -d
利用docker ps 查看启动的容器:发现启动成功
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d54f2859c37 zookeeper "/docker-entrypoint.…" 5 days ago Up 35 minutes 2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2182->2181/tcp dockercomposefolder_zoo2_1
189bb55ceca8 zookeeper "/docker-entrypoint.…" 5 days ago Up 35 minutes 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp dockercomposefolder_zoo1_1
00680a11c8ff zookeeper "/docker-entrypoint.…" 5 days ago Up 35 minutes 2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2183->2181/tcp dockercomposefolder_zoo3_1
4f963292537b 718a6da099d8 "docker-entrypoint.s…" 6 days ago Up 26 hours 33060/tcp, 0.0.0.0:3309->3306/tcp mysql-slave2
f4b7c645e447 718a6da099d8 "docker-entrypoint.s…" 6 days ago Up 26 hours 33060/tcp, 0.0.0.0:3308->3306/tcp mysql-slave1
372668360cfb 718a6da099d8 "docker-entrypoint.s…" 6 days ago Up 26 hours 33060/tcp, 0.0.0.0:3307->3306/tcp mysql-master
[root@localhost /]#