【问题标题】:Multiple Cassandra node goes down多个 Cassandra 节点宕机
【发布时间】:2019-05-02 21:43:44
【问题描述】:

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

https://ibb.co/4P1T453

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

【问题讨论】:

  • 请问可以直接在问题中添加相关日志sn-ps,而不是链接到其他网站吗?
  • 您能分享一下您属于任何 Down 节点的“cassandra.yaml”文件吗?
  • WARN [main] 2019-04-24 00:05:30,075 NativeLibrary.java:187 - 无法锁定 JVM 内存 (ENOMEM)。这可能导致部分 JVM 被换出,尤其是在启用 mmapped I/O 的情况下。增加 RLIMIT_MEMLOCK 或以 root 身份运行 Cassandra。 WARN [main] 2019-04-24 00:05:30,075 StartupChecks.java:127 - 无法预加载 jemalloc 共享库以加快内存分配 WARN [main] 2019-04-24 00:05:30,076 StartupChecks.java: 160 - 未启用 JMX 来接收远程连接。请参阅 cassandra-env.sh 了解更多信息。
  • INFO [StorageServiceShutdownHook] 2019-04-24 00:02:08,962 HintsService.java:220 - 暂停提示调度 INFO [StorageServiceShutdownHook] 2019-04-24 00:02:08,975 Server.java:176 - 停止侦听 CQL 客户端 INFO [StorageServiceShutdownHook] 2019-04-24 00:02:08,976 Gossiper.java:1530 - 宣布关闭 INFO [StorageServiceShutdownHook] 2019-04-24 00:02:08,977 StorageService.java:2255 - 节点 / 10.10.52.21 状态跳转到关机
  • INFO [StorageServiceShutdownHook] 2019-04-24 00:02:10,979 MessagingService.java:984 - 等待消息服务停止 INFO [ACCEPT-/10.10.52.21] 2019-04-24 00: 02:10,980 MessagingService.java:1338 - MessagingService 已终止 accept() 线程

标签: cassandra cassandra-3.0


【解决方案1】:

所以在查看您的 pastebin 时,我看到了一些可以调整的东西。

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

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,并且没有足够的内存用于操作系统/页面缓存。事实上,我不会为堆指定超过 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;博士;总结

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

希望这会有所帮助!

【讨论】:

  • 这里是 RAM 信息:[cassandra_user@TELXCASS06 install]$ free -m total used free shared buff/cache available Mem: 128652 15324 38135 3513 75192 109055 Swap: 4095 243 3852
  • 我将完成您建议的编辑。此外,我们正在使用最大堆大小为 12 GB 的旧 GC。我们计划将 GC 更改为 G1,最大堆大小为 64GB。你认为这会有所帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多