MongoDB server version: 4.0.27
在腾讯云的一台CVM上搭建mongodb副本集群:
127.0.0.1:27017
127.0.0.1:27018
127.0.0.1:27019
test@VM-40-8-centos 4> rs.config()
{
"_id" : "dbset",
"version" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 1,
"host" : "127.0.0.1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "127.0.0.1:27018",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "127.0.0.1:27019",
"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("6279e0ed8988a1c0b5d477e4")
}
}
自己电脑运行nodejs,通过外网连接mongodb集群,报错如下:
MongooseServerSelectionError: connect ETIMEDOUT 127.0.0.1:27017
at NativeConnection.Connection.openUri (D:\main\node_modules\mongoose\lib\connection.js:807:32)
at D:\main\node_modules\mongoose\lib\index.js:342:10
at D:\main\node_modules\mongoose\lib\helpers\promiseOrCallback.js:32:5
at new Promise (<anonymous>)
at promiseOrCallback (D:\main\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10)
at Mongoose._promiseOrCallback (D:\main\node_modules\mongoose\lib\index.js:1181:10)
at Mongoose.connect (D:\main\node_modules\mongoose\lib\index.js:341:20)
at Object.<anonymous> (D:\main\src\database\mongodb.js:60:10)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) {
reason: TopologyDescription {
type: 'ReplicaSetNoPrimary',
servers: Map(3) {
'127.0.0.1:27017' => [ServerDescription],
'127.0.0.1:27018' => [ServerDescription],
'127.0.0.1:27019' => [ServerDescription]
},
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
setName: 'dbset',
maxSetVersion: 1,
maxElectionId: new ObjectId("7fffffff0000000000000002"),
commonWireVersion: 7,
logicalSessionTimeoutMinutes: undefined
},
code: undefined
}
但通过命令行却是可以连接
mongo mongodb://develop:xxxx@公网IP:27017/test?authSource=admin
处理思路:
大概是mongodb副本集群配置的members.host配置127.0.0.1导致的,如果改成对应的公网IP就可以,但这样副本之间的通信就走公网了,不可取。
或者说nodejs有什么特殊的连接配置?