gpt4 book ai didi

cassandra - 多个 Cassandra 节点出现故障

转载 作者:行者123 更新时间:2023-12-02 20:00:43 27 4
gpt4 key购买 nike

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

https://ibb.co/4P1T453

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

最佳答案

因此,在查看您的 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 :

Macro: int ENOMEM

“Cannot allocate memory.” The system cannot allocate more virtual memory because its capacity is full.

-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) 也是一个好主意。

希望这有帮助!

关于cassandra - 多个 Cassandra 节点出现故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com