我有一个运行良好的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应该可以正常工作了。