![](/img/trans.png)
[英]Express can't connect to mongodb replica set when new primary get elected
[英]Express can't connect to mongodb replica set when local mongo is stoped
我有一個具有以下配置的mongodb replica set
:
這是我連接到數據庫的Express代碼(我使用mongoose
作為ODM):
const config = {
db: `mongodb://192.168.77.3,192.168.77.4,192.168.77.5/mydb`,
dbOptions: {
useMongoClient: true,
reconnectTries: Number.MAX_VALUE,
replicaSet: process.env.REPLICA_SET,
poolSize: 100,
keepAlive: 1,
connectTimeoutMS: 30000,
socketTimeoutMS: 300000,
w: 1
}
}
mongoose.connect(config.db, config.dbOptions, (error) => {
if (error) {
console.log('Error on connecting to th db: ', error)
console.log('\x1b[31m', '*** PLEASE CONNECT TO DATABASE BEFORE RUN SERVER', '\x1b[0m')
process.exit(1)
}
callback()
})
該應用程序可以正常運行。 當M1發生故障時,M2或M3被選為primary
App3
, App2
和App3
仍然正常工作,但是App1
無法連接到replica set
並顯示錯誤消息:
MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
這是我在App1
上的mongodb配置:
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: [127.0.0.1, 192.168.77.3]
replication:
oplogSizeMB: 3000
replSetName: my_rs
我的配置有問題嗎?
您不能在一個配置文件中混合多個節點的IP地址。
您的bindIp字符串
bindIp: [127.0.0.1, 192.168.77.4, 192.168.77.5]
應該
bindIp: "127.0.0.1,192.168.77.3"
在第一個節點和
bindIp: "127.0.0.1,192.168.77.4"
在第二個節點。 依此類推...因此,您可以讓localhost綁定和屬於該節點的其他地址。
我最初的回答是錯誤的,因為我認為這與mongooos有關,這是我所不知道的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.