docker 部署etcd集群
往期内容
- ETCD 简介
前言
上期我们对于分布式kv存储中间件有了简单的认识,本期简单介绍docker-compose 部署etcd集群以及可视化工具 etcd Keeper
1-etcd docker 部署
看了很多网上部署的教程,要么超级简陋,要么搞一堆配置,也不说明每项配置的作用,让人一头雾水。所以在这里写一篇详细的博客,搭建出一个具体的 etcd 集群,并介绍每项的配置作用,镜像使用的是 bitnami/etcd。
环境准备
在此列出我自己的环境,相关版本应该问题不大,但还是建议各位道友同版本使用
Docker ====> version 24.0.7
Docker Compose ====> version: v2.12.2
bitnami/etcd ====> version: 3.5.5
如果你还没有安装 Docker 和 Docker Compose,请先参照网上的教程安装一下。
创建以下文件夹保存 etcd 相关的文件,我这里以 /home/docker/etcd 做为教程演示:
- 创建 /home/docker/etcd 目录,保存所有 etcd 的相关文件;
- 创建 /home/docker/etcd/data 目录,用作数据卷映射,持久化 etcd 数据到宿主机;
- 创建 /home/docker/etcd/docker-compose.yml,用来编写我们的部署配置。
docker-compose 部署etcd单节点
部署
单节点部署比较简单,docker-compose.yml 如下所示:
version: "2.1"
services:
etcd:
image: "bitnami/etcd:3.5.5"
container_name: "etcd"
# 总是重启
restart: "always"
ports:
- 2379:2379
environment:
# 时区设置
- TZ=Asia/Shanghai
# 允许无认证访问
- ALLOW_NONE_AUTHENTICATION=yes
# etcd 客户端访问URL
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379
volumes:
# 将数据映射到宿主机
- etcd_data:/bitnami/etcd
volumes:
etcd_data:
driver: local
driver_opts:
type: "none"
o: "bind"
device: "/home/docker/etcd/data"
单机版部署比较容易,在docker-compose.yml所在文件夹下执行命令:docker-compose up -d
命令,此时在浏览器访问 http://IP:2379/version,即可看到我们的版本号:
此时,数据文件也会映射到 /home/docker/etcd/data
目录下,可以自行进去查看一下。
使用
执行如下命令,进入 etcd 容器:
docker exec -it etcd bash
创建一个key:
etcdctl put /k v
查看一个key:
etcdctl get /k
删除一个key:
etcdctl del /k
docker-compose 部署etcd集群
部署
集群部署较之单点配置,多了很多配置,请查看 docker-compose.yml:
version: "2.1"
services:
etcd1:
image: "bitnami/etcd:3.5.5"
container_name: "etcd1"
restart: "always"
ports:
- 12379:12379
environment:
- TZ=Asia/Shanghai
# 允许无认证访问
- ALLOW_NONE_AUTHENTICATION=yes
# 名称
- ETCD_NAME=etcd1
# 列出这个成员的伙伴 URL 以便通告给集群的其他成员
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380
# 用于监听伙伴通讯的URL列表
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
# 用于监听客户端通讯的URL列表
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:12379
# 初始化集群记号,建议一个集群内的所有节点都设置唯一的token
- ETCD_INITIAL_CLUSTER_TOKEN=MyEtcd
# 列出这个成员的客户端URL,通告给集群中的其他成员
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:12379
# 集群配置,格式是ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
# 初始化集群状态,这里写 new 就行
- ETCD_INITIAL_CLUSTER_STATE=new
etcd2:
image: "bitnami/etcd:3.5.5"
container_name: "etcd2"
restart: "always"
ports:
- 22379:22379
environment:
- TZ=Asia/Shanghai
# 允许无认证访问
- ALLOW_NONE_AUTHENTICATION=yes
# 名称
- ETCD_NAME=etcd2
# 列出这个成员的伙伴 URL 以便通告给集群的其他成员
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
# 用于监听伙伴通讯的URL列表
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
# 用于监听客户端通讯的URL列表
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:22379
# 初始化集群记号,建议一个集群内的所有节点都设置唯一的token
- ETCD_INITIAL_CLUSTER_TOKEN=MyEtcd
# 列出这个成员的客户端URL,通告给集群中的其他成员
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:22379
# 集群配置,格式是ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
# 初始化集群状态,这里写 new 就行
- ETCD_INITIAL_CLUSTER_STATE=new
etcd3:
image: "bitnami/etcd:3.5.5"
container_name: "etcd3"
restart: "always"
ports:
- 32379:32379
environment:
- TZ=Asia/Shanghai
# 允许无认证访问
- ALLOW_NONE_AUTHENTICATION=yes
# 名称
- ETCD_NAME=etcd3
# 列出这个成员的伙伴 URL 以便通告给集群的其他成员
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
# 用于监听伙伴通讯的URL列表
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
# 用于监听客户端通讯的URL列表
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:32379
# 初始化集群记号,建议一个集群内的所有节点都设置唯一的token
- ETCD_INITIAL_CLUSTER_TOKEN=MyEtcd
# 列出这个成员的客户端URL,通告给集群中的其他成员
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:32379
# 集群配置,格式是ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
# 初始化集群状态,这里写 new 就行
- ETCD_INITIAL_CLUSTER_STATE=new
看到这么长的配置不要怕,它们之中大部分都是重复的,你也可以先一个不看,复制下来,跑了再说。etcd 还有很多的环境配置,可以移步官方文档查看:etcd 配置手册。
我这里没有配置数据卷映射,如果想配置,参照单节点部署即可,运行 docker-compose up -d
命令,三个节点的 etcd 集群就可以启动了,三个节点的客户端端口分别是 12379、22379、32379,可以分别在浏览器使用 [http://IP:PORT/version] 查看它们的版本号。
使用
1. 验证集群同步数据
随便进入一台节点容器,我这里以 etcd1 进行举例子:
docker exec -it etcd1 bash
创建一个 key:
etcdctl --endpoints=localhost:12379 put /t v
–endpoints 用于指定节点地址,我们这里在 etcd1 节点上创建了一个key。然后试试其他节点是否能获取到信息:
etcdctl --endpoints=etcd2:22379 get /t
etcdctl --endpoints=etcd3:32379 get /t
docker 同网段的容器之间可以通过别名互相访问,所以这里直接使用 etcd2/etcd3 就可以了,结果截图:
node1设置值
node2,node3 获取值
2-可视化工具docker部署
etcd的可视化工具非常之多,我搜了一下,一抓一大把
- Kstone:这是一个针对etcd的全方位运维解决方案,由腾讯云容器TKE团队发起,基于Kubernetes的云原生一站式etcd治理项目。Kstone提供集群管理(如关联已有集群、创建新集群等)、监控、备份、巡检、数据迁移、数据可视化、智能诊断等一系列功能。它支持注册现有集群和创建新的etcd集群,支持Prometheus监控,内置丰富的etcd Grafana面板图,支持多种数据备份方式和检查策略,内置web控制台和可视化查看etcd数据。
- etcdwp:这是一款免费且支持Macos桌面的etcd客户端桌面工具(Mac Version >= 11.0)。它支持对etcd单机版和集群版键值存储进行增删改查等操作,同时也增加了对etcd集群资源和成员的操作。
- Etcd Assistant:这是一个Etcd的可视化管理工具,GUI客户端。它支持多标签页,同时连接到多个集群,以漂亮的格式显示JSON、XML、MessagePack、十六进制等数据格式,支持浏览、创建、编辑、删除键,导出和导入数据,支持基于用户名和密码的基本身份验证、HTTPS客户端证书认证,支持HTTP和HTTPS连接,显示etcd集群及其节点的基本信息,管理租约、用户和角色等。
- Etcd-Browser:这是一款用来对etcd进行管理的图形化管理工具,在传统的etcd管理工具的功能基础上,添加了很多非常实用的新的特性。它可以监控所有Key,监控指定的前缀的Key,监控修订号在指定范围内的Key,监控版本号在变化范围的Key,监控Key在指定的Range范围内的多个维度的监控。
在此我们以etc keeper为例子进行docker-compose 的部署
evildecay/etcdkeeper v0.7.6
在上文的docker-compose.yml的基础上继续添加etc keeper的相关依赖
docker-etcdkeeper:
hostname: etcdkeeper
image: evildecay/etcdkeeper:v0.7.6
ports:
- "8099:8080"
networks:
- etcd-net
networks:
etcd-net: # 网络
driver: bridge # 桥接模式
继续在docker-compose.yml所在文件夹下执行命令:docker-compose up -d
命令
然后访问配置的端口
点击etckeeper
默认的上述图中的地址是127.0.0.1,这儿一定要换成你自己的宿主机的ip地址,不要用默认的
至此,我们在docker中部署了etcd以及etcdkeeper
码字不易,希望大家能够一键三连🌝⭐🌟