我有一个express / nodejs应用程序,它连接到MongoDB Replicaset,并部署在两个数据中心中。
NAM
EU
以下是打开与副本的连接的代码:
与欧盟DC的连接:
const connection = mongoose.connect(`mongodb://` + process.env.DB_USER + `:` + process.env.DB_PASS + process.env.DB_HOST + `:` + process.env.DB_PORT + `,` + process.env.DB_HOST_READ + `:` + process.env.DB_PORT_READ + `/` + process.env.DB_NAME, {
readPreference: 'secondary',
useNewUrlParser: true,
replicaSet: 'rs0'
})
如您所见,它还配置了readPreference:TAGS的次要对象,专门从该成员或该成员以及查询级别读取
从欧盟DC中的APP查询:
async read(req, res, next) {
return await Model.findOne({'_id': req.params.id })
.read('secondary', { dc:'EU_MONGO1_SECONDARY' })
.exec()
.then(response => {
res.status(200).json(response) })
.catch(err => { console.log('err :', err) })
}
连接本身成功,但是...
预期结果:
所有“创建/更新”都转到主要(NAM / mongo0.app.com);
所有从NAM DC读取的操作都转到NAM / mongo0.app.com;
所有来自EU DC的读取操作都转到EU / mongo1.app.com。
实际结果:
所有“创建/更新”都转到主目录(NAM / mongo0.app.com);
从NAM进行的读取操作中有90%转到了NAM / mongo0.app.com,但是有10%转到了EU / mongo1.app.com。
来自EU DC的读取操作的90%转到NAM / mongo0.app.com,只有10%进入EU DC mongo1.app.com,它是SECONDARY并已配置读取首选项。 / p>
Mongo监视器可以清楚地显示主要和次要之间的查询/读取流量分配(根据实际结果,大于实际结果),因此, readPreference被完全忽略。我不明白为什么它甚至默认为两台主机之间的这种奇怪分布
能否请您告知设置错误/遗漏的地方?
我正在使用:
猫鼬:“ ^ 5.3.7”
Mongodb:4.0.5
节点:8.9.1