Подключение к членам набора реплик через удаленного участника - PullRequest
3 голосов
/ 17 апреля 2019

У меня есть простой набор реплик с 3 участниками

Выход из rs.status ()

{
    ...,
    "members" : [
        {
            "_id": 1,
            "name": "localhost:27021",
            "stateStr": "PRIMARY",
        },
        {
            "_id": 2,
            "name": "localhost:27022",
            "stateStr": "SECONDARY",
        },
        {
            "_id": 3,
            "name": "localhost:27023",
            "stateStr": "SECONDARY",
        }
    ]
}

Я удалил один элемент

rs.remove("localhost:27023")

Теперь rs.status ()

{
    ...,
    "members" : [
        {
            "_id": 1,
            "name": "localhost:27021",
            "stateStr": "PRIMARY",
        },
        {
            "_id": 2,
            "name": "localhost:27022",
            "stateStr": "SECONDARY",
        },
    ]
}

Теперь я использовал URL-адрес подключения mongodb с удаленным экземпляром.Он успешно подключился к членам набора реплик !!

var url = 'mongodb://localhost:27023/myproject?replicaSet=rs0';
MongoClient.connect(url, function(err, db) {
  console.log("Connected correctly to server");
  db.close();
});

Я мог видеть, что соединение было установлено с членами набора реплик (localhost: 27022 и localhost: 27023)

2019-04-17T18:59:04.727+0900 I NETWORK  [thread1] connection accepted from 127.0.0.1:53284 #6 (3 connections now open)
2019-04-17T18:59:04.727+0900 I NETWORK  [conn6] received client metadata from 127.0.0.1:53284 conn6: { driver: { name: "nodejs", version: "3.2.3" }, os: { type: "Linux", name: "linux", architecture: "x64", version: "4.15.0-47-generic" }, platform: "Node.js v10.15.0, LE, mongodb-core: 3.2.3" }
2019-04-17T18:59:04.736+0900 I -        [conn6] end connection 127.0.0.1:53284 (3 connections now open)
2019-04-17T18:59:35.334+0900 I ASIO     [NetworkInterfaceASIO-RS-0] Ending idle connection to host localhost:27021 because the pool meets constraints; 1 connections to that host remain open

Может кто-нибудь объяснитьэтот?Подключение к членам набора реплик через удаленного участника.Не удалось найти объяснения ни в одном документе.

1 Ответ

3 голосов
/ 27 апреля 2019

Это поведение драйвера.По умолчанию клиент подключается к набору реплик и пытается подключиться к основному узлу.В этом случае подключение к mongodb://localhost:27023/myproject?replicaSet=rs0 сначала подключится к localhost:27023 и проверит, является ли подключенный узел главным / основным, с помощью команды {isMaster: 1}.По результатам он обнаруживает, что localhost:27023 не является основным / основным, но также имеется информация о других узлах.Следующие шаги должны подключиться к другим узлам, пока он не найдет основной.

Вы должны выключить localhost:27023, и он даже не подключится.

...