Я пытаюсь понять концепцию ReplicaSet и обнаружил что-то странное в документации mongoDB:
Чтобы узел был избран первичным, он должен получить большинство голосов. Это большинство голосов в наборе: если у вас набор из 5 членов, а 4 члена выбыли, большинство из них по-прежнему составляют 3 члена (пол (5/2) +1). Каждый член набора получает один голос и знает общее количество доступных голосов.
Если ни один узел не может достичь большинства, тогда нельзя выбрать первичный и никакие данные не могут быть записаны в этот набор реплик (хотя чтение во вторичные по-прежнему возможно).
(взято из Вот)
Итак, если я понял это правильно, в упомянутом там случае с 5 членами один узел, который все еще стоит, НЕ БУДЕТ выбран в качестве основного, и весь набор не получит никаких записей? и это даже если этот единственный узел был последним праймериз перед выборами?
Если это правда, то может быть много менее радикальных случаев, которые в конечном итоге приведут к вырожденному множеству. Как этого избежать?
Правило большинства предназначено для предотвращения одновременного утверждения нескольких одиночных (считающихся изолированными) узлов первичными. Стратегии, позволяющие избежать этого, будут зависеть от вашей архитектуры.
В качестве некоторых примеров - у вас могут быть резервные арбитры в каждом центре обработки данных или зоне, чтобы вы могли добавлять их, чтобы сформировать большинство, вы можете перенастроить набор в случае «катастрофы», чтобы включить только 3 узла вместо 5, тем самым позволяя 2 образуют большинство и т. Д. Или вы можете перезапустить единственный оставшийся экземпляр mongod (если такой существует) как автономный без параметров набора реплик и использовать его таким образом, пока вы не восстановите свой набор.
При проектировании аварийного восстановления или переключения при отказе в нескольких зонах важно помнить о правиле большинства при его проектировании.