我有一个Cassandra数据中心,我想对其进行全面修复。数据中心用于分析/批处理,我愿意牺牲延迟来加速完整修复(nodetool repair
)。写入数据中心是适度的。
我有什么选择让整个修复更快?一些想法:
streamthroughput
?compactionthroughput
。不确定我是否想要那样,但是...... 其他信息:
cassandra.yaml
。答案 0 :(得分:6)
默认情况下,按顺序运行完整修复。节点的状态和差异'数据集存储在二叉树中。重新创建这些是这里的主要因素。根据{{3}},"每次执行修复时,都必须计算树,修复中涉及的每个节点都必须从它存储的所有sstables构建其merkle树进行计算很贵。"
我认为显着提高完整修复速度的唯一方法是在并行中运行它,或者通过子范围修复子范围。您的标记意味着您运行Cassandra 2.0。
1)平行全面修复
nodetool repair -par, or --parallel, means carry out a parallel repair.
与顺序修复(如上所述)不同,并行修复同时为所有节点构造Merkle表。因此,不需要(或生成)快照。使用并行修复可以快速完成修复,或者在操作停机时允许在修复期间完全消耗资源。
2)子修复 nodetool接受开始和结束标记参数,如此
nodetool repair -st (start token) -et (end token) $keyspace $columnfamily
为简单起见,请查看这个为您计算令牌并执行范围修复的python脚本: the nodetool documentation for Cassandra 2.0
让我指出两个备选方案:
A)Jeff Jirsa指出增量维修。
这些都是从Cassandra 2.1开始提供的。在使用nodetool之前,您需要https://github.com/BrianGallew/cassandra_range_repair:
nodetool repair -inc, or --incremental means do an incremental repair.
B) OpsCenter维修服务
对于我公司perform certain migration steps的几个群集,我们使用正在执行和管理小范围维修的itembase.com作为服务。