#mongodb #kubernetes
Вопрос:
У меня есть кластер 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"}}
Статус модулей остается в CrashLoopBackOff, поэтому я не могу этого сделать kubectl exec -it usersdb-0 -- mongod --repair
, потому что он не запущен.
Я попытался удалить WiredTiger.замок и монгод.замок, но, кажется, ничего не работает. Как я могу восстановить эти базы данных?
Ответ №1:
ну, после нескольких попыток я думаю, что наконец-то совершил какой-то прорыв, поэтому я хотел оставить это здесь для кого-то другого.
Поскольку mongodb не запущен, добавьте команду
command: ["sleep"] args: ["infinity"]
в файле ресурсов (в надежде, что это набор состояний). Затем восстановите базу данных с помощью команды
kubectl exec -it lt;NAME-OF-MONGODB-PODgt; -- mongod --dbpath /data/db --repair
Это восстановит автономный модуль mongodb. Теперь удалите комментарий, примените файл ресурса yaml, а затем уничтожьте модуль, чтобы воссоздать его заново.
Теперь модуль mongodb должен работать нормально.