Cassandra 错误信息:由于本地暂停,不会将节点标记为下线。为什么?

9

我有6个节点,其中1个是Solr,5个是Spark节点,使用Datastax。我的集群在类似亚马逊EC2的服务器上,带有EBS卷。每个节点都有3个EBS卷,使用LVM组成一个逻辑数据磁盘。在我的OPS中心中,同一节点经常变得无响应,导致我的数据系统连接超时。我的数据量约为400GB,有3个副本。我有20个流式作业,每分钟批处理间隔一次。以下是我的错误信息:

/var/log/cassandra/output.log:WARN 13:44:31,868 Not marking nodes down due to local pause of 53690474502 > 5000000000
/var/log/cassandra/system.log:WARN [GossipTasks:1] 2016-09-25 16:40:34,944 FailureDetector.java:258 - Not marking nodes down due to local pause of 64532052919 > 5000000000 
/var/log/cassandra/system.log:WARN [GossipTasks:1] 2016-09-25 16:59:12,023 FailureDetector.java:258 - Not marking nodes down due to local pause of 66027485893 > 5000000000 
/var/log/cassandra/system.log:WARN [GossipTasks:1] 2016-09-26 13:44:31,868 FailureDetector.java:258 - Not marking nodes down due to local pause of 53690474502 > 5000000000

编辑:

以下是我更具体的配置。我想知道是否有做错的地方,如果有,如何详细了解问题并修复它?

输出堆设置为

MAX_HEAP_SIZE="16G"
HEAP_NEWSIZE="4G"

当前堆:

[root@iZ11xsiompxZ ~]# jstat -gc 11399
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
 0.0   196608.0  0.0   196608.0 6717440.0 2015232.0 43417600.0 23029174.0 69604.0 68678.2  0.0    0.0     1041  131.437   0      0.000  131.437
[root@iZ11xsiompxZ ~]# jmap -heap 11399
Attaching to process ID 11399, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.102-b14

using thread-local object allocation.
Garbage-First (G1) GC with 23 thread(s)

堆配置:

MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 51539607552 (49152.0MB)
   NewSize                  = 1363144 (1.2999954223632812MB)
   MaxNewSize               = 30920409088 (29488.0MB)
   OldSize                  = 5452592 (5.1999969482421875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 16777216 (16.0MB)

堆使用情况:

G1 Heap:
   regions  = 3072
   capacity = 51539607552 (49152.0MB)
   used     = 29923661848 (28537.427757263184MB)
   free     = 21615945704 (20614.572242736816MB)
   58.059545404588185% used
G1 Young Generation:
Eden Space:
   regions  = 366
   capacity = 6878658560 (6560.0MB)
   used     = 6140461056 (5856.0MB)
   free     = 738197504 (704.0MB)
   89.26829268292683% used
Survivor Space:
   regions  = 12
   capacity = 201326592 (192.0MB)
   used     = 201326592 (192.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation:
   regions  = 1443
   capacity = 44459622400 (42400.0MB)
   used     = 23581874200 (22489.427757263184MB)
   free     = 20877748200 (19910.572242736816MB)
   53.04110320109241% used

40076 interned Strings occupying 7467880 bytes.

我不知道为什么会发生这种情况。非常感谢。


1
(这主要是根据一些模糊的记忆)我认为节点存在垃圾回收问题。 据我所知,围绕“由于本地暂停而不标记节点下线”的逻辑是为了区分是因为其他节点真的宕机/无响应而没有收到更新,还是该节点本身受到了大量垃圾回收/其他原因无法响应。 - Eugen Constantin Dinca
@EugenConstantinDinca 谢谢你的回复,我同意你的推理,只是不知道我做错了什么,以及如何追踪更详细的问题/解决方案?我在问题中添加了一些更多的细节,如果你能看一下就太好了。 - peter
1个回答

4
您看到的消息“由于本地暂停而不标记节点下降”是由JVM暂停引起的。虽然您在发布JVM信息方面做了一些好事,但通常一个好的起点只是查看例如/var/log/cassandra/system.log的内容,检查诸如ERRORWARN等内容。还可以通过grepping GCInspector来检查GC事件的长度和频率。

这里的工具,如nodetool tpstats,可以帮助您查看是否备份或删除了突变,阻止了刷新写入器等等。

这里的文档有一些需要检查的好东西:https://docs.datastax.com/en/landing_page/doc/landing_page/troubleshooting/cassandra/cassandraTrblTOC.html

还要检查您的节点是否具有推荐的生产设置,这是经常被忽视的事情:

http://docs.datastax.com/en/landing_page/doc/landing_page/recommendedSettingsLinux.html

此外需要注意的一点是,Cassandra 对 I/O 敏感,而“普通”的 EBS 可能不够快以满足你在这里的需求。再加入 Solr,当你同时进行 Cassandra 压缩和 Lucene 合并时,可能会出现大量 I/O 冲突。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接