Mongodb реплика задать вопросы
У меня есть конфигурация набора реплик mongodb одной основной машины, одной дополнительной машины и одной машины арбитра. Основной и дополнительный компьютеры имеют 2 коллекции (каждая в своей базе данных)
Мне нужно удалить несколько Гб из одной коллекции и оставить другую коллекцию без изменений. Я новичок в этом, поэтому я хотел бы получить идеи / уловки по этому вопросу. Я думаю о следующей процедуре:
- Удалите дополнительный из набора реплик.
- Во вторичном объекте для коллекции, которую я хочу удалить, сделайте mongodump данных, которые я хочу сохранить.
- Сделайте восстановление монго из этой свалки.
- Повторно добавьте вторичную заднюю часть в набор реплик. Я думаю, что мне нужно будет установить приоритеты, чтобы первичное не стало вторичным?
Я надеюсь, что вторичный сервер синхронизируется с основным, но что происходит с данными, которые я удалил на вторичном сервере? Первичный удаляет его из себя? (что я и хочу)
Нужно ли что-то делать с Первичным?
1 ответ
Прокатное обслуживание:
- Чтобы узнать, сколько времени у вас есть оплог, чтобы отключить вторичный сервер и выполнить его: db.printReplicationInfo()
- При работе с Первичным, Вторичным и Арбитром... тогда удаление вторичного может иметь риск. Основной не будет аварийного переключения в случае, если что-то случится во время вашего периода обслуживания. Первичный-вторичный-вторичный будет безопаснее.
- После завершения работы вашего дополнительного устройства перезапустите его без параметра --replSet И на другом порту, в противном случае остальная часть набора реплики будет перепутана.
- Перезапустите ваш Secondary с помощью --replSet, и старый порт снова добавит его в Replica Set. Не волнуйтесь, ваш Первичный будет оставаться Первичным. Голосование / выборы "только" происходит, когда первичное устройство исчезло... и это не относится к добавлению вторичного устройства.
- Вторичный догонит от оплога.
- Для работы на Первичном. Сделайте rs.stepDown() на Первичном, разрешите Вторичному вступить во владение и повторите процесс.
Очистка во время технического обслуживания прокатки
Здесь я не очень уверен и могу только догадываться, потому что я еще не проверял это. Что вы можете сделать во время технического обслуживания:
- обновить двоичные файлы (apt-get update/yum update/...)
- строить индексы
- компактность и ремонт
Теперь об удалении данных? То, что вам нужно проверить на локальной небольшой реплике.
- Боюсь, что сброс / восстановление - плохая идея. Но я не уверен.
- Выполнить оператор удаления... Я думаю, что есть способ сделать это, и пусть этот оператор затем будет выполняться на Первичном сервере, но я пока не знаю как.
- Самое простое: почему бы не выполнить оператор удаления на первичном сервере и позволить этому распространиться на вторичный сервер? Потому что вы хотите уменьшить размер базы данных? Что ж, после удаления вы можете выполнить техническое обслуживание, чтобы выполнить ремонт. Compact не создает дополнительного пространства, а только упорядочивает данные внутри предварительно выделенных файлов. И ремонт, будьте осторожны, нужно двойное пространство для сборки. Для восстановления базы данных объемом 100 ГБ требуется как минимум 100 ГБ свободного места.
https://dba.stackexchange.com/questions/28269/disk-space-recovery-on-mongodb-replicaset-secondaries
И посмотрите на https://university.mongodb.com/ => M202: Расширенное развертывание и операции MongoDB... Эта проблема решается в этих бесплатных уроках.