docker部署etcd集群及使用

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: docker部署etcd集群及使用

docker部署etcd集群

etcd版本:v3.5.5

创建etcd数据目录

mkdir -p etcd-node{1,2,3}

创建docker网络

docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 etcd-cluster

docker-compose.yml

version: '3'

networks:
  etcd-cluster:
    external: true

services:
  etcd-node1:
    image: quay.io/coreos/etcd:v3.5.5
    container_name: etcd-node1
    ports:
      - "12379:2379"
      - "12380:2380"
    restart: always
    volumes:
      - ./etcd-node1:/data/app/etcd
    command: etcd --name etcd-node1 --data-dir /data/app/etcd/ --advertise-client-urls http://172.20.0.10:2379 --initial-advertise-peer-urls http://172.20.0.10:2380 --listen-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-cluster-token etcd-cluster --initial-cluster "etcd-node1=http://172.20.0.10:2380,etcd-node2=http://172.20.0.11:2380,etcd-node3=http://172.20.0.12:2380" --initial-cluster-state new
    networks:
      etcd-cluster:
        ipv4_address: 172.20.0.10

  etcd-node2:
    image: quay.io/coreos/etcd:v3.5.5
    container_name: etcd-node2
    ports:
      - "22379:2379"
      - "22380:2380"
    restart: always
    volumes:
      - ./etcd-node2:/data/app/etcd
    command: etcd --name etcd-node2 --data-dir /data/app/etcd/ --advertise-client-urls http://172.20.0.11:2379 --initial-advertise-peer-urls http://172.20.0.11:2380 --listen-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-cluster-token etcd-cluster --initial-cluster "etcd-node1=http://172.20.0.10:2380,etcd-node2=http://172.20.0.11:2380,etcd-node3=http://172.20.0.12:2380" --initial-cluster-state new
    networks:
      etcd-cluster:
        ipv4_address: 172.20.0.11

  etcd-node3:
    image: quay.io/coreos/etcd:v3.5.5
    container_name: etcd-node3
    ports:
      - "32379:2379"
      - "32380:2380"
    restart: always
    volumes:
      - ./etcd-node3:/data/app/etcd
    command: etcd --name etcd-node3 --data-dir /data/app/etcd/ --advertise-client-urls http://172.20.0.12:2379 --initial-advertise-peer-urls http://172.20.0.12:2380 --listen-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-cluster-token etcd-cluster --initial-cluster "etcd-node1=http://172.20.0.10:2380,etcd-node2=http://172.20.0.11:2380,etcd-node3=http://172.20.0.12:2380" --initial-cluster-state new
    networks:
      etcd-cluster:
        ipv4_address: 172.20.0.12

启动集群

docker-compose up -d

验证集群

docker exec -it etcd-node1 bash
etcdctl member list -w table

member_list.jpg

etcdctl --endpoints=172.20.0.10:2379,172.20.0.11:2379,172.20.0.12:2379 endpoint status -w table

status.jpg

可以看出etcd-node2为leader。

读写数据

etcdctl put /foo bar
etcdctl get /foo

任意节点写入,任意节点都可以读取。

节点故障测试1

停掉etcd-node1节点(非leader)。进行读写测试。

恢复etcd-node1节点。进行读写测试。

节点故障测试2

停掉etcd-node2节点(leader)。观察新leader。进行读写测试。

恢复etcd-node2节点。进行读写测试。

添加节点

etcd4.yml

创建数据目录

mkdir etcd-node4
version: '3'

networks:
  etcd-cluster:
    external: true

services:
  etcd-node4:
    image: quay.io/coreos/etcd:v3.5.5
    container_name: etcd-node4
    ports:
      - "42379:2379"
      - "42380:2380"
    restart: always
    volumes:
      - ./etcd-node4:/data/app/etcd
    command: etcd --name etcd-node4 --data-dir /data/app/etcd/ --advertise-client-urls http://172.20.0.13:2379 --initial-advertise-peer-urls http://172.20.0.13:2380 --listen-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-cluster-token etcd-cluster --initial-cluster "etcd-node1=http://172.20.0.10:2380,etcd-node2=http://172.20.0.11:2380,etcd-node3=http://172.20.0.12:2380,etcd-node4=http://172.20.0.13:2380" --initial-cluster-state existing
    networks:
      etcd-cluster:
        ipv4_address: 172.20.0.13

启动:

docker-compose -f etcd4.yml up -d

进入任意容器执行:

etcdctl member add etcd-node4 --peer-urls=http://172.20.0.13:2380

重启容器:

docker-compose -f etcd4.yml stop
docker-compose -f etcd4.yml start

验证集群。

删除节点

etcdctl member remove b7476e957868d2df
Member b7476e957868d2df removed from cluster fcb94ddca70b9db2

etcdctl member list -w table

etcdctl --endpoints=172.20.0.10:2379,172.20.0.11:2379,172.20.0.12:2379 endpoint status -w table
目录
相关文章
|
20小时前
|
存储 Linux 测试技术
【Docker项目实战】使用Docker部署Raneto知识库平台
【2月更文挑战第11天】使用Docker部署Raneto知识库平台
7 1
【Docker项目实战】使用Docker部署Raneto知识库平台
|
1天前
|
Java Linux Maven
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
|
1天前
|
关系型数据库 MySQL 数据库
如何使用Docker部署开源CMF Drupal并结合cpolar内网穿透远程访问
如何使用Docker部署开源CMF Drupal并结合cpolar内网穿透远程访问
|
1天前
|
存储 Linux 数据安全/隐私保护
如何在本地Docker中部署MinIO服务并实现远程访问管理界面
如何在本地Docker中部署MinIO服务并实现远程访问管理界面
|
1天前
|
数据挖掘 Apache 数据安全/隐私保护
使用Docker部署Apache Superset并实现公网远程访问
使用Docker部署Apache Superset并实现公网远程访问
|
2天前
|
资源调度 JavaScript 前端开发
如何使用 Docker 来部署 Vue 项目?
【2月更文挑战第8天】
18 2
|
2天前
|
搜索推荐 测试技术 开发者
【Docker项目实战】使用Docker部署envlinks极简个人导航页
【2月更文挑战第9天】使用Docker部署envlinks极简个人导航页
30 1
|
2天前
|
开发工具 Docker 容器
docker安装集群版ElasticSearch
docker安装集群版ElasticSearch
|
2天前
|
SQL 关系型数据库 MySQL
docker部署mysql
docker环境下部署mysql8.x和mysql5.x
|
3天前
|
存储 监控 Serverless
Serverless应用引擎(SAE)不支持直接通过Docker Compose进行部署
【2月更文挑战第8天】Serverless应用引擎(SAE)不支持直接通过Docker Compose进行部署
10 1

相关产品

  • 云原生多模数据库 Lindorm
  • 云数据库 Redis 版
  • 云数据库 MongoDB 版