docker 安装etcd集群

4,296 阅读3分钟

etcd 可用于:

  • 共享配置

  • 服务发现

  • 分布式锁或一致性保障

  • 分布式数据队列

  • 分布式通知和协调

  • 集群选举 Etcd 主要提供以下能力

  • 提供存储以及获取数据的接口,它通过协议保证 Etcd 集群中的多个节点数据的强一致性。用于存储元信息以及共享配置。

  • 提供监听机制,客户端可以监听某个key或者某些key的变更(v2和v3的机制不同,参看后面文章)。用于监听和推送变更。

  • 提供key的过期以及续约机制,客户端通过定时刷新来实现续约(v2和v3的实现机制也不一样)。用于集群监控以及服务注册发现。

  • 提供原子的CAS和 CAD支持(v2通过接口参数实现,v3通过批量事务实现)。用于分布式锁以及leader选举。

etcd可以扮演两大角色:

  • 持久化的键值存储系统
  • 分布式系统数据一致性服务提供者

获取 etcd 源码及编译后的软件包

Docker搭建ETCD集群高可用版本

以下示例一台机器模拟,多台机器原理和参数一样,自行修改。

1. etcd 节点安装,每台机器执行一样

1.1 创建存储映射

mkdir -p /var/etcd

1.2 启动容器

node1

docker run --restart=always --net host -it --name etcd-node1 -d \
-v /var/etcd:/var/etcd \
-v /etc/localtime:/etc/localtime \
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24 \
etcd --name etcd-node1 \
--auto-compaction-retention=1 --max-request-bytes=33554432 --quota-backend-bytes=8589934592 \
--data-dir=/var/etcd/etcd-node1 \
--listen-client-urls http://0.0.0.0:2379 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-advertise-peer-urls http://10.0.4.4:2380 \
--advertise-client-urls http://10.0.4.4:2379,http://10.0.4.4:2380 \
-initial-cluster-token etcd-cluster \
-initial-cluster "etcd-node1=http://10.0.4.4:2380,etcd-node2=http://10.0.4.4:2381,etcd-node3=http://10.0.4.4:2382" \
-initial-cluster-state new

node2

docker run --restart=always --net host -it --name etcd-node2 -d \
-v /var/etcd:/var/etcd \
-v /etc/localtime:/etc/localtime \
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24 \
etcd --name etcd-node2 \
--auto-compaction-retention=1 --max-request-bytes=33554432 --quota-backend-bytes=8589934592 \
--data-dir=/var/etcd/etcd-node2 \
--listen-client-urls http://0.0.0.0:3379 \
--listen-peer-urls http://0.0.0.0:2381 \
--initial-advertise-peer-urls http://10.0.4.4:2381 \
--advertise-client-urls http://10.0.4.4:3379,http://10.0.4.4:2381 \
-initial-cluster-token etcd-cluster \
-initial-cluster "etcd-node1=http://10.0.4.4:2380,etcd-node2=http://10.0.4.4:2381,etcd-node3=http://10.0.4.4:2382" \
-initial-cluster-state new

node3

docker run --restart=always --net host -it --name etcd-node3 -d \
-v /var/etcd:/var/etcd \
-v /etc/localtime:/etc/localtime \
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24 \
etcd --name etcd-node3 \
--auto-compaction-retention=1 --max-request-bytes=33554432 --quota-backend-bytes=8589934592 \
--data-dir=/var/etcd/etcd-node3 \
--listen-client-urls http://0.0.0.0:4379 \
--listen-peer-urls http://0.0.0.0:2382 \
--initial-advertise-peer-urls http://10.0.4.4:2382 \
--advertise-client-urls http://10.0.4.4:4379,http://10.0.4.4:2382 \
-initial-cluster-token etcd-cluster \
-initial-cluster "etcd-node1=http://10.0.4.4:2380,etcd-node2=http://10.0.4.4:2381,etcd-node3=http://10.0.4.4:2382" \
-initial-cluster-state new

可视化界面访问

image.png

安装可视化界面

docker run -d -p 8080:8080 --name etcd-viewer  nikfoundas/etcd-viewer

1.3 参数说明

参数说明
--auto-compaction-retention=1推荐一小时压缩一次数据这样可以极大的保证集群稳定,减少内存和磁盘占用
data-dir数据存储目录
listen-client-urls监听客户端url列表
listen-peer-urls监听对等流浪url
initial-advertise-peer-urls此成员的对等URL的列表,以通告到集群的其余部分。这些地址用于在集群周围传递etcd数据。所有集群成员必须至少有一个路由
advertise-client-urls此成员的客户端URL的列表,以广播到集群的其余部分。这些URL可以包含域名
initial-cluster-token引导期间etcd群集的初始群集令牌
initial-cluster- 用于引导的初始群集配置。
-initial-cluster-state- 初始群集状态(“新”或“现有”)。new对于初始静态或DNS引导过程中存在的所有成员,设置为。如果将此选项设置为existing,则etcd将尝试加入现有集群。如果设置了错误的值,则etcd将尝试启动但安全失败。
通用参数
image.png

集群参数

image.png

安全相关参数

image.png

代理参数

这些参数主要是当Etcd服务自身仅作为代理模式时候使用,即转发来自客户端的请求到指定的Etcd集群。
此时Etcd服务本省并不参与集群中去,不保存数据和参加选举。

 日志参数

其它