Строка подключения MongoDB к набору реплик

Я смотрю http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html, и когда вы переходите к разделу "Соединение с репликацией, не используя подтверждение по умолчанию, и readPreference для вторичных"

он указал строку подключения для реплики, подобную этой:

MongoClient.connect("mongodb://localhost:30000,localhost:30001/integration_test_?w=0&readPreference=secondary", function(err, db) {

}

Я не понимаю, зачем нужно указывать 2 хоста. Я думал, что в документации mongodb уже указано, что набор реплик прозрачен для клиента. что означает, что клиенту просто нужно подключиться к набору первичных реплик, и mongodb выполнит эту работу. Следовательно, соединение должно содержать только 1 хост. В документе Mongodb указано, что в наборе реплик должно быть не менее 3 хостов, и в этой строке подключения указано только 2 хоста.

Кроме того, почему строка соединения ничего не говорит о "replicaSet"?

Ответ 1

Несколько серверов в строке соединения служат в качестве списка посещений для обнаружения режима подключения. Вы правы в том, что вы можете просто указать первичный сервер, и все будет работать отлично. То есть, пока основной сервер не опустится или не будет очень занят.. Указав несколько машин в строке подключения, вы даете клиенту более одного места для запроса конфигурации конфигурации реплики.

Когда режим подключения разрешается для набора реплик (см. ниже), драйвер найдет основной сервер, даже если он не находится в списке посещений, если отвечает хотя бы один из серверов в списке посещений ( ответ будет содержать полный набор реплик и имя текущего первичного). Кроме того, другие второстепенные объекты также будут обнаружены и добавлены (или удалены) в микс автоматически, даже после первоначального подключения. Это позволит вам добавлять и удалять серверы из набора реплик, и драйвер будет обрабатывать изменения автоматически.

Чтобы ответить на ваш последний вопрос, поскольку указание нескольких серверов неоднозначно относительно того, является ли это набор реплик или несколько монго (в ошвартованной настройке), драйвер будет проходить этап обнаружения подключения к серверам для определения их тип. У этого есть немного накладных расходов во время соединения, и их можно избежать, указав режим соединения в строке соединения - следовательно, ключевое слово replicaSet. Поэтому, в то время как это необязательно, оно может ускорить время вашего соединения, чтобы явно указать, что серверы находятся в реплике, установленной в строке соединения.