1. etcd 是什么
etcd 是一个分布式键值对存储,设计用来可靠而快速的保存关键数据并提供访问。
通过分布式锁,leader 选举和写屏障(write barriers)来实现可靠的分布式协作。
etcd 集群是为高可用,持久性数据存储和检索而准备。
1.1 etcd 的应用场景:
- 服务发现
- 消息发布和订阅
- 负载均衡
- 分布式锁、分布式队列
- 集群监控和 leader 竞选
2. etcd 的基本操作
- 通过 http 进行通信
- 通过 etcdctl 连接进行操作
1 | put指令(update or create if key not exist) |
3. etcd 的集群一致性
etcd 使用 Raft 协议,实现强一致性
3.1 Raft 协议架构
raft 协议中,节点有三种角色:leader、follower、candidate。
初始,所有节点都为 follower,当 follower 节点在指定时常内没收到 leader 的心跳包,就会晋升为 candidate(候选节点),
候选节点会向其他节点发送投票请求,请求其他节点投票,票数超过集群节点数量一半的节点会晋升为 leader。leader 负责处理所有客户端的事务请求。
若事务请求没到 leader,follower 节点也会将请求转发给 leader。
3.2 Raft 协议一致性
当 leader 节点接收到事务请求后,会先写入本地日志,然后向集群中每个 follower 节点发送请求,询问是否可以更新数据。
若超过一半节点都认同此次操作,则 leader 节点会将数据更新,将结果返回给客户端,并通知每个 follower 节点,更新自己的数据。从而保证集群数据的一致性