1

如果我有将数据写入存储的系统。是否可以将节点添加到数据同步复制的群集?

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

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

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

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

回答

0

我相信你正在寻找的是一致性散列(Wikipedia)它允许你以一种方式分配你的内存,使数据在多个节点之间正确地复制,并且添加或删除一个节点的开销较少,我建议你去通过链接The simple magic of consistent hashing

0

简单化和原理的例子(只是许多可能的变体之一):

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

可能的调整:

  • 查询都老了一段时间切换到新的配置之前,新的节点,并比较结果返回。如有任何差异中止和调查。
  • 在切换到新配置之前进行全面比较(可能是校验和)。
相关问题