【问题标题】:New cassandra node should finish compaction before joining ring新的 cassandra 节点应在加入环之前完成压缩
【发布时间】:2017-01-17 02:28:26
【问题描述】:

我想知道是否有办法让 Cassandra 节点仅在完成流式传输和压缩后才加入环。我遇到的问题是,当我将一个节点添加到我的集群时,它会从其他节点流式传输数据然后加入环,此时它开始大量压缩,并且压缩需要很长时间才能完成(超过一天),在此期间,该节点上的 CPU 利用率接近 100%,布隆过滤器误报率也非常高,这恰好与我的用例有关。这会导致整个集群的读取延迟增加,尤其是新加入的节点的读取延迟是典型的 10 倍。

我阅读了这篇 http://www.datastax.com/dev/blog/bootstrapping-performance-improvements-for-leveled-compaction 的帖子,其中包含关于在添加节点时可能改善读取延迟的一种方法。

“操作员通常通过在启动新节点时传递 -Dcassandra.join_ring=false 来避免此问题,并等待引导程序完成以及后续压缩,然后再使用 nodetool join 手动将节点放入环中”

关于 join_ring 选项的文档非常有限,但在尝试过之后,似乎只有在我为新主机运行 nodetool join 之后才能启动流数据和后来的压缩,所以我想知道如何或是否可以实现。

现在我的用例只是对 kafka 消费者应用程序正在处理的记录进行重复数据删除。 cassandra 中的表很简单,只是一个主键,查询只是插入具有几天 ttl 的新键并检查键是否存在。集群需要在峰值流量时每秒执行 50k 读取和 50k 写入。

我正在运行 cassandra 3.7 我的集群最初位于 EC2 中,位于 18 个 m3.2xlarge 主机上。这些主机在压缩期间以非常高 (~90%) 的 CPU 利用率运行,这是尝试向集群添加新节点的动力,我已经切换到 c3.4xlarge 以提供更多 CPU 而无需实际添加主机,但是知道我应该在什么 CPU 阈值下添加新主机会很有帮助,因为等到 90% 显然是不安全的,并且添加新主机会加剧新添加主机上的 CPU 问题。

CREATE TABLE dedupe_hashes (
   app int,
   hash_value blob,
   PRIMARY KEY ((app, hash_value))
) WITH bloom_filter_fp_chance = 0.01
       AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '90PERCENTILE';

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    需要检查的一点是“compaction_throughput_mb_per_sec”的设置,这可能有助于避免由于压缩导致的 100% CPU。 默认情况下它应该是 16MB,但请检查您是否禁用了此功能(设置为 0)。

    nodetool 获取压缩吞吐量

    你也可以动态设置值

    nodetool setcompactionthroughput 16

    (在 cassandra.yaml 中设置为重启后仍然存在)。

    【讨论】:

    • 此设置没有帮助。在我们的例子中,吞吐量设置为 16MB/s,直到压缩完成它具有恒定的 400MB/s,20KIOPS
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多