Ремонт mongodb стоит отдельно в кубернетесе

#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 должен работать нормально.