【问题标题】:How to prevent Cassandra commit logs filling up disk space如何防止 Cassandra 提交日志填满磁盘空间
【发布时间】:2015-10-22 09:05:22
【问题描述】:

我正在 AWS 上运行一个两节点 Datastax AMI 集群。昨天,Cassandra 开始拒绝一切连接。系统日志什么也没显示。经过很多的修改,我发现提交日志已经填满了分配的挂载上的所有磁盘空间,这似乎导致连接拒绝(删除了一些提交日志,重新启动并可以连接)。

我正在使用 DataStax AMI 2.5.1 和 Cassandra 2.1.7

如果我决定擦除并从头开始重新启动所有内容,我如何确保不会再次发生这种情况?

【问题讨论】:

    标签: cassandra datastax datastax-java-driver cassandra-2.1


    【解决方案1】:

    您可以尝试降低cassandra.yaml 中的commitlog_total_space_in_mb 设置。对于 64 位系统,默认值为 8192MB(它应该在您的 .yaml 文件中被注释掉...您必须在设置时取消注释它)。在调整磁盘大小时,通常最好对此进行计划。

    您可以通过在您的提交日志目录上运行 du 来验证这一点:

    $ du -d 1 -h ./commitlog
    8.1G    ./commitlog
    

    虽然,较小的提交日志空间会导致更频繁的刷新(增加磁盘 I/O),因此您需要密切关注这一点。

    编辑 20190318

    刚刚有一个相关的想法(关于我 4 岁的答案)。我看到它最近受到了一些关注,并想确保那里有正确的信息。

    请务必注意,有时提交日志会以“失控”的方式增长。本质上,这可能是因为节点上的写入负载超出了 Cassandra 跟上刷新 memtables 的能力(因此,删除了旧的 commitlog 文件)。如果您发现一个节点包含数十个提交日志文件,并且数量似乎在不断增长,这可能是您的问题。

    基本上,您的memtable_cleanup_threshold 可能太低了。尽管此属性已被弃用,但您仍然可以通过减少 memtable_flush_writers 的数量来控制它的计算方式。

    memtable_cleanup_threshold = 1 / (memtable_flush_writers + 1)
    

    文档从 3.x 开始更新了,但是以前是这样说的:

    # memtable_flush_writers defaults to the smaller of (number of disks,
    # number of cores), with a minimum of 2 and a maximum of 8.
    # 
    # If your data directories are backed by SSD, you should increase this
    # to the number of cores.
    #memtable_flush_writers: 8
    

    ...这(我觉得)导致许多人将此值设置得太高WAY

    假设值为 8,memtable_cleanup_threshold 就是.111。当所有 memtable 的占用量超过可用总内存的比例时,就会发生刷新。太多的刷新(阻塞)写入器可以方便地防止这种情况发生。对于单个 /data 目录,我建议将此值设置为 2

    【讨论】:

    • 来自docs:重要提示:更改 cassandra.yaml 文件中的属性后,您必须重新启动节点才能使更改生效。它位于以下目录中: Cassandra 软件包安装:/etc/cassandra Cassandra tarball 安装:install_location/conf DataStax Enterprise 软件包安装:/etc/dse/cassandra DataStax Enterprise tarball 安装:install_location/resources/cassandra/conf
    【解决方案2】:

    除了按照 BryceAtNetwork23 的建议减少提交日志大小之外,确保不会再次发生的适当解决方案将监控磁盘设置,以便在磁盘已满时收到警报并有时间采取行动/增加磁盘大小。

    看到您正在使用 DataStax,您可以在 OpsCenter 中为此设置警报。我自己没有在云中使用过它,但我想它会起作用。可以通过单击顶部横幅中的警报 -> 管理警报 -> 添加警报来设置警报。配置要监视的挂载和要触发的阈值。

    或者,我确信有更好的工具来监控磁盘空间。

    【讨论】:

    • 好主意! DataStax 的人总是说一个大错误是不使用(或未充分利用)OpsCenter。
    猜你喜欢
    • 2017-04-20
    • 2021-01-29
    • 2015-06-21
    • 2023-03-21
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多