在kubernetes中单独修复mongodb



我有一个运行良好的k8s集群。它有几个独立的mongodb状态集通过NFC连接。问题是,每当停电时,mongodb数据库就会损坏:

{"t":{"$date":"2021-10-15T13:10:06.446+00:00"},"s":"W",  "c":"STORAGE",  "id":22271,   "ctx":"initandlisten","msg":"Detected unclean shutdown - Lock file is not empty","attr":{"lockFile":"/data/db/mongod.lock"}}
{"t":{"$date":"2021-10-15T13:10:07.182+00:00"},"s":"E",  "c":"STORAGE",  "id":22435,   "ctx":"initandlisten","msg":"WiredTiger error","attr":{"error":0,"message":"[1634303407:182673][1:0x7f9515eb7a80], file:WiredTiger.wt, connection: __wt_block_read_off, 283: WiredTiger.wt: read checksum error for 4096B block at offset 12288: block header checksum of 0xc663f362 doesn't match expected checksum of 0xb8e27418"}}

pod状态保持在CrashLoopBackOff,所以我不能做kubectl exec -it usersdb-0 -- mongod --repair,因为它没有运行。

我已尝试删除wiredTiger。锁和门。锁上了,但好像什么都没用。我如何修复这个数据库?

经过几次尝试,我想我终于取得了一些突破,所以我想把这个留给别人。

由于mongodb没有运行,添加命令

command: ["sleep"]
args: ["infinity"]

中的资源文件(希望它是一个状态集)。然后使用命令

修复数据库
kubectl exec -it <NAME-OF-MONGODB-POD> -- mongod --dbpath /data/db --repair

这将修复独立mongodb pod。现在删除注释,应用资源yaml文件,然后杀死pod重新创建它。

现在mongodb pod应该可以正常工作了。

相关内容

  • 没有找到相关文章

最新更新