创建路径:D:\Docker\zk-cluster
在此路径下创建配置文件:docker-compose.yml
version: '2' networks: zk-net: name: zk-net services: zoo1: image: zookeeper restart: always container_name: zoo1 ports: - "2181:2181" environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2182 server.3=zoo3:2888:3888;2183 networks: - zk-net zoo2: image: zookeeper restart: always container_name: zoo2 ports: - "2182:2181" environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2182 server.3=zoo3:2888:3888;2183 networks: - zk-net zoo3: image: zookeeper restart: always container_name: zoo3 ports: - "2183:2181" environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2182 server.3=zoo3:2888:3888;2183 networks: - zk-net
看一下各个参数的含义:
zoo1: #配置1号zk image: zookeeper:latest #zk版本 restart: always container_name: zoo1 #容器的名字 ports: - "2181:2181" #将该容器的2181端口开放给物理机2181端口 environment: ZOO_MY_ID: 1 #表示zk服务的id,它是1-255之间的整数,必须在集群中唯一 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2182 server.3=zoo3:2888:3888;2183 #zk集群的主机列表
其中 ZOO_SERVERS 一项配置较为复杂,所以我问了一下chatGPT:
这是 ZooKeeper 集群的配置信息,其中 server.1 表示该节点的 ID 号为 1。zoo1:2888:3888 表示该节点所在的服务器名称和端口号,其中 2888 是用于 follower 和 leader 连接的端口号,3888 是用于选举 leader 时的端口号。2181 是客户端连接的端口号,也就是 ZooKeeper 服务监听的端口号。因此,这个配置信息表示该节点的 ID 号为 1,它的地址为 zoo1:2888:3888,同时监听的端口号为 2181。
注意这里根据zookeeper版本不同,配置也有区别,3.4.x及以下版本并没有 ;2181 这个参数。
在该路径下打开终端
PS D:\Docker> cd .\zk-cluster\
使用该命令启动:
PS D:\Docker\zk-cluster> docker-compose -f .\docker-compose.yml up -d
然而报错了:
Top-level object must be a mapping
顺便看一下这个报错,错误原因是没保存···
保存这个文档,然后重新启动
PS D:\Docker\zk-cluster> docker-compose -f .\docker-compose.yml up -d
[+] Running 4/4
✔Network zk-cluster_default Created 0.8s
✔ Container zoo1 Started 3.3s
✔ Container zoo3 Started 3.3s
✔ Container zoo2 Started 3.3s
启动成功。
查看docker客户端的容器面板:
进入该容器:
PS D:\Docker\zk-cluster> docker exec -it zoo1 /bin/bash
root@9c3f8f26101c:/apache-zookeeper-3.8.1-bin# cd bin
root@9c3f8f26101c:/apache-zookeeper-3.8.1-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@9c3f8f26101c:/apache-zookeeper-3.8.1-bin/bin# exit
exit
PS D:\Docker\zk-cluster> docker exec -it zoo2 /bin/bash
root@204ef646b371:/apache-zookeeper-3.8.1-bin# cd bin
root@204ef646b371:/apache-zookeeper-3.8.1-bin/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2182. Client address: localhost. Client SSL: false.
Mode: leader
可以看到zoo1是follower,zoo2是leader
简单的3节点zookeeper集群就搭建完毕。
在查找资料过程中,我发现不少的博客都另外配置了zoo.cfg这个文件,这当然不失为一种办法。但是就在本地部署伪集群来说,我无法认同在docker中使用这样的配置方法,这使得配置的过程复杂化了。当然在真正的zookeeper集群中,这并不是一个问题···
标签:zk,win,2888,zookeeper,3888,zoo1,2181,docker From: https://www.cnblogs.com/muzphy/p/17352266.html