我有一个4节点集群,我已将旧版本的所有节点升级到Cassandra 1.2.8。群集中存在的总数据大小为8 GB。现在我需要在集群的所有4个节点上启用vNode,而不会出现任何停机。我怎么能这样做?
答案 0 :(得分:1)
答案 1 :(得分:1)
在conf/cassandra.yaml
中,您需要注释initial_token
参数,并启用num_tokens
参数(默认为256我相信)。为每个节点执行此操作。然后,您必须在每个节点上重新启动cassandra服务。等待数据在整个集群中重新分配。 8 GB不应占用太多时间(假设您的节点都在同一个集群中),并且读取请求仍然可以正常运行,但在重新分发数据完成之前,您可能会看到性能下降。
编辑:以下是迁移数据的潜在策略:
num_token
参数重新启动Cassandra守护程序。num_tokens
参数删除数据并重新启动Cassandra。它们将进行引导,数据将从新集群中的两个现有节点进行流式处理。优选地,一次仅引导一个节点。通过这些步骤,您永远不会遇到服务完全停机的情况。您将在一段时间内以较低的容量运行,但是由于8GB不是大量数据,因此您可以很快地实现这一点。
答案 2 :(得分:1)
正如Nikhil所说,你需要增加num_tokens并重启每个节点。这可以一次完成,没有停机时间。
但是,增加num_tokens不会导致任何数据重新分发,因此您实际上并未使用vnode。您必须通过shuffle手动重新分发它(在Lyuben发布的链接中解释,这通常会导致问题),通过停用每个节点并自动引导(这将暂时使您的群集与拥有所有数据的一个节点非常不平衡),或者通过像创建新数据中心一样临时复制硬件。后者是我所知道的唯一可靠的方法,但它确实需要额外的硬件。