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