是否可以将节点添加到群集中,同步复制数据?

时间:2017-08-10 19:08:03

标签: distributed-computing distributed distributed-system consistent-hashing

如果我有将数据写入存储的系统。

在群集设置中,如果数据是同步复制的,那就是当我收到更改在所有节点上更新的数据的请求,然后返回响应时。

在这种情况下是否可以动态添加节点?

也就是说,有2个节点,并且在该集群上执行了一些事务。我是否可以添加群集仍在运行的第3个节点?

如果我添加这样的新节点,是否会破坏集群的强一致性?

2 个答案:

答案 0 :(得分:0)

我相信您正在寻找的是一致散列(Wikipedia)它允许您以某种方式分配内存,以便在多个节点之间正确复制数据,并且添加或删除节点的开销较少有了它,我建议你浏览The simple magic of consistent hashing

链接

答案 1 :(得分:0)

一个简单的示意图(只是众多可能的变体之一):

  1. 在记录模式下添加节点。群集的行为就像新节点不存在一样,但也会复制对需要驻留在此节点上的对象的更新。
  2. 确定哪些现有对象需要驻留在新节点上。在每个现有节点上创建快照并将其发送到新节点。新节点可以处理它们(插入其存储),可能是批处理模式。
  3. 在新节点上重播在录制阶段累积的更新,同时仍在记录新的更新。如果某些更新已被视为快照的一部分,则应跳过它们,否则它们将不会发生变化。
  4. 重播所有更新后,如果流程中没有错误,群集将切换到新配置(新节点完全启动)。应驻留在新节点上的对象的更新将停止发送到其旧目标。数据从旧目的地清除。
  5. 如果在此过程中的任何时候发生错误,它将被中止并可能重新重复。
  6. 可能的调整:

    • 在切换到新配置之前查询旧节点和新节点一段时间并比较返回的结果。如果有任何差异中止并进行调查。
    • 在切换到新配置之前进行完整比较(可能是校验和)。