ETCD
ETCD 是用于共享配置和服务发现的分布式,一致性的K/V存储系统。
ETCD 特性
- 采用一致性算法
RAFT
- API提供
HTTP+JSON
,GRPC
ETCD 工作原理
ETCD使用Raft协议来维护集群内各个节点状态的一致性。
- 角色 集群中每个节点,任意时刻处于Leader,Follower,Candidate3种角色之一。
- 日志复制 是指主节点将每次操作形成日志条目,并持久化到本地磁盘,然后通过网络IO发送给其他节点。
- 安全行 在选主逻辑中,对能够成为主的节点加以限制,确保选出的节点已定包含了集群已经提交的所有日志。如果新选出的主节点已经包含了集群所有提交的日志,那就不需要从和其他节点比对数据了。简化了流程,缩短了集群恢复服务的时间。
规范词汇
node
raft 状态机实例。每个node 都具有唯一的标识,并在处于 leader 状态时记录其他节点的步进数。member
一个etcd 实例。Cluster
Cluster 由多个 member 组成。每个 member 中的 node 遵循 raft 共识协议来复制日志。Cluster 接收来自 member 的提案消息,将其提交并存储于本地磁盘。Peer
同一 Cluster 中的其它 member。Client
Client 指调用 Cluster API 的对象。
V2与V3的区别
- 事务:ETCD V3提供了多键条件事务(multi-key conditional transactions),应用各种需要使用事务代替原来的Compare-And-Swap操作。
- 平键空间(Flat key space):ETCD V3不再使用目录结构,只保留键。例如:”/a/b/c/“是一个键,而不是目录。V3中提供了前缀查询,来获取符合前缀条件的所有键值,这变向实现了V2中查询一个目录下所有子目录和节点的功能。
- 简洁的响应:像DELETE这类操作成功后将不再返回操作前的值。如果希望获得删除前的值,可以使用事务,来实现一个原子操作,先获取键值,然后再删除。
- 租约:租约代替了V2中的TTL实现,TTL绑定到一个租约上,键再附加到这个租约上。当TTL过期时,租约将被销毁,同时附加到这个租约上的键也被删除。
安装和使用
单节点使用
在github上下载,etcd
下载后解压文件,运行命令如下:
./etcd -name ll -listen-client-urls http://192.168.1.94:2379,http://127.0.0.1:2379 -advertise-client-urls http://192.168.1.94:2379
curl http://192.168.1.94:2379/v2/keys
若使用V3 版本 则需要设置 环境变量后用etcdctl
export ETCDCTL_API=3
./etcdctl put test 1
OK
./etcdctl get test
test
1