Монго БД Реплика установила Застрял в состоянии ВОССТАНОВЛЕНИЯ
14
Мы создали набор реплик, и теперь проблема состоит в том, что 2 члена набора реплик [набор 3 элементов] находятся в режиме восстановления с 48 часов. Первоначально размер восстанавливающихся узлов увеличивался, а теперь даже это прекратилось. Таким образом, при восстановлении узлов они застряли после 90 ГБ данных с 60+ ГБ локальных данных.
Это немного небезопасно, так как неизвестно, почему вторичные серверы перешли в состояние восстановления.
Более безопасный, но и более навязчивый способ
Как указано выше, но остановите приложение во время процесса. Это исключает возможность того, что ваше приложение вставляет больше данных, чем могут копировать вторичные серверы. Однако проблема может возникнуть во время производства.
Самый безопасный, но и самый навязчивый способ
Выключите весь набор реплик
Удалить содержимое dbpathна обоих вторичных
Скопируйте содержимое dbpathв оба сайтаdbpath
Начните старый первичный.
Начните одну из старых вторичных.
Подождите, пока не будет выбран новый основной.
Запустите оставшееся среднее.
Некоторые заметки:
Используйте MMS . Он бесплатный, его легко настроить, и он дает вам хорошую информацию о вашем наборе реплик. Постарайтесь, чтобы значение «задержки репликации» оставалось равным 0, и примите все необходимые меры, чтобы ваша задержка репликации никогда не превышала «окно журнала репликации».
Всегда убедитесь, что у вас есть сеть 1 Гб и (извините) дерьмо нагрузка на ОЗУ. Чем больше, тем лучше. Дополнительное правило: скорее половина ОЗУ и SSD, чем удвоение ОЗУ и отсутствие SSD (при этом ОЗУ остается в разумных пределах).
Отказ от ответственности: всегда делайте резервную копию производственных данных, прежде чем возиться с ними.
На данный момент у нас нет вторичного узла в наборе реплик. Один находится в режиме PRIMARY, а два других находятся в режиме RECOVERING.
Авинаш Саху,
1
Логические вторичные, тогда. Процесс такой же.
Маркус У Малберг
Я много раз пытался запустить экземпляр Mongo и выполнить повторную синхронизацию, каждый раз, когда он начинает копировать данные на другой узел до фиксированного размера (~ 96 ГБ), а затем застревает. Имеет ли отношение размер оплога к этому?
Авинаш Саху,
1
Не совсем, за исключением того факта, что повторная синхронизация может прекратиться, когда вы вставите больше данных, чем может удержать оплог во время первоначальной повторной синхронизации. Выберите вариант 2 или 3 в этом случае.
Маркус В. Малберг,
1
Можете ли вы объяснить это немного дальше? «скорее половина ОЗУ и SSD, чем удвоение ОЗУ и отсутствие SSD (с ОЗУ, оставшимся в разумных пределах)».
Стивен Нгуен
1
Процесс репликации завершается неудачно, даже если вы начинаете чистое копирование с нового dbpath на вторичном сервере . Поэтому нужно внести некоторые изменения в оплог . Размер оплога должен быть установлен на оптимальное значение, чтобы он мог обрабатывать все записи приложения в него.
Увеличение размера оплога:
Завершение работы основного сервера
use admin
db.shutdownServer()
Начните основной как автономный и запустите на другом порту, скажем, 37017
Вход в Монго в порт 37017
mongo --port 37017
Удалить старое содержимое в локальной базе данных
В целях безопасности сделайте backop старого оплога перед тем, как уронить
mongodump --db local --collection 'oplog.rs' --port 37017
Удалить старое содержимое в локальной базе данных
use local
db.oplog.rs.drop()
db.me.drop()
db.replset.election.drop()
db.replset.minvalid.drop()
db.startup_log.drop()
Коллекция Replset не может быть удалена, поэтому удалите ее с необходимым идентификатором:
Процесс репликации завершается неудачно, даже если вы начинаете чистое копирование с нового dbpath на вторичном сервере . Поэтому нужно внести некоторые изменения в оплог . Размер оплога должен быть установлен на оптимальное значение, чтобы он мог обрабатывать все записи приложения в него.
Увеличение размера оплога:
Завершение работы основного сервера
Начните основной как автономный и запустите на другом порту, скажем, 37017
Вход в Монго в порт 37017
Удалить старое содержимое в локальной базе данных
В целях безопасности сделайте backop старого оплога перед тем, как уронить
Удалить старое содержимое в локальной базе данных
Коллекция Replset не может быть удалена, поэтому удалите ее с необходимым идентификатором:
Создайте новый оплог необходимого размера, скажем, 50 ГБ
Также вы можете указать размер оплога в МБ в файле mongod.conf, скажем, для 50 ГБ это 429496 МБ.
Надеюсь это поможет !!!
Редактировать:
Как упомянул Николас Толи Коттрелл в комментариях. В версии 3.6 MongoDB мы можем изменять размер журнала во время выполнения без перезапуска.
Проверьте текущий размер оплога
Чтобы изменить размер оплога до 10 ГБ
источник