Согласно документации Mongo, чтобы безопасно развернуть набор репликации, вам понадобятся как минимум два активных и один арбитр, потому что для выбора основного требуется большинство голосов.
Скажем, у меня может быть три машины, поэтому развернуть три полноценных экземпляра mongo, без арбитра.
Если выбранный первичный узел выходит из строя, я получаю ДВА узла, где оба они имеют одинаковый уровень «мощности»: для меня это кажется обязательной ситуацией, описанной при развертывании.
Может кто-нибудь объяснить, почему в этой ситуации не проблема выбрать первичный, если первоначальная настройка такая же?
Выбор основного в наборе из двух узлов не проблема, пока доступны оба узла. Правило состоит в том, что для успешного избрания первичных выборов должно быть большинство участников.
В наборе из двух узлов:
В наборе из трех узлов:
Набор из двух узлов + арбитра ведет себя так же, как набор из трех узлов, поэтому, если какой-либо один узел (включая арбитра) выходит из строя, он может выбрать первичный.
Важно понимать, что набор только с двумя узлами голосования работает без избыточности записи. Вы не хотели бы создавать набор, который всегда работает таким образом (следовательно, арбитр), и вы также хотите восстановить третий узел как можно скорее в случае сбоя.
В этом случае вы, надеюсь, установили приоритеты на ваших узлах.
При тестировании, похоже, есть и другие факторы, которые не так прозрачны, я тестировал набор репликации из 3 узлов, и при выходе из строя (и также при выключении узлов) узлы, как правило, сменяют друг друга, сначала 1, затем 2, затем 3.
Наборы реплик MongoDB используют базовый алгоритм выбора лидера. Если у вас 3 узла, то если у вас есть хотя бы два функциональных узла, то у вас есть «кворум», и кластер продолжает нормально работать. Если вы потеряете два узла, то у вас нет «кворума», и выборы лидера не могут быть продолжены, а сохранившаяся реплика находится в состоянии только для чтения.