文章目录
- 前言
- docker-compose Zookeeper 集群搭建
- 1. Zookeeper下载
- 2. 制作Dockerfile文件
- 3. 构建镜像
- 4. docker-compose 管理
- 5. docker-compose构建/启动
- 6. 验证
- 6.1 docker ps
- 6.2 使用 zkCli.sh 连接并验证集群
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
docker-compose Zookeeper 集群搭建
1. Zookeeper下载
归档:
https://archive.apache.org/dist/zookeeper
官网:
https://downloads.apache.org/zookeeper/
我使用的:
3.6.2版本,下面是下载地址:
https://archive.apache.org/dist/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
2. 制作Dockerfile文件
# 使用包含JDK 8 的基础镜像
FROM yzy:v2.3
LABEL maintainer="yangzhenyu"# 复制 ZooKeeper tar 文件到容器中
COPY apache-zookeeper-3.6.2-bin.tar.gz /app/appuser/# 解压 tar 文件并配置环境
RUN cd /app/appuser \&& mkdir -p data logs \&& tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz \&& cd /app/appuser/apache-zookeeper-3.6.2-bin/conf \&& cp -rf zoo_sample.cfg zoo.cfg# 设置 ZooKeeper 环境变量
RUN set -x \&& echo 'export ZOOKEEPER_HOME=/app/appuser/apache-zookeeper-3.6.2-bin' >> /etc/bashrc \&& echo 'export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/sbin' >> /etc/bashrc# 暴露 ZooKeeper 的默认端口
EXPOSE 2181# 设置工作目录
WORKDIR /app/appuser/apache-zookeeper-3.6.2-bin# 启动 ZooKeeper 服务
# CMD ["bin/zkServer.sh", "start-foreground"]
大概意思是将安装包apache-zookeeper-3.6.2-bin.tar.gz放到/app/appuser目录下,解压压缩包,同时创建data文件夹,
将zoo.cfg文件放入到/app/appuser/apache-zookeeper-3.6.2-bin/conf/目录下。
3. 构建镜像
docker build -t zk:v1.0 .
4. docker-compose 管理
version: '3.8'
services:zk1:build:context: .dockerfile: Dockerfile-zk image: zk:v1.0container_name: zk1user: rootprivileged: trueshm_size: '256m' networks:kafka_network:ipv4_address: 192.168.160.5volumes:- /f/kafka-docker/zookeeper/node1/data:/app/appuser/data- /f/kafka-docker/zookeeper/zoo.cfg:/app/appuser/apache-zookeeper-3.6.2-bin/conf/zoo.cfg- /f/kafka-docker/zookeeper/node1/logs:/app/appuser/apache-zookeeper-3.6.2-bin/logsrestart: unless-stoppedcommand: bash -c " echo -n '1' > /app/appuser/data/myid && chmod 777 /app/appuser/data && chmod 777 /app/appuser/data/myid && cd /app/appuser/apache-zookeeper-3.6.2-bin/bin && ./zkServer.sh start-foreground"zk2:build:context: .dockerfile: Dockerfile-zk image: zk:v1.0container_name: zk2user: rootprivileged: trueshm_size: '256m' networks:kafka_network:ipv4_address: 192.168.160.6volumes:- /f/kafka-docker/zookeeper/node1/data:/app/appuser/data- /f/kafka-docker/zookeeper/zoo.cfg:/app/appuser/apache-zookeeper-3.6.2-bin/conf/zoo.cfg- /f/kafka-docker/zookeeper/node2/logs:/app/appuser/apache-zookeeper-3.6.2-bin/logsrestart: unless-stoppedcommand: bash -c " echo -n '2' > /app/appuser/data/myid && chmod 777 /app/appuser/data && chmod 777 /app/appuser/data/myid && cd /app/appuser/apache-zookeeper-3.6.2-bin/bin && ./zkServer.sh start-foreground"zk3:build:context: .dockerfile: Dockerfile-zk image: zk:v1.0container_name: zk3user: rootprivileged: trueshm_size: '256m' networks:kafka_network:ipv4_address: 192.168.160.7volumes:- /f/kafka-docker/zookeeper/node1/data:/app/appuser/data- /f/kafka-docker/zookeeper/zoo.cfg:/app/appuser/apache-zookeeper-3.6.2-bin/conf/zoo.cfg- /f/kafka-docker/zookeeper/node3/logs:/app/appuser/apache-zookeeper-3.6.2-bin/logsrestart: unless-stoppedcommand: bash -c " echo -n '3' > /app/appuser/data/myid && chmod 777 /app/appuser/data && chmod 777 /app/appuser/data/myid && cd /app/appuser/apache-zookeeper-3.6.2-bin/bin && ./zkServer.sh start-foreground"
networks:kafka_network:driver: bridgeipam:config:- subnet: 192.168.160.0/24gateway: 192.168.160.1
zoo.cfg:
# Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,
# 也就是每个 tickTime 时间就会发送一个心跳。
tickTime=2000admin.serverPort=8887
# 是否启动后台管理
admin.enableServer=true
# 进入后台的命令 只能是 http://localhost:8887/commands 访问
admin.commandUrl=/commands
# 指定了需要保留的文件数目。默认是保留3个
autopurge.snapRetainCount=4
# ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,
# 需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能。
autopurge.purgeInterval=1
# 用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示;
initLimit=10
# 用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
syncLimit=5
# Zookeeper 存储快照文件snapshot的目录
dataDir=/app/appuser/data
# Zookeeper 保存事务日志文件的目录
dataLogDir=/app/appuser/logs
# 客户端连接Zookeeper 服务器的端口
# Zookeeper 会监听这个端口,接受客户端的访问请求
clientPort=2181
# localhost: server·1的 ip地址 2220:集群间的通信端口 6660当进行选举时候的通信端口
server.1=192.168.160.5:2220:6660
server.2=192.168.160.6:2220:6660
server.3=192.168.160.7:2220:6660
5. docker-compose构建/启动
docker-compose build
启动:
docker-compose -f docker-compose.yml up -d
6. 验证
6.1 docker ps
6.2 使用 zkCli.sh 连接并验证集群
docker exec -it zk1 bash
然后使用 zkCli.sh 连接到 Zookeeper:
cd /app/appuser/apache-zookeeper-3.6.2-bin/bin
./zkCli.sh -server 192.168.160.5:2181
如果连接成功,你将看到类似的提示:
Connecting to 192.168.160.5:2181
然后查看节点Zk目录: ls -R /
创建节点zk目录
create /yzy01
退出zk1,进入zk2,查看节点Zk目录:
在160.5创建的,在160.6中也可以看到,验证完毕。