有什么选择可以加速卡桑德拉的全面修复?

Zty*_*tyx 7 cassandra cassandra-2.0

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

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

  • 增加streamthroughput
  • 我想我可以禁用自动编译并compactionthroughput暂时删除.不确定我想要那个,但是......

附加信息:

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

Joh*_*ohn 7

默认情况下,按顺序运行完全修复.节点数据集的状态和差异存储在二叉树中.重新创建这些是这里的主要因素.根据这个datastax博客文章,"每次进行修复时,都必须计算树,修复中涉及的每个节点都必须从它存储的所有sstables构建其merkle树,这使得计算非常昂贵."

我认为显着提高完全修复速度的唯一方法是并行运行或通过子范围修复子范围.您的标记意味着您运行Cassandra 2.0.

1)平行全面修复

 nodetool repair -par, or --parallel, means carry out a parallel repair.
Run Code Online (Sandbox Code Playgroud)

根据Cassandra 2.0的nodetool文档

与顺序修复(如上所述)不同,并行修复同时为所有节点构造Merkle表.因此,不需要(或生成)快照.使用并行修复可以快速完成修复,或者在操作停机时允许在修复期间完全消耗资源.

2)子范围修复 nodetool接受开始和结束标记参数,如此

 nodetool repair -st (start token) -et (end token) $keyspace $columnfamily
Run Code Online (Sandbox Code Playgroud)

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

让我指出两个备选方案:

A)Jeff Jirsa指出增量维修.

这些都是从Cassandra 2.1开始提供的.在使用nodetool之前,您需要执行某些迁移步骤,如下所示:

nodetool repair -inc, or --incremental means do an incremental repair.
Run Code Online (Sandbox Code Playgroud)

B)OpsCenter维修服务

对于我公司itembase.com上的几个集群,我们使用DataStax OpsCenter中维修服务,服务执行和管理小范围维修即服务.