Cassandra 如何在不停机的情况下将单个令牌群集迁移到新的vnodes群集?
我们有Cassandra集群,每个节点有一个令牌,总共22个节点,每个节点的平均负载为500Gb。它具有主键空间的SimpleStrategy和SimpleSnitch 我们需要将所有数据迁移到新的数据中心,并在不停机的情况下关闭旧的数据中心。新集群有28个节点。我想在上面加上vnodes 我正在考虑以下过程:Cassandra 如何在不停机的情况下将单个令牌群集迁移到新的vnodes群集?,cassandra,data-migration,Cassandra,Data Migration,我们有Cassandra集群,每个节点有一个令牌,总共22个节点,每个节点的平均负载为500Gb。它具有主键空间的SimpleStrategy和SimpleSnitch 我们需要将所有数据迁移到新的数据中心,并在不停机的情况下关闭旧的数据中心。新集群有28个节点。我想在上面加上vnodes 我正在考虑以下过程: 将旧集群迁移到VNode 使用vnode设置新集群 将节点从新集群添加到旧集群,并等待它平衡所有节点 将客户端切换到新群集 逐个从旧集群中解除节点的使用 但是有很多技术细节。首先,我应该
注意:一个风险是,在低一致性级别对旧节点进行的写入可能会丢失。为了防止这种情况发生,您可以在切换到新DC后在CL.LOCAL_QUORUM处写入。还有一个小窗口,写操作可能会丢失(在步骤3和步骤4之间)。如果这很重要,您可以在停用旧节点之前运行修复,以确保在高一致性级别上没有丢失或写入。如果您试图迁移到具有VNode的新群集,您不需要更改分区器吗。文档中说,在不同分区之间迁移数据不是一个好主意。pro提示:首先在测试/非生产环境中尝试。是的,这就是我现在正在做的。在低一致性级别写入旧节点可能会丢失。你能解释原因吗?不知道这是否重要,但我们不会覆盖旧值,我们总是添加新数据。我是这样看的:1。DC0和DC1已启动,客户端正在使用DC0,数据流为DC0->DC1 2。切换:客户端使用DC1,数据流为DC0->DC1和DC1->DC03。旧数据传输到DC1,流只是DC1->DC04。设置DC0:0,DC0和DC1之间没有数据传输事实上,我看到在第2步从DC1读取的数据可能看不到仍然只在DC0中的数据,但我们可以接受这一点。但它并没有丢失。在步骤3中,即使客户端连接到DC1中的节点,也不能保证在低一致性级别向DC1中的节点写入值。例如,如果在CL.ONE写入,DC1中的所有副本可能会失败(例如,由于太忙,因此它们会放弃写入),并且写入操作只会在DC0中的节点上结束。当您设置DC0:0时,即使已向客户端确认,此写入也会丢失。知道datastax为什么说不再这样做了吗?-这里也没有,分区器的选择与VNode无关。