В каком состоянии заканчивается узел набора реплик MongoDB, если он не может найти большинство во время первичных выборов? - PullRequest
1 голос
/ 28 апреля 2020

Давайте рассмотрим набор реплик MongoDB, состоящий из трех узлов (Узел 1 является основным, Узлы 2 и 3 являются вторичными), и возникает сетевой раздел, поэтому Узел 1 теряет соединение с 2 и 3 (но 2 и 3 соединяются каждый прочее).

enter image description here

Таким образом, в конце Node2 и Node3 выберут новый первичный (так как у них есть большинство узлов в своем разделе). Таким образом, один из них (в зависимости от приоритета, голосов и времени оплога) закончится как ПЕРВИЧНЫЙ, а другой - как ВТОРИЧНЫЙ.

Однако, когда старый первичный (Узел 1) понимает, что он больше не является первичным, в какое состояние оно перейдет? Я не имею в виду состояние с точки зрения Узла 2 или 3 (которое, я думаю, будет видеть Узел 1 как ВНИЗ), но состояние, которое Узел 1 видит сам.

I Я посмотрел на состояние набора реплик в официальной документации MongoDB , но я не нашел там четкого ответа.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

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

can't see a majority of the set, relinquishing primary

И тогда он перейдет на вторичное.

1 голос
/ 28 апреля 2020

Узел 1 должен стать вторичным.

Это можно проверить, разделив развертывание (kill -9 запуская процессы или сбросив traffi c на брандмауэре), подключившись к узлу 1 и запустив ismaster на это. Значение полей ответа ismaster здесь .

...