Репликация mongodb: не выбран основной

У меня есть три сервера с установленным на нем mongod в качестве набора репликации. Внезапно две второстепенные стали недоступны (процесс mongod умер) - я думаю, потому что они были слишком несвежими.

Проблема в том, что исходный ПЕРВИЧНЫЙ теперь является ВТОРИЧНЫМ, и мое приложение не работает, потому что оно не может подключиться к ПЕРВИЧНОМУ.

Я имею в виду, каким образом это помогает мне? Если набор реплик не может выполнить отработку отказа?! Я что-то пропустил?

Кроме того, я спрашиваю себя, почему умерли ВТОРЫЕ / почему они слишком несвежие? Что я могу с этим поделать?

К вашему сведению: моя база данных довольно большая (40 ГБ на диске).

1 ответ

Решение

Причина, по которой ваш основной теперь больше не является основным, заключается в том, что у вас должно быть достаточно голосов, чтобы составить большинство в наборе реплик - в вашем случае это означает минимум 2/3. С вашей конкретной ошибкой, которая, кажется, не имеет смысла, но представьте вместо этого, что рассматриваемый основной вместо этого был изолирован от 2 вторичных (например, сетевое событие). В этом случае вы не захотите избирать два основных цвета, поэтому вместо этого он уйдет, пока не увидит других участников набора.

Чтобы вернуть первичную работу, вам нужно сделать одну из двух вещей:

  1. Получите других участников набора назад
  2. Переконфигурируйте набор так, чтобы можно было сформировать большинство (добавить больше членов, перейти к одному)

Смотрите здесь для получения дополнительной информации о опции реконфигурации:

http://www.mongodb.org/display/DOCS/Reconfiguring+a+replica+set+when+members+are+down

По сути, ваш набор реплик будет отказоустойчивым, но у вас должно быть достаточно участников, чтобы действительно провести выборы.

С точки зрения того, почему умерли второстепенные, я не могу сказать, основываясь на информации, которую вы предоставили здесь, но я могу сказать вам, что это не потому, что они были слишком несвежими. Вспомогательное устройство, которое слишком сильно отстает, сообщит, что оно устарело, но будет продолжать работать (и голосовать за основное) даже в этом состоянии, пока вы не исправите его и не обновите его. Смотрите здесь, как исправить устаревший член набора:

http://www.mongodb.org/display/DOCS/Resyncing+a+Very+Stale+Replica+Set+Member

Другие вопросы по тегам