6

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

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

我正在考虑以下过程:

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

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

4

2 回答 2

5

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

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

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

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

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

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

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

然后添加新节点,请按照此处的流程进行操作: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。现在这些节点没有被使用,因此退役不会流式传输任何数据,但您仍然应该这样做,而不是关闭它们,以便将它们从环中移除。

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

于 2013-03-12T15:40:59.820 回答
-1

如果您尝试使用 vnode 迁移到新集群,您是否需要更改 Partitioner。文档说,在不同的 Partitioner 之间迁移数据并不是一个好主意。

于 2013-07-22T00:30:44.750 回答