【发布时间】:2021-10-30 14:26:09
【问题描述】:
我在 docker 上为 mongo 创建了 3 个容器:
docker pull mongo
docker network create mongo-cluster
docker run -d -p 27017:27017 --name m1 --net mongo-cluster mongo mongod --replSet mongo-rs
docker run -d -p 27018:27017 --name m2 --net mongo-cluster mongo mongod --replSet mongo-rs
docker run -d -p 27019:27017 --name m3 --net mongo-cluster mongo mongod --replSet mongo-rs
并设置副本集:
docker exec -it m1 mongo
config = { "_id" : "mongo-rs", "members" : [ { "_id" : 0, "host" : "m1:27017" }, { "_id" : 1, "host" : "m2:27017" }, { "_id" : 2, "host" : "m3:27017" }] }
rs.initiate(config)
mongo-rs:PRIMARY>
> db.pets.insert({name : 'pet'})
WriteResult({ "nInserted" : 1 })
m1 是主要的,m2 和 m3 是次要的
向m1插入一条记录后,我访问m2,m3,看到m1插入的记录出现在m2,m3上。有效
但是当我尝试使用 NodeJS 连接到 mongodb 时,请使用 mongoose:
mongoose.connect('mongodb://localhost:27018,localhost:27019,localhost:27020/tsng?replicaSet=mongo-rs', {
autoIndex: false,
reconnectTries: Number.MAX_VALUE,
reconnectInterval: 500,
autoReconnect: true,
poolSize: 10,
bufferMaxEntries: 0,
useNewUrlParser: true,
useFindAndModify: false,
})
并且抛出了一个错误:
failed to connect to server [m3:27017] on first connect [Error: getaddrinfo ENOTFOUND m3
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:69:26) {
name: 'MongoNetworkError'
}]
还有一个问题,如果我像上面那样连接到多个 mongodb,我可以选择配置吗,如果 mongodb 之一没有启动或失败,NodeJS 仍然可以在启动的 mongodb 上工作?
【问题讨论】:
标签: node.js mongodb docker mongoose