我们在cassandra集群中的commitlogs正在增加,并且没有被轮换。甚至提示目录也会继续增长,几个小时后,节点会完全填满。我们必须手动刷新和清空节点,以保持集群正常运行。我们在Cassandra系统日志中不断看到以下错误。
ERROR [CommitLogArchiver:1] 2023-07-28 17:27:19,289 CassandraDaemon.java:244 - Exception in thread Thread[CommitLogArchiver:1,5,main]
java.lang.RuntimeException: java.io.IOException: Exception while executing the command: ln /cassandra/commitlog/CommitLog-6-*****.log /cassandra/commitlog/CommitLog-6-*****.log, command error Code: 1, command output: ln: failed to create hard link ‘/cassandra/commitlog/CommitLog-6-****.log’: File exists
字符串
更新1:更多日志
...
at org.apache.cassandra.concurrent.NamedThreadFactory.lambda$threadLocalDeallocator$0(NamedThreadFactory.java:84) [apache-cassandra-3.11.10.jar:3.11.10]
at java.lang.Thread.run(Thread.java:750) ~[na:1.8.0_342]
Caused by: java.io.IOException: Exception while executing the command: ln /cassandra/commitlog/CommitLog-6-1690545624564.log /cassandra/commitlog/CommitLog-6-1690545624564.log, command error Code: 1, command output: ln: failed to create hard link ‘/cassandra/commitlog/CommitLog-6-1690545624564.log’: File exists
.
.
.
WARN [CompactionExecutor:80864] 2023-07-28 18:31:35,403 BigTableWriter.java:211 - Writing large partition *****:***_490267998772576797 (124.548MiB) to sstable /cassandra/data1/**/event_source-0b510d8003e811ecb8bb3d20c002593b/md-15942-big-Data.db
INFO [ReadStage-3] 2023-07-28 18:32:03,841 NoSpamLogger.java:91 - Maximum memory usage reached (536870912), cannot allocate chunk of 1048576
WARN [CompactionExecutor:80864] 2023-07-28 18:32:36,245 BigTableWriter.java:211 - Writing large partition ***/***:2023-07-28:61:com.Ticket (112.067MiB) to sstable /cassandra/data1/****/****-869ff7d3f4d711ed9031839535e0fa8e/md-1381-big-Data.db
...
INFO [HintsDispatcher:8394] 2023-07-28 18:44:12,914 HintsDispatchExecutor.java:282 - Finished hinted handoff of file 7c57e613-f0c6-4f67-9da5-3cfaad15de29-1690397494422-1.hints to endpoint /100.125.114.117: 7c57e613-f0c6-4f67-9da5-3cfaad15de29
INFO [ReadStage-2] 2023-07-28 18:47:05,188 NoSpamLogger.java:91 - Maximum memory usage reached (536870912), cannot allocate chunk of 1048576
WARN [CompactionExecutor:80867] 2023-07-28 18:47:24,120 BigTableWriter.java:211 - Writing large partition ***/event_source:comTicket:***_998981534549995600 (166.860MiB) to sstable /cassandra/data1/****/***-0b510d8003e811ecb8bb3d20c002593b/md-15947-big-Data.db
...
型
有什么帮助吗?
1条答案
按热度按时间pexxcrt21#
我以前见过这种事。这意味着您的群集正在进行的写入超过了它所能跟上的写入量。最终会发生的情况是,节点不堪重负,由于背压而停止接受写入,并最终开始拒绝它们。这会导致其他节点累积提示。
java.lang.RuntimeException:java.io.IOException:执行命令时出现异常错误:错误代码:错误代码:1、命令输出:无法创建硬链接“/cassandra/提交日志/提交日志-6-1690554222773.log”:文件已存在
现在,我还没有看到那个特定的错误。尽管它似乎暗示了commitlog文件不能正确地硬链接。TBH我认为这更多的是一种症状,而不是原因。
请查看您的指标。当这种情况发生时,CPU使用率往往会持续很高。至于修复此问题,有几个选项:
*降低写入负载。一种简单的方法是在编写应用程序和集群之间放置一个事件流/消息代理(如Pulsar或Kafka)。然后,构建一个消费者来获取消息并将它们写入Cassandra。
*添加更多节点。最有可能的情况是,当前集群没有处理当前写入负载所需的资源。如果您要在公共云或私有云中部署,这应该非常容易做到。
*调整
memtable_flush_writers
。默认值2可能不适合集群的负载。“通读cassandra.yaml
文件中的注解,但如果我没记错的话,减少刷新写入程序的数量应该会增加刷新活动。从我所阅读的,我不认为调整这个设置将是不够的,但它值得一试。TL;DR;
cassandra.yaml
文件中调整memtable_flush_writers
(需要重新启动所有节点)。