代码之家  ›  专栏  ›  技术社区  ›  relgames

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

  •  6
  • relgames  · 技术社区  · 13 年前

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

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

    我正在考虑以下过程:

    1. 将旧群集迁移到vnode
    2. 使用vnode设置新群集
    3. 将新集群中的节点添加到旧集群中,并等待它平衡所有节点
    4. 将客户端切换到新群集
    5. 逐个从旧集群中停用节点

    但也有很多技术细节。首先,我应该在vnodes迁移后对旧集群进行洗牌吗?那么,切换到NetworkTopologyStrategy和GossippingPropertyFileSnitch的最佳方式是什么?我想切换到NetworkTopologyStrategy,因为新集群有两个不同的机架,带有单独的电源/网络交换机。

    2 回复  |  直到 13 年前
        1
  •  5
  •   Richard    13 年前

    在vnodes迁移之后,我应该对旧集群进行洗牌吗?

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

    切换到NetworkTopologyStrategy和GossippingPropertyFileSnitch的最佳方式是什么?

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

    在您将旧集群升级到vnode(上面的步骤1)之后,这里有一种方法可以做到这一点:

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

    1b之间。将复制策略更改为NTS,选项为DC0:3(或您当前的复制因子)和DC1:0。

    然后,要添加新节点,请按照此处的流程进行操作: http://www.datastax.com/docs/1.2/operations/add_replace_nodes#adding-a-data-center-to-a-cluster 。请记住将令牌的数量设置为256,因为默认情况下为1。

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

    请注意,一个风险是,以低一致性级别对旧节点进行的写入可能会丢失。为了防止这种情况,您可以在切换到新的DC后在CL.LOCAL_QUORUM上写作。仍然有一个小窗口,写操作可能会丢失(在步骤3和4之间)。如果这很重要,您可以在停用旧节点之前运行修复,以确保不会发生丢失或以高一致性级别写入。

        2
  •  -1
  •   deepti.naidu    13 年前

    如果您正试图迁移到一个带有vnode的新集群,您不需要更改Partitioner吗。文件指出,在不同的分区之间迁移数据不是一个好主意。