Как правильно отключить Mongo (в Replica Set) без выключения БД? - PullRequest
1 голос
/ 23 сентября 2011

Мой сервер настроен так:

2 х серверов. У mongoDB есть реплика, установленная между обоими серверами. Каждый является одним узлом.

и затем мой сервер node.js подключается к MongoDB.

Что случилось .. когда я убил вторичный сервер. (выключение сервера). MongoDB на первичном сервере все еще работает, но у сервера Node.js была проблема с подключением к MongoDB. Даже если я добавил сервер обратно, он не работал. Я использую мангуста и коннект-монго.

Итак, что случилось? Как правильно закрыть узел Монго?

Ответы [ 2 ]

5 голосов
/ 23 сентября 2011

Если у вас есть набор реплик с 2 узлами, когда один из узлов выходит из строя, другой превращается в вторичный. Если вы не подключаетесь с slaveOk true, вы не сможете читать (и в любом случае вы не сможете писать).

Это мера безопасности, введенная MongoDB, которая требует, чтобы большинство (то есть половина плюс один) набора реплик были в состоянии видеть друг друга, чтобы гарантировать, что первичный выбор может быть безопасно выбран. Если большинство не может быть замечено, узлы в меньшинстве не могут знать, выбрала ли «другая половина» основной. Наличие двух основных цветов одновременно было бы очень плохо, так как это может привести к конфликтным обновлениям.

В ситуациях, когда вы хотите запустить только два узла, вы также можете запустить арбитр, чтобы разорвать связи в случае, если один узел выйдет из строя или станет невидимым для набора реплик. Арбитр - это обычный mongod процесс, но он не хранит никаких данных - по сути, он участвует только в выборах и в противном случае бездействует. В наборе реплик с 2 «нормальными» узлами и одним арбитром любой из двух узлов хранения данных может выйти из строя без потери большинства.

Подробнее см. документацию MongoDB по наборам реплик и документацию по артикулам .

1 голос
/ 23 сентября 2011

Если ваш первичный сервер остается первичным после того, как вы удалите вторичный, это проблема с драйвером узла.В любом случае у вас всегда должен быть арбитр с четным числом узлов реплики, «почему» хорошо документировано в документации mongodb.

В случае, если это проблема node.js, версия node-mongodb-nativeты используешь ?У меня были некоторые проблемы с репликацией 2 месяца назад, но там исправлены последние версии.Последняя проблема с репликацией драйвера была закрыта 9-го сентября, вы должны попробовать последнюю версию с тегами ( V0.9.6.18 , как я пишу это)

...