【问题标题】:What options are there to speed up a full repair in Cassandra?有哪些选项可以加快 Cassandra 的全面修复速度?
【发布时间】:2015-05-22 15:21:20
【问题描述】:

我有一个 Cassandra 数据中心,我想对其进行全面修复。数据中心用于分析/批处理,我愿意牺牲延迟来加快全面修复 (nodetool repair)。对数据中心的写入适中。

我有哪些选择可以更快地进行全面修复?一些想法:

  • 增加streamthroughput?
  • 我想我可以暂时禁用自动压缩并降低compactionthroughput。不过,我不确定我是否愿意...

附加信息:

  • 我正在运行 SSD,但没有花时间为此调整 cassandra.yaml

【问题讨论】:

  • 运行修复最快的方法是不使用vnodes,使用增量修复。您可以进行的所有其他调整都不会接近您从这两个选项中看到的速度改进。
  • +1。您可以运行 8 个令牌,但您必须自己管理它们。这可以在 vnode 优势之间取得不错的平衡,但操作上的麻烦要少得多。

标签: cassandra cassandra-2.0


【解决方案1】:

默认情况下,完整修复按顺序运行。节点数据集的状态和差异存储在二叉树中。重新创建这些是这里的主要因素。根据this datastax blog entry,“每次进行修复时,都必须计算树,参与修复的每个节点都必须从它存储的所有 sstable 中构建它的 merkle 树,这使得计算非常昂贵。”

我认为显着提高完整修复速度的唯一方法是并行运行它或修复逐个子范围。您的标签暗示您运行 Cassandra 2.0。

1) 并行全面修复

 nodetool repair -par, or --parallel, means carry out a parallel repair.

根据the nodetool documentation for Cassandra 2.0

与顺序修复(如上所述)不同,并行修复同时为所有节点构建 Merkle 表。因此,不需要(或生成)快照。使用并行修复可以快速完成修复,或者当您有操作停机时间,从而在修复过程中完全消耗资源。

2) 子范围修复 nodetool 接受像这样的开始和结束令牌参数

 nodetool repair -st (start token) -et (end token) $keyspace $columnfamily

为简单起见,请查看这个为您计算令牌并执行范围修复的 Python 脚本: https://github.com/BrianGallew/cassandra_range_repair

让我指出两个备选方案:

A) Jeff Jirsa 指出增量修复

这些从 Cassandra 2.1 开始可用。您需要 perform certain migration steps 才能像这样使用 nodetool:

nodetool repair -inc, or --incremental means do an incremental repair.

B) OpsCenter 维修服务

对于我公司itembase.com 的几个集群,我们使用repair service in DataStax OpsCenter 作为服务执行和管理小范围维修。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2018-06-06
    相关资源
    最近更新 更多