7

我很难理解 etcd(在 CoreOS 中)的真正作用,因为所有那些“分布式键值存储”对我来说似乎是无形的。进一步阅读 etcd,深入研究 Raft 共识算法,然后变得非常难以理解。

假设如果集群系统没有 etcd会发生什么?

感谢您的时间和精力!

4

2 回答 2

13

作为没有使用 etcd 构建分布式系统的 CoreOS 经验的人,我想我可以对此有所了解。

etcd 的想法是提供一些适用于构建各种分布式系统的非常基本的原语。原因是分布式系统从根本上来说很难。大多数程序员并不会仅仅因为有更多的机会来学习单系统程序而真正理解这些困难。自从云计算使分布式系统的构建和试验成本降低以来,这种情况在过去 5 年才真正开始转变。即便如此,还有很多东西要学

分布式系统中最大的问题之一是共识。换句话说,保证系统中的所有节点都同意一个特定的值。现在,如果硬件和网络是 100% 可靠的,那将很容易,但这当然是不可能的。设计一种算法来围绕共识提供一些有意义的保证是一个非常困难的问题,很多聪明人已经投入了大量时间。Paxos 是以前最先进的算法,但很难理解。Raft 试图提供类似的保证,但对普通程序员来说更容易接近。然而,即使如此,正如您所发现的,了解它的操作细节和应用程序并非易事。

至于 etcd 在 CoreOS 中的具体用途,我无法告诉你。但是我可以肯定地说,任何需要集群中所有机器共享和同意的数据都应该存储在 etcd 中。相反,节点(或节点子集)可以自行处理的任何内容都不应存储在 etcd 中(因为它会产生在所有节点上进行通信和存储的开销)。

使用 etcd,可以让大量相同的机器自动协调、选举领导者,并保证其键值存储中的数据历史记录相同,例如:

  • 任何 etcd 节点都不会返回大多数节点不同意的数据。
  • 对于集群大小,即使其他机器死亡或失去连接,x任何数量的机器都可以继续运行并接受写入。> x/2
  • 对于任何失去连接的机器(例如,由于 netsplit),即使写入失败,它们也可以保证继续返回正确的历史数据。

键值存储本身非常简单,并没有什么特别有趣的地方,但是这些属性允许我们构建能够抵抗单个组件故障并可以提供正确性的合理保证的分布式系统。

于 2015-04-11T23:05:44.503 回答
3

etcd 是用于集群范围内的协调和状态管理的可靠系统。它建立在 Raft 之上。

Raft 为 etcd 提供了跨分布式 etcd 节点系统的事件的总排序。这有很多优点和缺点:

优点包括:

  • 任何节点都可以被视为主节点
  • 最短的停机时间(如果一个节点没有响应,客户端可以尝试另一个节点)
  • 避免脑裂
  • 一种为集群范围内的协调构建分布式锁的可靠方法
  • etcd 的用户可以构建分布式系统,而无需临时的、错误的、自主开发的解决方案

    例如:您将使用 etcd 来协调新 Postgres 主节点的自动选举,以便集群中仅保留一个主节点。

缺点包括:

  • 出于安全原因,它要求大多数集群在回复客户端之前提交写入(通常是到磁盘)
  • 比单个主系统需要更多的网络聊天
于 2014-07-14T21:42:40.070 回答