在Cassandra 1.2.8中启用vNodes

在Cassandra 1.2.8中启用vNodes,cassandra,nodetool,Cassandra,Nodetool,我有一个4节点集群,我已经将所有节点从旧版本升级到Cassandra 1.2.8。群集中存在的总数据大小为8 GB。现在我需要在集群的所有4个节点上启用VNode,而不需要任何停机时间。我该怎么做;博士 否一旦编辑配置,您就可以 问题是,启用vNode意味着大量数据被随机重新分配(文档中的说法类似于conf/cassandra.yaml中的经典“nodetool move”),您需要注释掉initial_token参数,并启用num_tokens参数(我相信默认为256)。对每个节点执行此操作。

我有一个4节点集群,我已经将所有节点从旧版本升级到Cassandra 1.2.8。群集中存在的总数据大小为8 GB。现在我需要在集群的所有4个节点上启用VNode,而不需要任何停机时间。我该怎么做;博士

一旦编辑配置,您就可以


问题是,启用vNode意味着大量数据被随机重新分配(文档中的说法类似于
conf/cassandra.yaml中的经典“nodetool move”

),您需要注释掉
initial_token
参数,并启用
num_tokens
参数(我相信默认为256)。对每个节点执行此操作。然后,您必须在每个节点上重新启动cassandra服务。并等待数据在整个群集中重新分布。8 GB不应花费太多时间(前提是您的节点都在同一个群集中),并且读取请求仍然可以正常工作,尽管在完成数据重新分发之前,您可能会看到性能下降

编辑:以下是迁移数据的潜在策略:

  • 使群集的两个节点退役。令牌空间应在其他两个节点之间以50-50的比例分配
  • 在两个已停用的节点上,删除现有数据,并使用不同的群集名称和启用的
    num_令牌
    参数重新启动Cassandra守护程序
  • 将8 GB的数据从旧集群迁移到新集群。您可以用python编写一个快速脚本来实现这一点。由于数据量足够小,这应该不会花费太多时间
  • 数据迁移到新集群后,从旧集群中停用两个旧节点。删除数据并使用新集群名称和
    num_tokens
    参数重新启动它们上的Cassandra。它们将引导,数据将从新集群中的两个现有节点流式传输。最好只引导一个节点一次

通过这些步骤,您永远不会遇到服务完全停机的情况。您将在一段时间内以较低的容量运行,但由于8GB的数据量不大,您可能能够足够快地实现这一点。

正如Nikhil所说,您需要增加num_令牌并重新启动每个节点。这可以一次完成立刻,没有停机时间


但是,增加num_令牌不会导致任何数据重新分发,因此您没有真正使用vnode。您必须通过shuffle(在Lyuben发布的链接中解释,这通常会导致问题)手动重新分发数据,方法是关闭每个节点并重新引导(这将暂时使集群极不平衡,一个节点拥有所有数据),或者像创建新的数据中心一样临时复制硬件。后者是我所知道的唯一可靠的方法,但它确实需要额外的硬件。

增加num_标记不会导致任何数据重新分发。@Richard对。我的错。