当成员之一不可用时,与mongodb copysetset的连接失败

时间:2019-02-16 13:35:43

标签: mongodb node-mongodb-native

我有一个具有以下配置的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")
    }

} 为了测试故障转移方案,我杀死了一个成员,并尝试使用mongodb node js驱动程序连接到副本集。 连接字符串如下:

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 :(得分:1)

看起来您有一个只有两个成员且没有仲裁者的副本集-这意味着它无法选举新的领导者,这意味着故障转移之后没有任何连接。看看Two nodes MongoDB replica set without arbiter,以了解发生了什么。