Cassandra 如何在不停机的情况下将单个令牌群集迁移到新的vnodes群集?

Cassandra 如何在不停机的情况下将单个令牌群集迁移到新的vnodes群集?,cassandra,data-migration,Cassandra,Data Migration,我们有Cassandra集群,每个节点有一个令牌,总共22个节点,每个节点的平均负载为500Gb。它具有主键空间的SimpleStrategy和SimpleSnitch 我们需要将所有数据迁移到新的数据中心,并在不停机的情况下关闭旧的数据中心。新集群有28个节点。我想在上面加上vnodes 我正在考虑以下过程: 将旧集群迁移到VNode 使用vnode设置新集群 将节点从新集群添加到旧集群,并等待它平衡所有节点 将客户端切换到新群集 逐个从旧集群中解除节点的使用 但是有很多技术细节。首先,我应该

我们有Cassandra集群,每个节点有一个令牌,总共22个节点,每个节点的平均负载为500Gb。它具有主键空间的SimpleStrategy和SimpleSnitch

我们需要将所有数据迁移到新的数据中心,并在不停机的情况下关闭旧的数据中心。新集群有28个节点。我想在上面加上vnodes

我正在考虑以下过程:

  • 将旧集群迁移到VNode
  • 使用vnode设置新集群
  • 将节点从新集群添加到旧集群,并等待它平衡所有节点
  • 将客户端切换到新群集
  • 逐个从旧集群中解除节点的使用
  • 但是有很多技术细节。首先,我应该在vnodes迁移之后洗牌旧集群吗?那么,切换到网络拓扑策略和闲聊财产文件告密的最佳方式是什么?我想切换到NetworkTopologyStrategy,因为新集群有两个不同的机架,带有单独的电源/网络交换机

    我应该在vnodes迁移之后洗牌旧集群吗

    你不需要。如果从每个节点一个令牌变为256(默认值),则每个节点将其范围拆分为256个相邻的、大小相同的范围。这不会影响数据所在的位置。但这意味着,当您在新DC中的新节点中引导时,它将在整个过程中保持平衡

    切换到网络拓扑策略和闲聊属性文件告密的最佳方式是什么

    困难在于切换复制策略通常是不安全的,因为需要在集群中移动数据。NetworkToplogyStrategy(NTS)将在不同的节点上放置数据,如果您告诉它节点位于不同的机架中。因此,您应该在添加新节点之前移动到NTS

    在将旧集群升级到vnodes(上面的步骤1)之后,下面是一种执行此操作的方法:

    1a。在属性文件中列出DC0中的所有现有节点。列出DC1中的新节点及其正确的机架

    1b。将复制策略更改为NTS,选项为DC0:3(或您当前的复制系数是多少)和DC1:0

    然后,要添加新节点,请执行以下过程:。请记住将令牌数设置为256,因为默认情况下它将是1

    在步骤5中,应将DC0的复制系数设置为0,即将复制选项更改为DC0:0、DC1:3。现在,这些节点没有被使用,因此停用将不会流式传输任何数据,但您仍然应该这样做,而不是关闭它们的电源,以便将它们从环中删除


    注意:一个风险是,在低一致性级别对旧节点进行的写入可能会丢失。为了防止这种情况发生,您可以在切换到新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无关。