簡體   English   中英

本地mongo停止時,Express無法連接到mongodb副本集

[英]Express can't connect to mongodb replica set when local mongo is stoped

我有一個具有以下配置的mongodb replica set

  • M1(192.168.77.3)主(主機App1)
  • M2(192.168.77.4)輔助(主機App2)
  • M3(192.168.77.5)輔助(主機App3)
  • M4仲裁員

這是我連接到數據庫的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 App3App2App3仍然正常工作,但是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM