无法将令牌数从1更改为256

时间:2015-03-30 02:52:58

标签: cassandra cassandra-2.0 nodetool

我正在使用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

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

2 个答案:

答案 0 :(得分:3)

从非Vnodes切换到Vnode对于C *而言是一个稍微棘手的命题,之前执行此切换(shuffle)的机制因不稳定性而略显臭名昭着。

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

答案 1 :(得分: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 dsekill <pid>
  • 查找dse cassandra的流程ID
  • 一旦节点退役成功,请转到其余节点之一并使用nodetool status检查cassandra集群的状态。退役节点不应出现在列表中。
  • 转到其中一个有效的seed_providers并输入nodetool rebuild
  • 在解除授权的节点上,打开cassandra.yaml文件并取消注释num_tokens:256。保存并关闭该文件。如果此节点最初是种子提供者,请确保从种子中删除它的ip地址:来自cassandra.yaml文件的列表。如果不这样做,它所拥有的集群拓扑的陈旧信息将阻碍新种子节点提供的新拓扑。成功启动后,可以在种子列表中再次添加。
  • 使用opscenter中的相应选项重新启动剩余的群集,或者在每个节点上手动停止cassandra并重新启动它。
  • 最后,使用dse cassandra命令启动cassandra。

这应该有用。