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
可视化界面访问
安装可视化界面
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将尝试启动但安全失败。 |
通用参数 | |
集群参数
安全相关参数
代理参数
这些参数主要是当Etcd服务自身仅作为代理模式时候使用,即转发来自客户端的请求到指定的Etcd集群。
此时Etcd服务本省并不参与集群中去,不保存数据和参加选举。
日志参数
其它