database - 无法修复 Cassandra 中特定节点上的特定表

标签 database cassandra nosql cassandra-3.0

我在 Cassandra 3.10 的一个 DC 中运行 5 个节点。 当我试图维护这些节点时,我每天在每个节点上运行

nodetool repair -pr 

每周

nodetool repair -full

这只是我遇到困难的表格:

Table: user_tmp
        SSTable count: 4
        Space used (live): 366.71 MiB
        Space used (total): 366.71 MiB
        Space used by snapshots (total): 216.87 MiB
        Off heap memory used (total): 5.28 MiB
        SSTable Compression Ratio: 0.4690289976332873
        Number of keys (estimate): 1968368
        Memtable cell count: 2353
        Memtable data size: 84.98 KiB
        Memtable off heap memory used: 0 bytes
        Memtable switch count: 1108
        Local read count: 62938927
        Local read latency: 0.324 ms
        Local write count: 62938945
        Local write latency: 0.018 ms
        Pending flushes: 0
        Percent repaired: 76.94
        Bloom filter false positives: 0
        Bloom filter false ratio: 0.00000
        Bloom filter space used: 4.51 MiB
        Bloom filter off heap memory used: 4.51 MiB
        Index summary off heap memory used: 717.62 KiB
        Compression metadata off heap memory used: 76.96 KiB
        Compacted partition minimum bytes: 51
        Compacted partition maximum bytes: 654949
        Compacted partition mean bytes: 194
        Average live cells per slice (last five minutes): 2.503074492537404
        Maximum live cells per slice (last five minutes): 179
        Average tombstones per slice (last five minutes): 1.0
        Maximum tombstones per slice (last five minutes): 1
        Dropped Mutations: 19 bytes

修复百分比在此表中的此节点和另外一个节点上从未高于 80%,但在其他节点上则高于 85%。 RF为3,策略为SizeTieredCompactionStrategy

gc_grace_period 是 10 天,当我在那个时期的某个地方时,我在这张表上遇到了 writetimeout,但是在获得此超时的消费者立即被另一个超时替换后,一切都继续进行,就像什么都没发生一样。就像一次写入超时。

我的问题是:您是否有更好的修复策略的建议,因为我有点菜鸟,每个建议对我来说都是一个巨大的胜利+这张 table 的任何其他建议? 也许用 repair -inc 而不是 repair -pr

最佳答案

Casandra 3.10 中的 nodetool 修复命令默认运行增量修复。增量修复存在一些重大问题,目前社区不建议运行增量修复。请参阅这篇文章,了解有关修复和增量修复问题的一些深入见解:http://thelastpickle.com/blog/2017/12/14/should-you-use-incremental-repair.html

与许多其他人一样,我建议运行:

nodetool repair -full -pr

请注意,您需要在集群中的每个节点上运行修复。这意味着,如果您每天在一个节点上运行修复,则最多可以有 7 个节点(因为使用默认 gc_grace,您的目标应该是在 7 天内完成修复)。而且您还必须相信在进行修复时不会出现任何问题,因为您必须重新启动任何失败的作业。

这就是像 Reaper 这样的工具存在的原因。它可以轻松解决这些问题,自动进行修复,让生活变得更简单。 Reaper 运行计划修复并提供 Web 界面以简化管理。我强烈建议使用 reaper 进行日常维护,并使用 nodetool 修复计划外事件。

编辑:链接http://cassandra-reaper.io/

关于database - 无法修复 Cassandra 中特定节点上的特定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908192/

相关文章:

cassandra - CQL 集合的并发程度如何?

javascript - 如何在 mongodb 模式中使用预定义值创建字段,并让用户使用单选按钮选择值

java - Couchbase Bucket 身份验证错误

sql - Oracle(旧?)加入 - 用于转换的工具/脚本?

database - 在 Redis 中选择 SETNX 而不是 SET

mysql - 错误 : cannot find the c:\wamp64\bin\mysql5. 7.19\my.ini 文件

elasticsearch - ElasticSearch 作为主数据存储相对于写入丢失、数据可用性等因素的可靠性如何

database - 'too many' 在一个表中有多少个字段?

java - DSE : Unable to sstablellaoding data from 4. 8.9 至 5.0.2

java - Cassandra - CQLSSTableWriter 是否支持在一个 JVM 实例中同时写入多个列族?