网站Logo 小城的博客

Docker 部署 Zookeeper 集群

admin
6
2025-02-18

一、拉取 Zookeeper 镜像

首先获取指定版本的 Zookeeper 镜像,这里选择 3.8.4 稳定版:

[root@elk01 ~]# docker pull zookeeper:3.8.4

二、准备工作目录

  1. 创建集群所需的数据存储和日志目录,采用 zoo1、zoo2、zoo3 区分三个节点:

[root@elk01 ~]# mkdir -p /data/zookeeper/zoo{1,2,3}/{data,datalog}
  1. 配置目录权限,确保容器有读写权限:

[root@elk01 ~]# chmod -R 644 /data/zookeeper  

三、编写 docker-compose 配置文件

创建并编辑docker-compose.yml文件,定义三个 Zookeeper 节点的集群配置:

[root@elk01 ~]# vi docker-compose.yml
version: '3.1'
services:
  zoo1:
    image: zookeeper:3.8.4
    restart: always  # 容器退出时自动重启
    hostname: zoo1   # 节点主机名,用于集群内部通信
    ports:
      - 2181:2181    # 映射客户端端口到宿主机2181
    environment:
      ZOO_MY_ID: 1   # 当前节点ID,必须唯一
      # 集群节点配置:server.ID=主机:数据同步端口:选举端口;客户端端口
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    volumes:
      - /data/zookeeper/zoo1/data:/data      # 挂载数据目录
      - /data/zookeeper/zoo1/datalog:/datalog # 挂载日志目录

  zoo2:
    image: zookeeper:3.8.4
    restart: always
    hostname: zoo2
    ports:
      - 2182:2181
    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
    volumes:
      - /data/zookeeper/zoo2/data:/data
      - /data/zookeeper/zoo2/datalog:/datalog

  zoo3:
    image: zookeeper:3.8.4
    restart: always
    hostname: zoo3
    ports:
      - 2183:2181
    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
    volumes:
      - /data/zookeeper/zoo3/data:/data
      - /data/zookeeper/zoo3/datalog:/datalog

四、启动 Zookeeper 集群

使用 docker-compose 启动整个集群(-d 参数表示后台运行):

[root@elk01 ~]# docker-compose up -d
[+] Building 0.0s (0/0)                                                                                
[+] Running 4/4
 ? Network root_default   Created                                                                      
 ? Container root-zoo3-1  Started                                                                      
 ? Container root-zoo1-1  Started                                                                      
 ? Container root-zoo2-1  Started   

五、验证集群状态

  1. 查看运行中的容器状态:

[root@elk01 ~]# docker ps 
CONTAINER ID   IMAGE                                             COMMAND                  CREATED         STATUS                 PORTS                                                                     NAMES
bda694884ef2   zookeeper:3.8.4                                   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes           2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2183->2181/tcp, :::2183->2181/tcp   root-zoo3-1
241783f4e656   zookeeper:3.8.4                                   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes           2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2182->2181/tcp, :::2182->2181/tcp   root-zoo2-1
6fc420d76571   zookeeper:3.8.4                                   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes           2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp   root-zoo1-1
  1. 查看指定节点的运行日志(以 zoo1 为例):

[root@elk01 ~]# docker-compose logs -f zoo1  

六、集群功能测试

  1. 连接到任意节点(以 zoo3 为例),使用 zkCli.sh 客户端工具:

[root@elk01 ~]# docker exec -it root-zoo3-1 zkCli.sh -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 1] create /test "我来了"
Created /test
[zk: 127.0.0.1:2181(CONNECTED) 2] get /test 
我来了

2.验证数据同步:登录其他节点(如 zoo2)查看是否能获取到刚才创建的数据:

[root@elk01 ~]# docker exec -it root-zoo2-1 zkCli.sh -server 127.0.0.1:2181

  • 端口说明:2181 为客户端连接端口,2888 为节点间数据同步端口,3888 为选举端口

动物装饰