0

我有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 被选为primaryApp2并且App3仍在工作,但App1CAN'T 无法连接到replica set并显示错误消息:

MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]

这是我的 mongodb 配置App1

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

我的配置有什么问题吗?

4

1 回答 1

0

您不能在一个配置文件中混合多个节点的 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"

在第二个节点。依此类推...因此,您可以拥有本地主机绑定和属于该节点的其他地址。

我最初的回答是错误的,因为我认为它与 mongooos 有关,我不知道。

于 2017-11-25T08:58:23.677 回答