Предполагая, что вы используете большинство озабоченность записью для данных, которые вам действительно нужны, сервер C не будет подтверждать записи из приложения, пока хотя бы один из вторичных узлов также не запишет данные .
Набор реплик с 3 узлами должен иметь по крайней мере 2 узла в сети, чтобы выбрать основной, и процесс выбора будет отдавать предпочтение узлам с самой последней меткой времени.
Если узлы A и B подключились к сети немного быстрее, чем C, они могли бы завершить выбор до того, как C станет доступным.
В этой ситуации, если вы использовали большинство операций записи, не было бы потери данных поскольку либо A, либо B также будут содержать все, что было записано и подтверждено C.
Однако, если вы использовали озабоченность записи с w:1
или w:0
, могут быть записи, которые C признал, что ни A, ни B не содержат. Когда A и B подключены к сети, они все равно выберут первичный, потому что никто ничего не знает о дополнительных данных на C. Когда C становится доступным, если были какие-либо записи, C должен будет выполнить откат, чтобы участвовать в наборе реплик.
Что касается того, почему сервер A стал основным в вашем кластере, проверьте журналы mongod. В современной версии MongoDB информация о выборах регистрируется, поэтому вы сможете определить, какие узлы участвовали в выборах и какие узлы проголосовали за сервер A.