多个Cassandra节点出现故障

时间:2019-05-02 05:55:12

标签: cassandra cassandra-3.0

我们有一个跨2个不同数据中心的12节点cassandra集群。我们正在通过网络应用程序将数据从sql DB迁移到cassandra,还有另一个.net应用程序可以从cassandra读取数据。最近关闭,我们看到一个或另一个节点发生故障(nodetool状态显示DN,并且该服务已停止)。以下是nodetool状态的输出。我们必须启动该服务才能再次使它运行,但它又会停止。

https://ibb.co/4P1T453

日志路径:https://pastebin.com/FeN6uDGv

1 个答案:

答案 0 :(得分:1)

因此,在浏览您的粘贴框时,我看到一些可以调整的东西。

首先,我有把握确保这是您的主要问题:

Unable to lock JVM memory (ENOMEM). This can result in part of the JVM being swapped out,
especially with mmapped I/O enabled. Increase RLIMIT_MEMLOCK or run Cassandra as root.

来自GNU Error Codes

  

宏:int ENOMEM

     

“无法分配内存。”系统无法分配更多虚拟内存   内存,因为它的容量已满。

-Xms12G, -Xmx12G, -Xmn3000M,

您的实例上有多少RAM?从我看到的情况来看,您的节点因OOM(内存不足错误)而垂死。我的猜测是您为堆分配了太多的RAM,而OS /页面缓存不足。实际上,我不会为堆指定超过50%-60%的RAM。

例如,我主要在16GB的RAM上构建实例,并且我发现最大10GB的堆大约与您想要的一样大。

-XX:+UseParNewGC, -XX:+UseConcMarkSweepGC

实际上,当您使用CMS GC时,最大堆大小不会超过8GB。

Maximum number of memory map areas per process (vm.max_map_count) 65530 is too low,
recommended value: 1048575, you can change it with sysctl.

这表示您尚未调整limits.confsysctl.conf。查看指南(DSE 6.0 - Recommended Production Settings),但通常最好将以下内容添加到这些文件中:

/etc/limits.conf

* - memlock unlimited
* - nofile 100000
* - nproc 32768
* - as unlimited

/etc/sysctl.conf

vm.max_map_count = 1048575

注意:调整sysctl.conf后,您将需要运行sudo sysctl -p或重新启动。

Is swap disabled? : false,

要禁用交换。如果Cassandra开始将RAM的内容交换到磁盘,事情将会变得很慢。运行swapoff -a,然后编辑/etc/fstab并删除所有交换条目。

tl; dr;摘要

  • 将您的初始和最大堆大小设置为8GB(可以使用新的堆大小)。
  • 适当修改limits.confsysctl.conf文件。
  • 禁用交换。
  • 获得最新版本的3.11(3.11.4)也是一个好主意。

希望这会有所帮助!