如何修复cassandra中未修复的字节

问题描述 投票:0回答:1

你能解释一下我做错了什么吗? 我在 Cassandra 4.0.5 的一个 DC 中运行 7 个节点,因为我试图维护这些节点,所以我每天在每个节点上运行:

nodetool repair --full -pr <keyspace>

据我了解,“未修复的字节数”值应该减少,而不是增加,但这对我不起作用。我没有减少,而是得到了这个:

nodetool tablestats <keyspace> | grep -E "Table:|Bytes unrepaired:"

    Table: <table1>
    Percent repaired: 0.0
    Bytes repaired: 0.000KiB
    Bytes unrepaired: 31.304GiB
    Table: <table2>
    Percent repaired: 0.0
    Bytes repaired: 0.000KiB
    Bytes unrepaired: 1009.825GiB
    Table: <table3>
    Percent repaired: 100.0
    Bytes repaired: 0.000KiB
    Bytes unrepaired: 0.000KiB
    Table: <table4>
    Percent repaired: 0.0
    Bytes repaired: 0.000KiB
    Bytes unrepaired: 2.227GiB
    Table: <table5>
    Percent repaired: 0.0
    Bytes repaired: 0.000KiB
    Bytes unrepaired: 250.537GiB
    Percent repaired: 0.0
    Bytes repaired: 0.000KiB
    Bytes unrepaired: 4.364MiB
    Table: <table6>
    Percent repaired: 0.0
    Bytes repaired: 0.000KiB
    Bytes unrepaired: 1.227MiB
    Table: <table7>
    Percent repaired: 0.0
    Bytes repaired: 0.000KiB
    Bytes unrepaired: 2.031MiB
cassandra datastax datastax-java-driver cassandra-4.0
1个回答
0
投票

考虑到“修复”的含义,“未修复”一词可能看起来含糊不清,但您所看到的结果是预期的。 已修复字节和未修复字节之间的区别在于增量修复所依赖的元数据。

全面修复

当您使用

--full

运行您发出的修复命令(在 4.0 及更高版本中)时,Cassandra 会在 sstable 元数据级别将修复范围涵盖的所有数据标记为“未修复” - 这使得

full
之间存在区别和
incremental
维修。

增量修复

当您运行增量修复时,Cassandra 会将所有已修复的数据标记为“已修复”,也是在 sstable 级别 - 此功能的目标是在未来的修复会话中跳过“已修复”的 sstable,从而最大限度地减少修复开销。

这有效地在幕后创建了 2 个 sstable 池,其中已修复的 sstable 只能与其他已修复的 sstable 进行压缩,而相同的逻辑适用于未修复的对应项,以保持修复状态元数据的一致性。


为了使您不必仅限于
完整

增量修复,Cassandra 始终相应地保留已修复的元数据,具体取决于您选择的修复策略。 据报道,以前的增量修复错误已在 Cassandra 4.0 中得到解决,在大多数情况下,值得在 Cassandra 4 及更高版本中运行增量修复,并在其间进行一些定期的完整修复。如果修复运行影响您的服务/应用程序,则尤其如此 - 增量修复可以为您节省大量修复时间。

© www.soinside.com 2019 - 2024. All rights reserved.