多个 Cassandra 节点出现故障

Par*_*dhi 2 cassandra cassandra-3.0

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

https://ibb.co/4P1T453
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*ron 5

因此,在查看您的 Pastebin 时,我发现了一些可以调整的内容。

\n\n

首先,我有理由确定这是您的主要问题:

\n\n
Unable to lock JVM memory (ENOMEM). This can result in part of the JVM being swapped out,\nespecially with mmapped I/O enabled. Increase RLIMIT_MEMLOCK or run Cassandra as root.\n
Run Code Online (Sandbox Code Playgroud)\n\n

来自GNU 错误代码

\n\n
\n

宏:int ENOMEM

\n\n

\xe2\x80\x9c无法分配内存。\xe2\x80\x9d 系统无法分配更多虚拟内存,因为其容量已满。

\n
\n\n
-Xms12G, -Xmx12G, -Xmn3000M,\n
Run Code Online (Sandbox Code Playgroud)\n\n

您的实例有多少 RAM?据我所知,您的节点因 OOM(内存不足错误)而死亡。我的猜测是,您为堆指定了过多的 RAM,而操作系统/页面缓存的内存不足。事实上,我不会将超过 50%-60% 的 RAM 分配给堆。

\n\n

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

\n\n
-XX:+UseParNewGC, -XX:+UseConcMarkSweepGC\n
Run Code Online (Sandbox Code Playgroud)\n\n

事实上,当您使用 CMS GC 时,我不会将最大堆大小设置为高于 8GB。

\n\n
Maximum number of memory map areas per process (vm.max_map_count) 65530 is too low,\nrecommended value: 1048575, you can change it with sysctl.\n
Run Code Online (Sandbox Code Playgroud)\n\n

这意味着您还没有调整您的limits.confsysctl.conf。检查指南(DSE 6.0 - 推荐的生产设置),但通常最好将以下内容添加到这些文件中:

\n\n

/etc/limits.conf

\n\n
* - memlock unlimited\n* - nofile 100000\n* - nproc 32768\n* - as unlimited\n
Run Code Online (Sandbox Code Playgroud)\n\n

/etc/sysctl.conf

\n\n
vm.max_map_count = 1048575\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
Is swap disabled? : false,\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

太长;博士;概括

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

希望这可以帮助!

\n