статус replicaSet db после отработки отказа и восстановления

Моя версия mongodb — 3.2.4. У меня есть набор реплик с двумя узлами базы данных и одним арбитром. Все базы данных работают нормально в течение длительного времени на моем клиентском сайте. Однажды основная БД была отключена для обслуживания. Примерно через 2 часа первичная база данных была восстановлена ​​и снова стала первичной, а вторичная база данных находится в состоянии отката. У меня есть несколько вопросов относительно вышеупомянутых сценариев: когда первичная БД была отключена в первый раз, если есть записи БД, не синхронизированные со вторичной БД, что произойдет? когда неисправный первичный сервер снова запускается, он сразу становится первичным? Синхронизируется ли он с основной базой данных, которая была вторичной, прежде чем снова стать основной базой данных? как восстановить потерянные данные в папке отката, учитывая мое последнее состояние первичной и вторичной базы данных? Спасибо и привет.


person Nancy Chen    schedule 16.09.2016    source источник


Ответы (2)


Если вы хотите отключить первичный сервер для обслуживания, вам нужно выполнить команду rs.stepDown() на первичном. Это выберет другой узел БД в качестве основного:

  • Первичный шаг вниз, он отклоняет записи. Ваше приложение будет получать краткие ошибки записи, пока не будет выполнен следующий пункт ниже.
  • Выбранный вторичный сервер должен убедиться, что он синхронизирован со старым основным сервером, прежде чем сам станет основным. Это должно произойти за доли секунды, но если у вас интенсивное приложение для записи, это может занять больше времени.
  • Когда старый основной сервер будет восстановлен, он станет основным, если вы дадите ему наивысший приоритет. Я бы все же рекомендовал иметь равный приоритет для 2 узлов данных, а не возвращать основной обратно. Процесс продвижения другого узла точно такой же, как и в двух пунктах выше.

Состояние отката, в котором вы находитесь, не кажется нормальным, если вы делаете правильный шаг вниз. Вот хорошая ссылка для применения отката: https://scalegrid.io/blog/how-to-recover-from-a-mongodb-rollback/

person Rick Chen    schedule 16.09.2016

Рик написал хороший ответ, но не ответил на ваш последний вопрос ... ЕСЛИ произошел откат, под вашим dbpath будет каталог отката. В этом каталоге вы можете найти все документы, для которых выполнен откат, в файлах json для конкретных столбцов базы данных. Эти файлы могут быть монгоимпортированы обратно в основной...

person JJussi    schedule 17.09.2016