Cassandra 压实任务卡住了

Cassandra compaction tasks stuck

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

这对于 运行 轻负载集群来说应该足够了,存储的数据少于 1 GB。

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

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

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

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

编辑:

这是 nodetool compactionstats

的输出

编辑 2:

我 运行 使用 Datastax Enterprise v. 4.6.0 和 Cassandra v. 2.0.11.83

编辑 3:

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

这是 dstat 在压缩卡住的节点上的输出

编辑 4:

来自 iostat 节点上的输出,压缩被卡住,见高 "iowait"

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

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

  1. 将键空间(例如 opsc 键空间)添加到您的 ignored_keyspaces 设置
  2. 您还可以通过调整 1min_ttl 设置
  3. 来降低此 table 的 TTL

来源: Opscenter Config DataStax 文档 Metrics Config DataStax 文档

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

天蓝色存储

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

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

查看详情here

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

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

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

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

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

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

  • 磁盘太慢(写入 > IOPS)
  • RAID 设置错误导致磁盘无法正常工作

这两个问题是并存的,很可能是我们基本上只是以错误的方式设置了磁盘。但是,SSD = 为人们提供更多的力量,所以我们一定会继续使用 SSD。

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