2017-03-20 43 views
5

更新 - 短版本:
PropertyFileSnitchcassandra-topology.properties用于第一3个节点(机架1-3)指出,只有这些节点在DC1,其余的是在DC2通过指定默认值default=DC2:r1。当通过添加节点4和5来扩大集群时,这些节点的PropertyFileSnitch被配置为将它们添加到DC1以及机架4和5中,但是来自前3个节点的滑环保持不变并且因此集群是在这种不一致的状态。不平衡卡桑德拉簇

我的问题是否该群集可以重新平衡(固定)。在修复cassandra-topology.properties后,如果我进行了完整的群集重启,是否就足够了?
请告诉我如何安全地重新平衡集群。

加长版:

我是新来卡桑德拉和我开始了一个已建成的集群上运行。
我在运行Cassandra 3.0.5版的不同机架上的相同数据中心中有5个节点,其中vnodesnum_tokens: 256以及与replication = {'class': 'NetworkTopologyStrategy', 'DC1': '3'} AND durable_writes = true的密钥空间。
从历史上看,只有3个节点,并且该集群被扩展了2个附加节点。我有一个自动修复脚本,运行nodetool repair,并带有选项parallelism: parallel, primary range: false, incremental: true, job threads: 1

插入大量数据后,问题开始出现。在节点4或5上运行修复脚本时,节点2会超载:CPU使用率保持在100%,MutationStage队列增长,并且GC暂停至少需要1s,直到Cassandra进程最终死亡。修复结果通常为failed with error Stream failed (progress: 0%)

当运行在节点1,2或3的nodetool status指令I得到以下输出: Datacenter: DC2 Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.0.13 10.68 GB 256 0.0% 75e17b8a r1 UN 10.0.0.14 9.43 GB 256 0.0% 21678ddb r1 Datacenter: DC1 Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.0.10 16.14 GB 256 100.0% cf9d327f Rack1 UN 10.0.0.11 22.83 GB 256 100.0% e725441e Rack2 UN 10.0.0.12 19.66 GB 256 100.0% 95b5c8e3 Rack3

但在节点4或5运行nodetool status命令时,我得到以下输出: Datacenter: DC1 Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.0.13 10.68 GB 256 58.9% 75e17b8a Rack4 UN 10.0.0.14 9.43 GB 256 61.1% 21678ddb Rack5 UN 10.0.0.10 16.14 GB 256 60.3% cf9d327f Rack1 UN 10.0.0.11 22.83 GB 256 61.4% e725441e Rack2 UN 10.0.0.12 19.66 GB 256 58.3% 95b5c8e3 Rack3

经过进一步调查,看起来在群集放大之后,在节点1,2和3(它们也是此群集的种子)上未更新PropertyFileSnitchcassandra-topology.properties

谢谢!

回答

0

我不能告诉你的建议是否足够,而没有访问系统,但我有一些意见。所有权应该分布在集群中的所有节点之间。这意味着,如果所有5个节点正在形成一个群集,则“所有者”选项卡下所有值的总和应等于100。拥有拥有100%群集的多个节点看起来不正确。这表示每个节点都以独立模式运行,并且未加入群集。
我在第一个打印输出中看到地址10.40.0.10,而在第二个打印输出中看到10.0.0.10。看起来像一个错误的配置。另外,检查每个节点是否可以到达所有其他节点的IP地址。我看到10.0.0.13在第一个打印输出中属于“r1”,而第二个属于“Rack4”。
为了简化和简化配置,您可以配置一个数据中心(例如,DC1)和一个机架(例如Rack1),无论其物理分布如何,全部5个节点。

+0

你说得对,**这是错误配置**。前3个节点(机架1-3)的* PropertyFileSnitch *'cassandra-topology.properties'表明,只有这些节点在DC1中,其他节点在DC2中通过指定默认值default = DC2:r1来实现。当通过添加节点4和5扩大集群时,这些节点的* PropertyFileSnitch *被配置为将它们添加到DC1以及机架4和5中,但前3个节点的滑环仍保持不变,因此集群在这种不一致的状态。我正试图找出如何安全地**重新配置它。 – alien5

+0

感谢您指出IP错误,它在格式化帖子宽度时滑落。这些节点位于同一个数据中心并且可以互相访问。他们可以看到对方的负载,但由于配置不当导致负载分布不均。 – alien5

1

在搜索了几个在线资源后,我发现了一些可能的解决方案。我会在这里发布它们,以便每个人都可以访问它。

实用卡桑德拉:开发者的方法

环查看节点之间是不同的
当环观点 节点之间是不同的,它从来都不是一件好事。从这种状态中恢复 也没有简单的方法。要恢复的唯一方法是执行完整群集 重新启动。滚动重启将不起作用,因为来自 的Gossip协议不良节点会通知新启动的良好节点的不良 状态。完全集群重新启动并首先启动好节点 应使集群恢复正常状态。

同样的解决方案也可以发现,在DataStax文档View of ring differs between some nodes

我也发现了类似的问题上Apache Cassandra Community。社区用户线程的答案是:

发生了什么事情,您现在在您的 群集中有两个数据中心。他们复制信息的方式取决于您的键盘空间设置。关于你的过程,我不认为 这样做是安全的。我会首先解散节点4和5,以便您的群集返回1个有3个节点的数据中心,然后再次依次将它们添加到 ,确保Snitch中的配置为 正确的配置。