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

MongoDB: два узла и первичные выборы

Согласно документации Mongo, чтобы безопасно развернуть набор репликации, вам понадобятся как минимум два активных и один арбитр, потому что для выбора основного требуется большинство голосов.

Скажем, у меня может быть три машины, поэтому развернуть три полноценных экземпляра mongo, без арбитра.

Если выбранный первичный узел выходит из строя, я получаю ДВА узла, где оба они имеют одинаковый уровень «мощности»: для меня это кажется обязательной ситуацией, описанной при развертывании.

Может кто-нибудь объяснить, почему в этой ситуации не проблема выбрать первичный, если первоначальная настройка такая же?

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

В наборе из двух узлов:

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

В наборе из трех узлов:

  • Если три узла работают, один может стать основным
  • Если два узла работают, один может стать основным
  • Если работает только один узел, он доступен только для чтения

Набор из двух узлов + арбитра ведет себя так же, как набор из трех узлов, поэтому, если какой-либо один узел (включая арбитра) выходит из строя, он может выбрать первичный.

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

В этом случае вы, надеюсь, установили приоритеты на ваших узлах.

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

Наборы реплик MongoDB используют базовый алгоритм выбора лидера. Если у вас 3 узла, то если у вас есть хотя бы два функциональных узла, то у вас есть «кворум», и кластер продолжает нормально работать. Если вы потеряете два узла, то у вас нет «кворума», и выборы лидера не могут быть продолжены, а сохранившаяся реплика находится в состоянии только для чтения.