基于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. 参考

相关推荐
Lvan的前端笔记6 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
sbjdhjd11 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
方方洛13 小时前
ray教程-00-前言与导读
人工智能·分布式·机器学习
方方洛13 小时前
ray教程-01-认识Ray
人工智能·分布式·机器学习
帷幕落秋13 小时前
Docker的两种安装
运维·docker·容器
工业一体机老司机13 小时前
工业一体机选购后的系统部署:Ubuntu下Docker容器化运行与GPIO配置
linux·ubuntu·docker·人机交互
姜鱼问生17 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
人生百态,人生如梦18 小时前
Ubuntu在低版本下使用ccswitch+claudecode(CCSwitch+Docker+Claude)连调教程
linux·ubuntu·docker·claudecode·ccswitch
yexianglunbai18 小时前
RabbitMQ 详解:从入门到实战
分布式·rabbitmq
程序员老赵18 小时前
Docker 部署 OpenViking:轻松搭建 AI Agent 上下文数据库平台
docker·开源·agent