etcd 是一种为集群内各机器提供可靠数据存储的分布式键值存储。etcd 开源提供在 GitHub 上,它很好地解决了网络分区期间领导者的选举问题,可容忍包括领导者节点在内的节点故障。
etcd 以驻留内存进程形式运行在集群中的每台机器上,提供动态配置的记录,支持以简单方式在集群成员间共享多种配置数据。
etcd 以键值方式存储数据,它是分布式的,支持自动复制和领导者自动选举产生。对存储数据的所有更改,会自动反映到整个集群。
etcd 还提供发现服务,支持“已部署的”应用向集群所有成员广播其所提供的服务。
etcd 使用基于 HTTP 的 JSON 方式通过 API 调用实现通信。API 可直接通过 curl 或 wget 等方式使用,也可以通过 etcdctl 间接使用。
容错能力
参考资料:src="https://static001.infoq.cn/resource/image/1a/4d/1a835ec49b837d2ff8b2161747f36d4d.png"/>
复制能力
参考文献:top="1926">活动副本
非活动副本
Raft 共识
参考链接:top="2594">什么是分布式共识算法?
一个用于概念理解的小比喻
上面简单比喻了 Raft 算法将事务提交到日志的做法。所有请求均由领导者(即国王)处理,并且仅在得到多数智者(集群中的其他节点)赞成后才能提交。
这大致说明了 Raft 算法中时如何进行领导者选举的。
这部分故事比喻了发生网络分区的情况。这时集群被拆分,每个新集群都有其自己的领导者和节点。冲突的请求可由各个的集群在不同的时间处理。当集群再次合并时,需要给出解决冲突值的方法。在 Raft 中,引入了 Term 概念解决分区一致性问题。
算法使用场合
etcd 如何适用于 Kubernetes 集群?
etcd 存储 kubernetes 的设置、状态和元数据。考虑到 Kubernetes 是一种分布式系统,使用分布式数据库是非常必要的。正如前文所阐释的,etcd 是一个具有高可用性和可扩展性的分布式数据库。
原文链接:
Kubernetes Journey — Up and running out of the cloud — etcd