docker部署etcd集群及使用

简介: 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
目录
相关文章
|
6月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
2928 4
|
6月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
321 5
|
6月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
2131 8
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
761 6
|
6月前
|
存储 搜索推荐 数据库
🚀 RAGFlow Docker 部署全流程教程
RAGFlow是开源的下一代RAG系统,融合向量数据库与大模型,支持全文检索、插件化引擎切换,适用于企业知识库、智能客服等场景。支持Docker一键部署,提供轻量与完整版本,助力高效搭建私有化AI问答平台。
5976 8
|
6月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
946 4
|
Docker 容器 网络架构
docker服务发现——etcd集群
etcd etcd用于服务发现的基础注册和通知,功能类似于zk,通过注册和监听,实现基础的服务发现。 安装 etcd安装非常简单,可以用go自己编译,etcd也提供了可以直接使用的二进制包(64位)。 具体的安装提示页面在github上, 直接按照上面的描述下载即可。为了方便,把里面的et
11653 0
下一篇
开通oss服务