1.首先创建一个zk-cluster文件夹并创建zk-*三个目录

2.创建docker-compose.yml文件,完成3 节点集群配置,内容如下

version: '3.8'

services:
  zk1:
    image: zookeeper:3.8  # 使用官方Zookeeper镜像
    container_name: zk1
    restart: always
    ports:
      - "2181:2181"  # 客户端端口
    environment:
      ZOO_MY_ID: 1  # 节点ID(唯一)
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - ./zk1/data:/data  # 数据持久化目录
      - ./zk1/datalog:/datalog  # 日志持久化目录
    networks:
      - zk-network

  zk2:
    image: zookeeper:3.8
    container_name: zk2
    restart: always
    ports:
      - "2182:2181"
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - ./zk2/data:/data
      - ./zk2/datalog:/datalog
    networks:
      - zk-network

  zk3:
    image: zookeeper:3.8
    container_name: zk3
    restart: always
    ports:
      - "2183:2181"
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - ./zk3/data:/data
      - ./zk3/datalog:/datalog
    networks:
      - zk-network

networks:
  zk-network:
    driver: bridge  # 自定义桥接网络,确保节点互通

节点 ID(ZOO_MY_ID):每个节点必须有唯一 ID(1-255),通过环境变量指定,对应数据目录下的myid文件。

集群通信配置(ZOO_SERVERS):格式:server.ID=主机名:通信端口:选举端口;客户端端口

2888:节点间数据同步端口

3888: Leader 选举端口

2181:客户端连接端口

持久化:通过volumes挂载本地目录到容器的/data(数据)和/datalog(事务日志),避免容器重启后数据丢失。

网络:自定义zk-network确保 3 个节点在同一网络,可通过容器名互相访问。

3.启动集群

docker-compose up -d
docker-compose ps  # 检查容器是否运行

4.数据同步性测试

docker exec -it zk1 zkCli.sh #进入zk1客户端
create /test "hello zk cluster"  # 创建节点
get /test  # 查看数据(确认写入)

quit退出客户端 并进入zk2、zk3测试同上

5.停止集群

docker-compose down

更多推荐