Допустим, у меня есть набор реплик из 5 узлов.
3 из них мертвы, 2 живы.
Как будет рассчитываться большинство? Большинство 5 узлов будет 5/2 + 1 = 3, но если 3 узла мертвы, будет ли он по-прежнему искать 3 голоса? В живых осталось только 2 человека, поэтому только 2 голоса… или большинство будет 2/2+1=2, что все еще сбивает с толку, потому что то, что произойдет на выборах, и проблемы чтения/записи имеют какое-либо влияние на любой из них…
В основном число n в n / 2 + 1 до большинства указывает на всю длину членов набора реплик (членов, которые могут голосовать мертвыми или живыми) или длину только живых узлов?
Я попытался вручную убить 3 узла в наборе реплик из 5 узлов (4 плюс арбитр, также убил арбитр), и 2 оставшихся узла стали вторичными, и я не мог получить доступ к базе данных.
И я попробовал то же самое в наборе реплик из 3 узлов (без арбитра) и убил 1 узел, так что это то же самое, что и в первом тесте, где живы только 2 узла данных, и он выбрал основной, и Db работал.
Я пытаюсь понять, в чем разница между ними обоими.
Когда в вашем наборе реплик 5 участников (т. е. 5 членов с правом голоса), тогда большинство составляет 3, что означает, что по крайней мере 3 узла должны быть активны и доступны, чтобы выбрать ОСНОВНОЙ. В противном случае узлы остаются в ВТОРИЧНОМ состоянии.
Взгляните на MongoClient для подключения к нескольким хостам для обработки отказоустойчивости?
Предполагая, что вы не меняете приоритет, скрытие или голоса в конфигурации узлов (например, вы используете настройки replicaSet по умолчанию) и у вас нет ARBITER , вот что происходит:
1) Сколько членов replicaSet могут быть отключены одновременно?
Набор реплик 3x позволяет одновременно отключать только 1 из 3 элементов, а набор реплик будет по-прежнему доступен для записи (например, будет выбран ПЕРВИЧНЫЙ)
5x членов replicaSet позволяют одновременно отключать только 2 из 5 членов, и replicaSet по-прежнему будет доступен для записи (например, PRIMARY будет выбран)
7x членов replicaSet позволяют одновременно отключать только 3 из 7 членов, и replicaSet по-прежнему будет доступен для записи (например, PRIMARY будет выбран)
2) Что произойдет, если больше участников отключено, чем разрешено?
Если в 3x участниках replicaSet есть 2x участника, выборы будут запущены, и член, который все еще жив, не получит большинства голосов участников, поэтому, если он был ПЕРВИЧНЫМ, он переключится на ВТОРИЧНЫЙ, если он был ВТОРИЧНЫМ, он останется ВТОРИЧНЫМ. ReplicaSet по-прежнему будет доступен для чтения, но запись будет невозможна, то же самое произойдет с любым другим набором реплик, когда доступно меньшее количество членов.
Большинство основано на конфигурации набора реплик, а не на том, какие элементы доступны в данный момент. Вот почему не было на выборах в вашем первом тесте