将节点添加到Cassandra集群会导致现有节点上的CPU过载

时间:2014-10-25 09:26:30

标签: cassandra cassandra-2.0

所以,到目前为止,这是我们的设置:

  • Cassandra 2.0.10,JDK 1.7.0_65-b17
  • 6个节点(EC2 c3.8xlarge / 32核/ 60GB RAM,用于数据的EBS磁盘, 临时SSD用于提交日志等)
  • 相当重的写入负载 - 100Ks /秒
  • RF = 2,一个直流,2个机架
  • 一切正常,CPU消耗低 - 负载平均值约为4-10

现在,我们正在尝试添加节点。这会对现有节点造成沉重负担 - 例如超过100个负载平均值。群集变得没有响应,写入和读取大多数都失败了。

奇怪的观察结果是:   - 没有添加新节点CPU很低   - 如果我们关闭写入,同时在现有节点上添加新节点负载平均值,则回落到4-10并且新节点就好了

我检查了VisualVM采样,现在节点上的所有CPU基本上都被org.jboss.netty.channel.socket.nio.SelectorUtil.select()使用。

到目前为止我们尝试了什么:

  • 限制流媒体 - 没有影响
  • 禁用节点间压缩 - 无影响
  • 禁用现有节点上的自动压缩 - 无影响
  • 甚至用-Dorg.jboss.netty.epollBugWorkaround = true运行 - 没有影响

到目前为止,我们有点绝望,因为这种行为对我们来说是一种阻碍 - 我们无法承受失败的写入,我们需要动态扩展C *。

有人遇到过类似的事吗?有什么想法/提示吗?谢谢

编辑:操作系统是Ubuntu 12.04

编辑:我仍然不知道导致上述行为的原因,我仍然很好奇。 OTOH,我通过使用以下一系列操作设法添加了几个节点,没有任何中断,CPU使用量增加等:

  • set auto_bootstrap:false
  • 开始节点,加入
  • 在此新节点上运行nodetool rebuild
  • 宾果

此方案将作为我们案例的解决方案。但它看起来有点笨拙

1 个答案:

答案 0 :(得分:0)

你试过Cassandra virtual node吗? 我猜RF = 2,当你尝试添加一个新节点时,2个现有节点将非常忙于将他们的数据传输到新节点,同时响应你的大量写入负载,这可能会导致热现场问题。