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 之间)。如果它很重要,您可以在停用旧节点之前运行修复以保证不丢失或以高一致性级别写入。