【问题标题】:Cassandra compaction tasks stuckCassandra 压缩任务卡住了
【发布时间】:2015-03-29 23:21:02
【问题描述】:

我在由 3 个节点组成的集群中运行 Datastax Enterprise。它们都在相同的硬件下运行:2 核 Intel Xeon 2.2 Ghz、7 GB RAM、4 TB Raid-0

这应该足以运行一个轻负载的集群,存储少于 1 GB 的数据。

大多数情况下,一切都很好,但似乎有时 OpsCenter 中与修复服务相关的运行任务有时会卡住;这会导致该节点不稳定并增加负载。

但是,如果节点重新启动,卡住的任务不会出现,负载又回到正常水平。

由于我们的集群中没有太多数据,我们使用opscenterd.conf 中定义的min_repair_time 参数来延迟修复服务,使其不会过于频繁地完成。

标记为“完成”并显示 100% 进度的任务并没有消失,这确实有点奇怪,是的,我们已经等了好几个小时才让它们消失,但是他们不会;我们发现解决此问题的唯一方法是重新启动节点。

编辑:

这是nodetool compactionstats的输出

编辑 2:

我在 Datastax Enterprise v. 4.6.0 和 Cassandra v. 2.0.11.83 下运行

编辑 3:

这是来自运行正常的节点上的dstat 的输出

这是来自 dstat 的输出,在一个带有卡住压缩的节点上

编辑 4:

来自iostat 节点上的输出,在压缩压缩时,请参阅高“iowait”

【问题讨论】:

  • 两个 cmets 1) datastax 支持怎么说? 2) 7GB 的 RAM 似乎不是很多
  • 我一直在以比以前更差的规格运行 Cassandra,没有遇到任何问题。我认为这不是导致挂起的原因
  • 你在 nodetool compactionstats 和 compactionhistory 中看到的相同吗?
  • 您可以在新编辑中自己查看。似乎在执行 compactionstats 命令时也会显示该任务。
  • 请问您使用的是什么版本的 OpsCenter 和 DSE?

标签: cassandra datastax-enterprise datastax opscenter


【解决方案1】:

天蓝色存储

Azure 在单个用户帐户下的存储帐户之间分配磁盘资源。单个用户帐户中可以有多个存储帐户。

为了运行 DSE [或 cassandra],请务必注意,如果 DSE [或 cassandra] 的配置类似于脚本中的示例,则不应在两个以上节点之间共享单个存储帐户这个文件。本文档将每个节点配置为 16 个磁盘。每个磁盘的 IOPS 限制为 500。在 RAID-0 中配置时,这会产生 8000 IOPS。因此,两个节点将达到 16,000 IOPS,三个节点将超过限制。

查看详情here

【讨论】:

  • 有趣。但是,我可以确认每个节点使用一个 Azure 存储帐户。当前在每个节点的 4 个不同磁盘上使用 RAID-0,所有磁盘都在该特定节点的同一个存储帐户上。我不应该接近 16,000 IOPS 的限制,因为我正在运行 4 个磁盘,所以我应该在 2k IOPS 左右。但是,这一定是与 Azure 相关的问题。
  • 如果您启动新节点,它们是否有同样的问题?你的所有节点都有这个问题吗?
  • 所有节点都有同样的问题。
【解决方案2】:

所以,这个问题已经被调查了很长时间,我们已经找到了解决方案,但是,我们不确定导致问题的潜在问题是什么,但我们得到了线索即便如此,也无法证实。

我们所做的基本上是设置一个 RAID-0,也称为条带化,由四个磁盘组成,每个磁盘大小为 1 TB。使用 Stripe 时,我们应该在某处看到 4 倍的单磁盘 IOPS,但我们没有,所以 RAID 的设置显然有问题。

当我们对自己说节点“卡住”时,我们使用了多个实用程序来确认 CPU 大部分时间都在等待 IO 响应。很明显,IO 和很可能是我们的 RAID 设置导致了这种情况。我们尝试了 MDADM 设置等方面的一些差异,但无法使用 RAID 设置解决问题。

我们开始调查 Azure 高级存储(仍处于预览阶段)。这可以将磁盘附加到其底层物理存储实际上是 SSD 的 VM。所以我们说,好吧,SSD => 更多 IOPS,所以让我们试一试。我们没有使用 SSD 设置任何 RAID。每个虚拟机只使用一个 SSD 磁盘。

我们已经运行集群将近 3 天了,我们已经对其进行了很多压力测试,但无法重现问题。

我想我们并没有找到真正的原因,但结论是以下一些一定是我们问题的根本原因。

  • 磁盘太慢(写入 > IOPS)
  • RAID 设置不正确导致磁盘无法正常运行

这两个问题密切相关,很可能是我们基本上只是以错误的方式设置磁盘。但是,SSD = 给人们更多的权力,所以我们一定会继续使用 SSD。

如果有人遇到与我们在 Azure 上在大磁盘上使用 RAID-0 时遇到的相同问题,请不要犹豫,在此处添加。

【讨论】:

  • 我们遇到了类似的问题。查看 system.log 时是否看到墓碑警告?
【解决方案3】:

您遇到的部分问题是您在这些系统上没有大量内存,而且即使每个节点只有 1GB 的数据,您的节点也可能会遇到 GC 压力。检查system.log 中的错误和警告,因为这将为您的集群上发生的事情提供线索。

【讨论】:

  • 没有看到任何奇怪的东西,我不明白为什么几乎没有负载的节点在 7 gigs 的内存下不会正常运行
  • 请查看问题中的编辑,这很可能是某种 io 相关问题
【解决方案4】:

OpsCenter 架构中的 rollups_60 表包含所有 Cassandra、操作系统和 DSE 指标的最低(分钟级别)时间序列数据。无论您是否在仪表板中为它们构建图表,都会收集这些指标,以便您可以在需要时获取历史视图。可能是这个表超出了你的小硬件。

您可以尝试调整 OpsCenter 以避免此类问题。以下是 opscenterd.conf 文件中的一些配置选项:

  1. 将键空间(例如 opsc 键空间)添加到您的 ignored_keyspaces 设置
  2. 您还可以通过调整 1min_ttlsetting 来减少此表的 TTL

来源: Opscenter ConfigDataStax 文档 Metrics ConfigDataStax 文档

【讨论】:

  • 这实际上是非常有趣的设置,老实说,我认为它们可以用来调整相关问题,但是,我的设置显然确实有问题,即使这样,这些设置也无法解决问题他们可能会帮助调整。
  • 可能是你的磁盘被拍了
猜你喜欢
  • 2018-12-12
  • 2016-01-30
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
相关资源
最近更新 更多