Cassandra:维护

May*_*tel 9 maintenance cassandra

我对 Cassandra 缺乏经验,但我对基于 SQL 的关系数据库有一些经验。

我一直无法找到有关如何在部署后维护 Cassandra 的最佳实践信息。是否有必要对数据库进行 VACUUM?我应该认为读/写负载会导致存储碎片。

或者更一般地说:维护 Cassandra 生产部署的最佳实践是什么?必须定期执行哪些操作才能保持系统的健康?操作手册确实没有讨论这个方面。

谢谢。

小智 14

一般来说,一个设计良好的集群可以在不被触碰的情况下存活数年。我有运行多年的集群。但是,这里有一些指导原则:

监控非常重要:

1) 监控延迟。使用 opscenter 或您最喜欢的指标工具来跟踪延迟。延迟上升可能是问题出现的迹象,包括 GC 暂停(在读取工作负载中比在写入工作负载中更常见)、sstable 问题等。

2) 监控 sstable 计数。如果您超限压缩,SSTable 的计数会增加(每个 sstable 只写入一次 - 通过压缩将旧的 sstable 合并为新的 sstable 来处理删除)。

3) 监控节点状态变化(up/down等)。如果您看到节点摆动,请进行调查,因为这不正常。

4) 跟踪您的磁盘使用情况 - 传统上,您需要保持在 50% 以下(特别是如果您使用 STCS 压缩)。

有一些基本的事情你应该和不应该经常做:

1) 不要显式运行nodetool compact. 你提到你已经做到了,这不是致命的,但它确实创建了非常大的 sstables,然后它们不太可能参与向前推进的压缩。您不一定需要继续运行它,但有时它可能有助于摆脱已删除/覆盖的数据。

2)nodetool repair通常建议每一次gc_grace_seconds(默认为 10 天)。在某些工作负载中,这不太重要 - 您需要修复的最大原因是确保删除标记 ( tombstones) 在它们到期之前传输(它们存在于gc_grace_seconds,如果在删除发生时节点关闭,该数据可能会恢复生机没有维修!)。如果您不发出删除命令,并且以足够的一致性级别进行查询(例如,在 QUORUM 上读取和写入),您实际上可以过上无需修复的生活。

3)如果要修复,考虑使用增量修复,一次修复小范围。

4)压实策略很重要 - 很多。STCS 非常适合写入,LCS 非常适合读取。DTCS 有一些怪癖。

5) 数据模型很重要——就像 RDBMS/SQL 环境在未索引的查询遇到大表时遇到问题一样,Cassandra 在处理非常大的行/分区时可能会出现问题。

6) 快照很便宜。非常便宜。几乎是即时的,只是硬链接,它们几乎不会立即占用磁盘空间。在升级版本之前使用快照,尤其是主要版本。

7) 小心删除。正如#2 中所暗示的, delete 在磁盘上创建更多数据,并且不会为 AT LEAST 释放它gc_grace_seconds

当所有其他方法都失败时:

我看过一些文章表明 Cassandra in prod 需要一个专门的负责人来管理任何规模的集群——我不知道这是否一定是真的,但如果你担心,你可能想聘请第三方顾问(TheLastPickle、Pythian ) 或签订支持合同 (Datastax),让您高枕无忧。