Назад | Перейти на главную страницу

Репликация mongodb: нет первичных избранных

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

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

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

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

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

Причина, по которой ваш основной теперь больше не является основным, заключается в том, что у вас должно быть достаточно голосов, чтобы сформировать большинство в наборе реплик - в вашем случае это означает минимум 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