Cassandra数据修复失败问题

背景

为了保证cassandra不同节点数据的一致性,需要定期进行repair操作。但是,当数据量达到一定规模时,repair操作并不简单,经常会遇到这样那样的问题,导致修复失败。本文梳理一些常见的错误,以及对应的解决办法。

Some repair failed 错误

执行nodetool repair keyspace table命令,可能出现如下错误信息

java.lang.RuntimeException: Repair job has failed with the error message: [2020-08-28 16:27:23,499] Some repair failed
    at org.apache.cassandra.tools.RepairRunner.progress(RepairRunner.java:116)
    at org.apache.cassandra.utils.progress.jmx.JMXNotificationProgressListener.handleNotification(JMXNotificationProgressListener.java:77)
    at com.sun.jmx.remote.internal.ClientNotifForwarder$NotifFetcher.dispatchNotification(ClientNotifForwarder.java:583)
    at com.sun.jmx.remote.internal.ClientNotifForwarder$NotifFetcher.doRun(ClientNotifForwarder.java:533)
    at com.sun.jmx.remote.internal.ClientNotifForwarder$NotifFetcher.run(ClientNotifForwarder.java:452)
    at com.sun.jmx.remote.internal.ClientNotifForwarder$LinearExecutor$1.run(ClientNotifForwarder.java:108)

只从这个错误信息完全看不出问题出在哪里,需要到logs/system.log日志里查询详细的错误信息。

cat logs/system.log | grep ERROR -A10查看日志。如果是Validation failed错误,例如:

... Validation failed in /10.10.10.45
    at org.apache.cassandra.repair.ValidationTask.treesReceived(ValidationTask.java:64) ~[apache-cassandra-3.11.2.jar:3.11.2]
    at org.apache.cassandra.repair.RepairSession.validationComplete(RepairSession.java:182) ~[apache-cassandra-3.11.2.jar:3.11.2]
    at org.apache.cassandra.service.ActiveRepairService.handleMessage(ActiveRepairService.java:493) ~[apache-cassandra-3.11.2.jar:3.11.2]
    at org.apache.cassandra.repair.RepairMessageVerbHandler.doVerb(RepairMessageVerbHandler.java:162) ~[apache-cassandra-3.11.2.jar:3.11.2]
    at org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:66) ~[apache-cassandra-3.11.2.jar:3.11.2]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_171]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_171]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_171]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_171]

这说明10.10.10.45这个节点的数据有异常,校验失败。这时,需要到该节点上执行scrub命令,丢弃掉损坏数据。之后,再返回上一步,重新执行repair操作即可。

如果是其他错误,例如:

ERROR [GossipTasks:1] 2020-08-28 15:44:16,628 RepairSession.java:338 - [repair #f22193b0-e900-11ea-aee6-ef48888d996a] session completed with the following error
java.io.IOException: Endpoint /10.10.10.45 died
    at org.apache.cassandra.repair.RepairSession.convict(RepairSession.java:337) ~[apache-cassandra-3.11.2.jar:3.11.2]
    at org.apache.cassandra.gms.FailureDetector.interpret(FailureDetector.java:307) [apache-cassandra-3.11.2.jar:3.11.2]
    at org.apache.cassandra.gms.Gossiper.doStatusCheck(Gossiper.java:802) [apache-cassandra-3.11.2.jar:3.11.2]
    at org.apache.cassandra.gms.Gossiper.access$700(Gossiper.java:68) [apache-cassandra-3.11.2.jar:3.11.2]
    at org.apache.cassandra.gms.Gossiper$GossipTask.run(Gossiper.java:194) [apache-cassandra-3.11.2.jar:3.11.2]
    at org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor$UncomplainingRunnable.run(DebuggableScheduledThreadPoolExecutor.java:118) [apache-cassandra-3.11.2.jar:3.11.2]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_171]
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_171]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_171]

这类错误,在节点磁盘、网络等压力较大时会出现,此时再次执行repair即可。

Repair进程卡住不动问题

执行repair命令时,也可能会遇到进程卡着不动的情况,查看repair进程存在,但是所有节点都没有compaction任务(repair和scrub会在相关节点上触发compaction任务,可通过compactionstats命令查看)。

这时,可以尝试更换修复方式,例如,全量修复repair -full -pr卡住不动,可以尝试改为增量修复方式。

3.x版本最好使用增量修复方式,不加其他参数,默认就是增量修复。

流程总结

  • 通过日志查看哪个节点有问题
  • 到对应节点上执行scrub,丢弃已损坏的数据
  • 重新执行repair
  • 执行listsnapshots,查看快照(scrub会生成快照)
  • 执行clearsnapshot,清除快照
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350