引言
etcd是一个强一致性的分布式键值存储,它提供了一种可靠的方式来存储需要被分布式系统或机器集群访问的数据。通过 raft 算法它能在网络分区期间优雅地处理领导者的选举,并能容忍机器故障,甚至在领导者节点上。除此之外, etcd 还是 kubernetes 最为核心的组件之一,存储着 kubernetes 所有的元信息,因此如何保障 etcd 的安全性十分重要。
小知识
Raft 是一种共识算法,设计得很容易理解。它在容错和性能方面与 Paxos 相当。不同的是,它被分解成相对独立的子问题,并干净地解决了实际系统所需的所有主要部分。 而且 Raft 宣称的强一致性则是依靠"共识算法"来实现的。共识是容错分布式系统的一个基本问题,共识涉及多个服务器对数值的同意。一旦他们就某一数值达成了决定,该决定就是最终的。典型的共识算法在其任何大多数服务器可用时都会取得进展;例如,一个由5个服务器组成的集群,即使有2个服务器失败,也能继续运行。如果有更多的服务器失败,他们就会停止取得进展(但永远不会返回一个错误的结果)。
共识通常出现在复制状态机的背景下,这是一种构建容错系统的一般方法。每个服务器都有一个状态机和一个日志。状态机是我们想让其成为容错的组件,比如说哈希表。在客户看来,即使集群中的少数服务器发生故障,他们也是在与一个单一的、可靠的状态机进行交互。每个状态机从其日志中获取命令作为输入。在我们的哈希表例子中,日志将包括像set x to 3这样的命令。一个共识算法被用来同意服务器日志中的命令。共识算