序言
v etcd 默认将数据存放到当前路径的 default.etcd/ 目录下
v 在 http://localhost:2380 和集群中其他节点通信
v 在 http://localhost:2379 提供 HTTP API 服务,供客户端交互
v 该节点的名称默认为 default
v snapshot count 为 10000,后面会说明这个配置的作用
v 集群和每个节点都会生成一个 uuid
v 启动的时候,会运行 raft,选举出 leader
2. 集群安装
2.1 启动方案:
根据是否可以提前知道节点的 ip,有几种不同的
① 静态配置:在启动 etcd server 的时候,通过 --initial-cluster 参数配置好所有的节点信息
① 使用已有的 etcd cluster 来注册和启动,比如官方提供的 discovery.etcd.io
② 使用 DNS 启动,
2. 2 常用配置参数
Ø --name :节点名称,默认为 default ,在集群中应该唯一
Ø --data-dir :数据保存的路径,默认为 ${name}.etcd
Ø --snapshot-count :指定数量事务被提交时,触发截取快照保存
Ø --heartbeat-interval :leader 发送心跳间隔。默认值是 100ms
Ø --eletion-timeout :超时选举时间,默认为 1000 ms
Ø --listen-peer-urls :同伴地址,比如 http://ip:port ,有多个以逗号分隔。所有节点都能够访问, 所以不要用 localhost
Ø --listen-client-urls :对外提供的地址: http://ip:2379,http://127.0.0.1:2379 ,客户端通过这个链接etcd
Ø --advertise-client-urls :对外公告该节点客户端所监听地址,这个会告诉集群中其他节点
Ø --initial-advertise-peer-urls :该节点同伴监听地址,这个值会告诉集群中其他节点
Ø --initial-cluster :集群中所有节点的信息,格式为 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1: 22380,infra3=http://127.0.0.1:32380'。这里的 infra 是节点的 --name 指定的名字;后面的 ip1:2380 是 --listen-peer-urls 指定的值
Ø --initial-cluster-state :新建集群值为 new ,存在的集群值为 existing
Ø --initial-cluster-token :创建集群的token,每个集群唯一值。要重新创建集群,即使配置和之前一样,也会生成新的集群和节点 uuid。否则会导致多个集群冲突,造成错误
--init 开头配置在 bootstrap 集群会使用,节点的重启被忽略。
3. 数据增删查改
4. 比较更新
在分布式环境中,需要解决多个客户端的竞争问题。etcd 提供了原子操作 CompareAndSwap (CAS),通过这个可以实现分布式锁。
"action": "compareAndSwap",
4.1 支持的条件包括
① preValue :检查 key 之前的值是否和客户端提供的一致
② prevIndex :检查 key 之前的 modifiedIndex 是否和客户端提供的一致
③ prevExist :检查 key 是否已经存在。存在就执行更新操作;不存在执行 create 操作