2

我正在使用 Cassandra 2.0,并且集群已经设置了 3 个节点。Nodetool 状态和环显示所有三个节点。我已经为所有节点指定了令牌。

我按照以下步骤更改了一个节点中的配置:

1) sudo service cassandra stop
2) 更新 cassandra.yaml (更新 thrift_framed_transport_size_in_mb)
3) sudo srevice cassandra start

具体没有启动成功,system.log 显示如下异常:

org.apache.cassandra.exceptions.ConfigurationException:无法将令牌数从 1 更改为 256

在不丢失节点或集群中现有数据的情况下重新启动节点的最佳机制是什么?

4

2 回答 2

3

从非 Vnode 切换到 Vnode 对 C* 来说是一个有点棘手的提议,并且之前执行此切换(shuffle)的机制因不稳定而臭名昭著。

最简单的方法是在启用 vnode 的情况下启动新节点(在新数据中心中),并通过修复将数据传输到这些节点。

于 2015-03-30T13:16:32.843 回答
2

当我尝试将令牌数量从 1 更改为 256 时,我也遇到了这个错误。为了解决这个问题,我尝试了以下方法:

场景:我有 4 节点 DSE (4.6.1) cassandra 集群。假设他们的 FQDN 是:d0.cass.org、d1.cass.org、d2.cass.org、d3.cass.org。这里,节点 d0.cass.org 和 d1.cass.org 是种子提供者。我的目标是通过更改 cassandra.yaml 文件中的 num_token 属性来启用节点。

每个节点要遵循的程序(一次一个):

  • 在一个节点上运行 nodetool decommission:nodetool decommission
  • 杀死已退役节点上的 cassandra 进程。ps ax | grep dse使用和查找 dse cassandra 的进程 IDkill <pid>
  • 节点退役成功后,转到其余节点之一并使用 . 检查 cassandra 集群的状态nodetool status。停用的节点不应出现在列表中。
  • 转到活动的seed_providers 之一并输入nodetool rebuild
  • 在停用的节点上,打开 cassandra.yaml 文件并取消注释 num_tokens: 256。保存并关闭文件。如果此节点最初是种子提供者,请确保从种子中删除它的 IP 地址:来自 cassandra.yaml 文件的列表。如果不这样做,它所拥有的关于集群拓扑的陈旧信息将阻碍新种子节点提供的新拓扑。启动成功后,可以再次添加到种子列表中。
  • 使用 opscenter 中的相应选项重新启动剩余的集群,或者手动停止每个节点上的 cassandra 并重新启动它。
  • dse cassandra最后,使用命令在其上启动 cassandra 。

这应该有效。

于 2015-11-05T22:20:03.310 回答