Соединение с репликацией mongodb завершается неудачно, когда один из участников недоступен - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть репликационный пакет mongodb со следующей конфигурацией

{
    "_id" : "rs0",
    "version" : 2,
    "protocolVersion" : NumberLong(1),
    "members" : [
            {
                    "_id" : 0,
                    "host" : "mongodb-mongodb-replicaset-0.mongodb-mongodb-replicaset.default.svc.cluster.local:27017",
                    "arbiterOnly" : false,
                    "buildIndexes" : true,
                    "hidden" : false,
                    "priority" : 1,
                    "tags" : {

                    },
                    "slaveDelay" : NumberLong(0),
                    "votes" : 1
            },
            {
                    "_id" : 1,
                    "host" : "mongodb-mongodb-replicaset-1.mongodb-mongodb-replicaset.default.svc.cluster.local:27017",
                    "arbiterOnly" : false,
                    "buildIndexes" : true,
                    "hidden" : false,
                    "priority" : 1,
                    "tags" : {

                    },
                    "slaveDelay" : NumberLong(0),
                    "votes" : 1
            }
    ],
    "settings" : {
            "chainingAllowed" : true,
            "heartbeatIntervalMillis" : 2000,
            "heartbeatTimeoutSecs" : 10,
            "electionTimeoutMillis" : 10000,
            "catchUpTimeoutMillis" : -1,
            "catchUpTakeoverDelayMillis" : 30000,
            "getLastErrorModes" : {

            },
            "getLastErrorDefaults" : {
                    "w" : 1,
                    "wtimeout" : 0
            },
            "replicaSetId" : ObjectId("5c65617521068bf38fd3634a")
    }

} Для тестирования сценариев отработки отказа я убил одного из участников и попытался подключиться к репликационному компьютеру с помощью драйвера js узла mongodb.Строка подключения выглядит следующим образом:

const url = mongodb+srv://mongodb-mongodb-replicaset-client.default.svc.cluster.local/users?replicaSet=rs0

Соединение не устанавливается со следующей ошибкой:

{ Error: failed to connect to server [mongodb-mongodb-replicaset-1.mongodb-mongodb-replicaset.default.svc.cluster.local:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 10.8.2.12:27017]
at Pool.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/topologies/server.js:564:11)
at emitOne (events.js:115:13)
at Pool.emit (events.js:210:7)
at Connection.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:317:12)
at Object.onceWrapper (events.js:318:30)
at emitTwo (events.js:125:13)
at Connection.emit (events.js:213:7)
at Socket.<anonymous> (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:246:50)
at Object.onceWrapper (events.js:316:30)
at emitOne (events.js:115:13)
name: 'MongoNetworkError',
errorLabels: [ 'TransientTransactionError' ],
[Symbol(mongoErrorContextSymbol)]: {} }

Я также пытался соединиться с connectWithNoPrimary:true, но возникает та же ошибка.Это ожидаемое поведение?или что-то мне не хватает?

1 Ответ

0 голосов
/ 16 февраля 2019

Похоже, у вас есть набор реплик только с двумя участниками и без арбитра - это означает, что он не может выбрать нового лидера, а это означает, что после сбоя не к чему подключиться.Взгляните на Два узла, реплика MongoDB которых установлена ​​без арбитра , чтобы получить гораздо лучшее описание того, что происходит.

...