Cassandra 2.1.2 节点卡在加入集群

Posted

技术标签:

【中文标题】Cassandra 2.1.2 节点卡在加入集群【英文标题】:Cassandra 2.1.2 node stuck on joining the cluster 【发布时间】:2014-12-02 14:12:36 【问题描述】:

我正在尝试但未能将新的(很旧,但已被淘汰)节点加入现有集群。

当前集群由 2 个节点组成,运行 C* 2.1.2。我用 2.1.2 启动第三个节点,它进入加入状态,它引导,即流一些数据,如 nodetool netstats 所示,但一段时间后,它卡住了。从那时起,没有任何东西被流式传输,新节点保持在加入状态。我重新启动节点两次,每次它流式传输更多数据,但随后又卡住了。 (我目前正处于这样的第三轮)。

其他事实:

我在任何节点的日志中都看不到任何错误。 连接似乎很好,我可以通过各种方式 ping、netcat 到端口 7000。 每个运行节点有 267 GB 负载,复制 2,16 个令牌。 新节点的负载现在约为 100GB 我猜这个节点在经过几轮重启后,最终会从正在运行的节点中吸收所有数据并加入集群。但绝对不是它应该的工作方式。

编辑:我发现了更多信息:

引导过程在流式传输某个表的中间停止,总是在发送了 10MB 的某个 SSTable 之后,例如:

$ nodetool netstats | grep -P -v "bytes\(100" Mode: NORMAL Bootstrap e0abc160-7ca8-11e4-9bc2-cf6aed12690e /192.168.200.16 Sending 516 files, 124933333900 bytes total /home/data/cassandra/data/leadbullet/page_view-2a2410103f4411e4a266db7096512b05/leadbullet-page_view-ka-13890-Data.db 10485760/167797071 bytes(6%) sent to idx:0/192.168.200.16 Read Repair Statistics: Attempted: 2016371 Mismatch (Blocking): 0 Mismatch (Background): 168721 Pool Name Active Pending Completed Commands n/a 0 55802918 Responses n/a 0 425963

我无法诊断错误,如果有任何帮助,我将不胜感激!

【问题讨论】:

你在join过程中一直在看JVM吗?堆是否已充分利用,您是否在 C* 日志中看到任何长 GC? 您是否在重新添加之前停用了该节点? Gossip 偶尔会记住节点,并在以后添加节点时引起麻烦。 @RussS,是的,我看过了。而且看起来还不错。堆使用量达到最大值,但随后它被正确地 CMS'ed 到 1GB。 @mildewey,在重新添加之前,我确实停用了该节点。 @zarzyk 你检查过你的system.log吗?有什么不寻常的消息吗? 【参考方案1】:
    尝试使用正确的端口从一个节点远程登录到另一个节点。 确保您加入了正确的名称集群。 尝试使用:nodetool repair 您可能正在 ping 外部 IP 地址,而您的集群使用内部 IP 地址进行通信。 如果您在 Amazon AWS 上运行,请确保在两个内部 IP 地址上都打开了防火墙。

【讨论】:

以上是关于Cassandra 2.1.2 节点卡在加入集群的主要内容,如果未能解决你的问题,请参考以下文章

DCE Cassandra 3.9 在加入现有集群期间创建二级索引缓慢

Nutanix集群的Cassandra服务

Cassandra 集群管理-添加新节点

如何将第三个节点添加到 2 节点 Cassandra 集群?

cassandra 调试问题

Cassandra集群:一,搭建一个三节点的集群