基于Docker的ETCD分布式集群

目录

[1. 说明](#1. 说明)

[2. 配置表](#2. 配置表)

[3. 步骤](#3. 步骤)

[3.1 放行端口](#3.1 放行端口)

[3.2 docker-compose 文件](#3.2 docker-compose 文件)

[3.3 部署到3台服务器](#3.3 部署到3台服务器)

[3.4 相关命令](#3.4 相关命令)

[4. 参考](#4. 参考)


1. 说明

  • 以docker容器方式实现ETCD分布式集群,为其他项目提供支持,经过反复试验成功部署**(网上资料大都过期或部署失败)**。

  • 三个ETCD服务点供访问

2. 配置表

服务器 etcd name ip 备注
center01.dev.sb etcd0 172.16.20.20 硬件配置:16核32G 软件配置:ubuntu22.04 + 宝塔面板
host004.dev.sb etcd1 172.16.20.63 ...
host004.dev.sb etcd2 172.16.20.64 ...

3. 步骤

3.1 放行端口

分别放行 4001, 2380, 2379

3.2 docker-compose 文件

docker-compose.etcd0.yml

复制代码
x-variables:
  flag_initial_cluster_token: &flag_initial_cluster_token '--initial-cluster-token=etcd-cluster'
  common_settings: &common_settings
      image: quay.io/coreos/etcd:v3.5.16
      entrypoint: /usr/local/bin/etcd
      ports:
        - 4001:4001
        - 2380:2380
        - 2379:2379
          
services:
  etcd0:
    container_name: etcd0
    restart: always
    <<: *common_settings
    command:
      - '--name=etcd0'
      - '--advertise-client-urls=http://172.16.20.20:2379,http://172.16.20.20:4001'
      - '--listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001'
      - '--initial-advertise-peer-urls=http://172.16.20.20:2380'
      - '--listen-peer-urls=http://0.0.0.0:2380'
      - '--initial-cluster=etcd0=http://172.16.20.20:2380,etcd1=http://172.16.20.63:2380,etcd2=http://172.16.20.64:2380'
      - '--initial-cluster-state=new'
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "5"

docker-compose.etcd1.yml

复制代码
x-variables:
  flag_initial_cluster_token: &flag_initial_cluster_token '--initial-cluster-token=etcd-cluster'
  common_settings: &common_settings
      image: quay.io/coreos/etcd:v3.5.16
      entrypoint: /usr/local/bin/etcd
      ports:
        - 4001:4001
        - 2380:2380
        - 2379:2379
          
services:
  etcd1:
    container_name: etcd1
    restart: always
    <<: *common_settings
    command:
      - '--name=etcd1'
      - '--advertise-client-urls=http://172.16.20.63:2379,http://172.16.20.63:4001'
      - '--listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001'
      - '--initial-advertise-peer-urls=http://172.16.20.63:2380'
      - '--listen-peer-urls=http://0.0.0.0:2380'
      - '--initial-cluster=etcd0=http://172.16.20.20:2380,etcd1=http://172.16.20.63:2380,etcd2=http://172.16.20.64:2380'
      - '--initial-cluster-state=new'
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "5"

docker-compose.etcd2.yml

复制代码
x-variables:
  flag_initial_cluster_token: &flag_initial_cluster_token '--initial-cluster-token=etcd-cluster'
  common_settings: &common_settings
      image: quay.io/coreos/etcd:v3.5.16
      entrypoint: /usr/local/bin/etcd
      ports:
        - 4001:4001
        - 2380:2380
        - 2379:2379
          
services:
  etcd2:
    container_name: etcd2
    restart: always
    <<: *common_settings
    command:
      - '--name=etcd2'
      - '--advertise-client-urls=http://172.16.20.64:2379,http://172.16.20.64:4001'
      - '--listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001'
      - '--initial-advertise-peer-urls=http://172.16.20.64:2380'
      - '--listen-peer-urls=http://0.0.0.0:2380'
      - '--initial-cluster=etcd0=http://172.16.20.20:2380,etcd1=http://172.16.20.63:2380,etcd2=http://172.16.20.64:2380'
      - '--initial-cluster-state=new'
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "5"
3.3 部署到3台服务器

服务拉起来:

3.4 相关命令
复制代码
# 列出节点成员
docker exec etcd0 etcdctl --write-out=table member list

# 查看节点状态
docker exec etcd0 etcdctl --write-out=table endpoint status

# 查看节点健康
docker exec etcd0 etcdctl --write-out=table endpoint health

# 在etcd0中放入KV
docker exec etcd0 etcdctl put name ben

# 在etcd1中获取
docker exec etcd1 etcdctl get name

4. 参考

相关推荐
计算机小手1 小时前
一个带Web UI管理的轻量级高性能OpenAI模型代理网关,支持Docker快速部署
经验分享·docker·语言模型·开源软件
坚持学习前端日记2 小时前
常见docker指令
docker·容器·eureka
小芳矶3 小时前
Dify本地docker部署踩坑记录
python·docker·容器
70asunflower3 小时前
阿里云无影云电脑 Docker 使用完全指南
阿里云·docker·云计算
feasibility.5 小时前
在OpenCode使用skills搭建基于LLM的dify工作流
人工智能·低代码·docker·ollama·skills·opencode·智能体/工作流
麦兜*5 小时前
深入解析现代分布式事务架构:基于Seata Saga模式与TCC模式实现金融级高可用与数据最终一致性的工程实践全解析
分布式·金融·架构
難釋懷6 小时前
分布式锁-redission功能介绍
分布式
lpruoyu6 小时前
【Docker进阶-02】Docker命令
docker·容器
FLGB7 小时前
Docker网段和服务器内部网段172.17 网段冲突导致网络不通
服务器·网络·docker
only-qi9 小时前
微服务场景下,如何实现分布式事务来保证一致性?
分布式·微服务·架构