【Docker】Docker Compose方式搭建分布式协调服务(Zookeeper)集群

开发分布式应用时,往往需要高度可靠的分布式协调,Apache ZooKeeper 致力于开发和维护开源服务器,以实现高度可靠的分布式协调。具体内容见zookeeper官网。现代应用往往使用云原生技术进行搭建,如何用Docker搭建Zookeeper集群,这里介绍使用Docker Compose方式搭建分布式协调服务(Zookeeper)集群,适用于单机Docker环境,无论是本地单机开发、测试环境单机验证,还是生产环境单机运行。

文章目录

开发环境

  1. macOS For Apple Silicon;
  2. Idea;
  3. Docker Desktop: 4.41.2,Engine:28.1.1,Compose: v2.35.1-desktop.1;
  4. Docker镜像:zookeeper:3.9.3;
  5. Docker Compose配置文件:zookeeper-cluster.yaml;
  6. 命令行启动配置文件:README.md.

开发流程

  1. 下载Docker Desktop并安装,Docker Desktop For Mac Apple Silicon地址;
  2. 编写Docker Compose配置文件,配置3个结点,每个结点的ZOO_MY_ID分别为1-3,配置客户端连接、集群结点通信端口和集群选举端口,配置3个服务结点.工程文件见zookeeper-cluster.yaml;
  3. 执行启动集群结点命令;
  4. 应用连接zookeeper集群的连接串设置为localhost:12181,localhost:22181,localhost:32181,如spring.cloud. zookeeper.connect-string=localhost:12181,localhost:22181,localhost:32181.

运行效果

启动集群图

配置代码

zookeeper.yaml

yaml 复制代码
version: "3.8"
services:
  zk-node1:
    image: zookeeper:3.9.3
    container_name: zk-node1
    hostname: zk-node1  # 主机名用于集群通信
    environment:
      ZOO_MY_ID: 1  # 节点唯一标识:ml-citation{ref="3,4" data="citationList"}
      ZOO_SERVERS: "server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181"
    ports:
      - "12181:2181"    # 客户端连接端口
      - "12888:2888"    # 集群节点通信端口
      - "13888:3888"    # 集群选举端口
    networks:
      - zk-cluster-net
  zk-node2:
    image: zookeeper:3.9.3
    container_name: zk-node2
    hostname: zk-node2
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: "server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181"
    ports:
      - "22181:2181"    # 客户端连接端口
      - "22888:2888"    # 集群节点通信端口
      - "23888:3888"    # 集群选举端口
    networks:
      - zk-cluster-net
  zk-node3:
    image: zookeeper:3.9.3
    container_name: zk-node3
    hostname: zk-node3
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: "server.1=zk-node1:2888:3888;2181 server.2=zk-node2:2888:3888;2181 server.3=zk-node3:2888:3888;2181"
    ports:
      - "32181:2181"    # 客户端连接端口
      - "32888:2888"    # 集群节点通信端口
      - "33888:3888"    # 集群选举端口
    networks:
      - zk-cluster-net
networks:
  zk-cluster-net:
    driver: bridge  # 统一网络确保容器互联:ml-citation{ref="4,7" data="citationList"}

README.md

md 复制代码
### zk集群启动
```shell
docker-compose -f zookeeper-cluster.yaml up -d
```
### zk集群停止
```shell
docker-compose -f zookeeper-cluster.yaml down
```
相关推荐
闪电悠米8 小时前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
正经教主9 小时前
【docker基础】第五课:Docker网络详解
运维·docker·容器
鹤鸣的日常10 小时前
前端运行时动态环境变量方案
前端·react.js·docker·前端框架·vue·gitlab
z落落11 小时前
C# 事件(Event)+自定义带参数事件例子
开发语言·分布式·c#
我是一颗柠檬13 小时前
【Java项目技术亮点】分库分表+数据路由策略:单表5000万后的架构升级方案
java·开发语言·分布式·架构
半夜修仙14 小时前
RabbitMQ中如何保证消息的可靠性传输
java·分布式·中间件·rabbitmq·github·java-rabbitmq
我是谁??14 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
运维瓦工14 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
云烟成雨TD14 小时前
Spring AI 1.x 系列【59】容器化开发支持:Docker Compose 与 Testcontainers
人工智能·spring·docker
Plastic garden14 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes