【问题标题】:DSE 4.6 to 4.7: 1 MUTATION messages dropped in last 5000msDSE 4.6 到 4.7:在过去 5000 毫秒内丢弃了 1 条 MUTATION 消息
【发布时间】:2015-09-08 13:37:22
【问题描述】:

在将我们的集群(4DC,ubuntu 14.04 x64,cpp-driver 2.0.1 作为我们应用程序中的客户端)从 4.6 升级到 4.7 后,在负载较小的几个节点上的日志中收到消息“MessagingService.java:888 - 1 MUTATION消息在过去 5000 毫秒内丢失”,线程池转储中有 1 个 Pending HintedHandoff 通知

我尝试了什么:
在集群中每个正在运行的节点上运行“nodetool truncatehints”
将 openjdk 更改为 oracle jdk(1.7.0_76-b13)
停用节点并重新加入它

如何找到这个突变/提示并删除它?

旁注:
我们不增加负载(版本 4.6 可以正常工作)
我们不会减少节点数
我们有 ssd 支持的存储

固定在https://issues.apache.org/jira/browse/CASSANDRA-9129

【问题讨论】:

    标签: datastax-enterprise


    【解决方案1】:

    删除突变通常意味着您的磁盘无法跟上您的摄取速度。此时,您可能有兴趣了解是否有任何线程池在备份(如果这是 IO 问题,通常是flushwriters)。这就是为什么 cassandra 会在那个时候记录下踏板状态。

    Cassandra 建立在具有多个线程池的 SEDA 架构之上,可以处理多达一定数量的并行任务。当活动任务多于池可以同时处理的数量时,待处理的线程池任务就会堆积起来。一旦系统有资源这样做,它们最终会得到处理,或者在极端情况下被丢弃。

    要查看线程池的当前状态,请使用nodetool tpstats。您的提示任务很可能已被处理。

    您正在累积提示这一事实意味着您的一些节点已关闭,并且由于节点已恢复正常,因此正在重播提示以保持一致性。

    您的核心问题是丢弃的突变。如果您继续看到这种情况,请考虑以下操作之一:

    • 添加节点
    • 获得更好的存储(不要使用共享存储——即亚马逊 EBS、ssd 比旋转磁盘更快)
    • 减少工作量
    • 确保您正在加载最佳实践(良好的数据模型, 分散负载,具有负载平衡等的 datastax 驱动程序)

    【讨论】:

    • 我同意你的看法,但是。以前的 dse 4.6.7 没有这样的问题(正如我所说的那样 - 线程池中只有一个待处理的作业 - HintedHandoff 其他人为零(活动和待处理)。这个服务器使用 ssd 作为磁盘后端,我没有看到监控中的 I/O 时间峰值(5 分钟平均 10-20 次 IO 用于读取/写入),磁盘负载小于 1%。您的意思是 nodetool tpstats 而不是 nodetool status(1)?
    • 第二个:如何看到这个提示是从哪里来的?从哪个节点? ip? uuid?有什么办法可以放弃这个提示吗?可能是始发节点无法传输此提示?由于某种自我限制?但是为什么目标节点会在日志中写入有关丢弃突变的信息?
    • 我做到了!谢谢。事实发生后提示是否仍处于未决状态或仅在日志中?
    • 签入 cqlsh system.hints
    • 你可以做一个线程转储来看看是什么阻止了提示。或者我打赌滚动重启会清除它。
    猜你喜欢
    • 2020-05-06
    • 2015-08-09
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多