【问题标题】:Is it possible to add a node to a cluster, where data is replicated synchronously?是否可以将节点添加到同步复制数据的集群中?
【发布时间】:2018-01-19 04:14:37
【问题描述】:
如果我有将数据写入存储的系统。
在集群设置中,如果数据是同步复制的,即我收到更改跨所有节点更新的数据的请求,然后返回响应。
在这种情况下是否可以动态添加节点?
也就是说,假设有 2 个节点,并且在该集群上执行了一些事务。我可以添加一个集群仍在运行的第三个节点吗?
如果我这样添加一个新节点,是不是破坏了集群的强一致性?
【问题讨论】:
标签:
distributed-computing
distributed
distributed-system
consistent-hashing
【解决方案2】:
一个简单的示意性示例(只是许多可能的变体之一):
- 在录制模式下添加了一个节点。集群的行为就像新节点不存在一样,但也会将需要驻留在其上的对象的更新复制到此节点。
- 确定哪些现有对象需要驻留在新节点上。在每个现有节点上创建快照并将其发送到新节点。新节点可能以批处理模式处理它们(插入到其存储中)。
- 在记录阶段累积的更新将在新节点上重播,而新的更新仍在记录中。如果某些更新已计入快照的一部分,则应跳过它们或不进行任何更改。
- 重播所有更新后,如果过程中没有错误,集群将切换到新配置(新节点完全启动)。对应该驻留在新节点上的对象的更新停止发送到它们的旧目的地。从旧目的地清除数据。
- 如果在此过程中的任何时候发生错误,它会被中止并可能重新重复。
可能的调整:
- 在切换到新配置之前查询旧节点和新节点一段时间并比较返回的结果。如果有任何差异,请中止并进行调查。
- 在切换到新配置之前进行全面比较(可能是校验和)。