Как проверить целостность метаданных mongodb?
Мне пришлось заменить сервер конфигурации mongodb в кластере, который содержит только 1 шард.
По ошибке я запустил новый сервер конфигурации без каких-либо данных и получил следующее сообщение в журналах:
[CheckConfigServers] ОШИБКА: не удалось проверить, что серверы конфигурации синхронизированы:: вызваны:: config серверы configserver1.mydomain.com:27019 и configserver2.mydomain.com:27019 отличаются
Следуя процедуре на http://docs.mongodb.org/manual/tutorial/replace-config-server/, я попытался остановить балансировщик от монго. Но я получил сообщение об ошибке. Я мог остановить балансировщик только после перезапуска пустого сервера конфигурации.
Я скопировал содержимое dbpath из configserver2 в configserver1, и все выглядит хорошо.
Я хотел бы убедиться, что никакие данные не были потеряны или потеряны во время этих операций. Могут ли данные быть неуместными, если в кластере всего 1 осколок?
Спасибо,
Грег.
2 ответа
CheckConfigServers
Предупреждающее сообщение, полученное вами при запуске, является проверкой работоспособности, чтобы предотвратить любые изменения метаданных (например, миграцию чанка в результате раунда балансировки), когда серверы конфигурации находятся в несовместимом состоянии.
Остановка сервера конфигурации с пустым dbpath и повторное копирование данных с известного хорошего сервера конфигурации было правильным действием. Конфигурационные серверы MongoDB не являются набором реплик и синхронизируются посредством двухфазных фиксаций, координируемых серверами mongod/mongos в вашем изолированном кластере.
Если у вас есть только один осколок, данные не будут потеряны; некуда его перенести.
Кроме того, если вы включили сегментирование, но не удалили какие-либо коллекции, все данные будут храниться в основном фрагменте.
Я думаю, что у вас должно быть все в порядке с командой printShardingStatus().