1

我有一个 4 节点集群,我已将所有节点从旧版本升级到 Cassandra 1.2.8。集群中存在的总数据大小为 8 GB。现在我需要在集群的所有 4 个节点上启用 vNode,而无需任何停机。我怎样才能做到这一点?

4

3 回答 3

1

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

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

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

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

于 2013-09-30T17:27:23.560 回答
1

正如 Nikhil 所说,您需要增加 num_tokens 并重新启动每个节点。这可以一次完成,无需停机。

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

于 2013-09-30T18:41:01.270 回答
1
于 2013-09-30T08:13:02.167 回答