Docker - Etcd集群部署(可用作分布式锁)
简介
etcd 是 CoreOS 团队于 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。主要用于配置共享和服务发现(类:Zookeeper、Consul)、分布式锁(类:RedLock)。
本示例在单机上启用多个Docker容器来模拟集群,所以需要创建自定义网络来指定IP分配。
一、拉取镜像
docker pull bitnami/etcd:3.5.6
二、创建网络
# 真实场景,这一步不是必须
# 构建个自定义网络,因为我们要给各个节点分配IP地址,Docker容器默认网络只能自动配IP无法手动分配。
docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 bridge-net
三、启动程序
etcd1
docker run -d \
-p 2379:2379 -p 2380:2380 \
--restart unless-stopped \
# 自定义网络
--network bridge-net \
--ip 172.18.1.1 \
--name etcd1 \
# 节点名称
-e ETCD_NAME=etcd1 \
-e ALLOW_NONE_AUTHENTICATION=yes \
# 告知集群自己集群客户端地址
-e ETCD_ADVERTISE_CLIENT_URLS=http://172.18.1.1:2379 \
# 告知集群自己集群通讯地址
-e ETCD_INITIAL_ADVERTISE_PEER_URLS=http://172.18.1.1:2380 \
# 监听客户端通讯的URL列表、监听伙伴通讯的URL列表
-e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 -e ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \
# 初始化集群TOKEN,只有相同token的节点才能加入到同一集群
-e ETCD_INITIAL_CLUSTER_TOKEN=manongdashu \
# 所有集群节点的地址列表
-e ETCD_INITIAL_CLUSTER=etcd1=http://172.18.1.1:2380,etcd2=http://172.18.1.2:2380,etcd3=http://172.18.1.3:2380 \
# 初始化集群状态,默认为new,也可以指定为existing表示要加入到一个已有集群
-e ETCD_INITIAL_CLUSTER_STATE=new \
# 数据文件映射
-v /data/etcd1/data:/bitnami/etcd/data \
-v /etc/localtime:/etc/localtime:ro \
bitnami/etcd:3.5.6
etcd2
docker run -d \
-p 2479:2379 -p 2480:2380 \
--restart unless-stopped \
--network bridge-net \
--ip 172.18.1.2 \
--name etcd2 \
-e ETCD_NAME=etcd2 \
-e ALLOW_NONE_AUTHENTICATION=yes \
-e ETCD_ADVERTISE_CLIENT_URLS=http://172.18.1.2:2379 \
-e ETCD_INITIAL_ADVERTISE_PEER_URLS=http://172.18.1.2:2380 \
-e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 -e ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \
-e ETCD_INITIAL_CLUSTER_TOKEN=manongdashu \
-e ETCD_INITIAL_CLUSTER=etcd1=http://172.18.1.1:2380,etcd2=http://172.18.1.2:2380,etcd3=http://172.18.1.3:2380 \
-e ETCD_INITIAL_CLUSTER_STATE=new \
-v /data/etcd2/data:/bitnami/etcd/data \
-v /etc/localtime:/etc/localtime:ro \
bitnami/etcd:3.5.6
etcd3
docker run -d \ -p 2579:2379 -p 2580:2380 \ --restart unless-stopped \ --network bridge-net \ --ip 172.18.1.3 \ --name etcd3 \ -e ETCD_NAME=etcd3 \ -e ALLOW_NONE_AUTHENTICATION=yes \ -e ETCD_ADVERTISE_CLIENT_URLS=http://172.18.1.3:2379 \ -e ETCD_INITIAL_ADVERTISE_PEER_URLS=http://172.18.1.3:2380 \ -e ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 -e ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 \ -e ETCD_INITIAL_CLUSTER_TOKEN=manongdashu \ -e ETCD_INITIAL_CLUSTER=etcd1=http://172.18.1.1:2380,etcd2=http://172.18.1.2:2380,etcd3=http://172.18.1.3:2380 \ -e ETCD_INITIAL_CLUSTER_STATE=new \ -v /data/etcd3/data:/bitnami/etcd/data \ -v /etc/localtime:/etc/localtime:ro \ bitnami/etcd:3.5.6
四、状态检查
# 查看集群状态
docker exec -it etcd1 etcdctl --write-out=table --endpoints=172.18.1.1:2379,172.18.1.2:2379,172.18.1.3:2379 endpoint status
五、分配权限
# 特殊的一个用户&角色:root用户拥有etcd的所有权限,且必须在激活身份认证之前就创建好. root用户的设计主要是出于管理的目的: 管理角色和普通用户. root用户必须具有root角色
# PowerShell定义变量:$endpoints='172.18.1.1:2379,172.18.1.2:2379,172.18.1.3:2379'
endpoints=172.18.1.1:2379,172.18.1.2:2379,172.18.1.3:2379
# 创建角色:root、read_write、read_only
docker exec -it etcd1 etcdctl --endpoints=$endpoints role add root
# docker exec -it etcd1 etcdctl --endpoints=$endpoints role add read_write
# docker exec -it etcd1 etcdctl --endpoints=$endpoints role add read_only
# 给角色赋予权限
# docker exec -it etcd1 etcdctl --endpoints=$endpoints role grant-permission read_write --prefix=true readwrite /
# docker exec -it etcd1 etcdctl --endpoints=$endpoints role grant-permission read_only --prefix=true read /
# 创建用户:密码
docker exec -it etcd1 etcdctl --endpoints=$endpoints user add root:manongdashu
# docker exec -it etcd1 etcdctl --endpoints=$endpoints user add admin:manongdashu
# docker exec -it etcd1 etcdctl --endpoints=$endpoints user add monitor:manongdashu
# 给用户分配角色
docker exec -it etcd1 etcdctl --endpoints=$endpoints user grant-role root root
# docker exec -it etcd1 etcdctl --endpoints=$endpoints user grant-role admin read_write
# docker exec -it etcd1 etcdctl --endpoints=$endpoints user grant-role monitor read_only
# 开启权限认证
docker exec -it etcd1 etcdctl --endpoints=$endpoints auth enable
# 取消权限认证
docker exec -it etcd1 etcdctl --endpoints=$endpoints --user=root:manongdashu auth disable
THE END
二维码
打赏
文章目录
关闭
共有 0 条评论