Jos*_*ias 8 mongoose mongodb database-replication
我已经实现了一个我在全球范围内使用的副本集.我的主人在美国俄勒冈州和4个辅助人员.加州和弗吉尼亚,法兰克福和悉尼.我也在同一地区也有网络服务器.这些Web服务器使用mongoose连接到mongo:
var mongoose = require("mongoose");
var dbUrl = "mongodb://***.***.***.***:27017,***.***.***.***:27017,***.***.***.***:27017,***.***.***.***:27017,***.***.***.***:27017/exampleDb";
var dbOptions : {
"replSet": {
"rs_name": "exampleRepSet",
"readPreference": "ReadPreference.SECONDARY_PREFERRED",
"read_preference": "ReadPreference.SECONDARY_PREFERRED",
"w":0,
"slaveOk": true
}
}
mongoose.connect(dbUrl, dbOptions);
Run Code Online (Sandbox Code Playgroud)
我的问题是我的客户端具有更高的数据库延迟,具体取决于它们与主服务器的距离.加州获得40分钟,悉尼获得400分钟.我不明白为什么会这样,因为他们应该读取他们所在地区的二级数据库.
我知道写入必须对主要进行,但即使我执行了一个查找,那么不应该在区域二级上完成并且返回很快?
我意识到配置中有一些冗余选项,但我已经绝望了.我也试过这个选项"ReadPreference.NEAREST"无济于事.
尝试使用以下选项:
var mongoose = require("mongoose");
var dbUrl = "mongodb://***.***.***.***:27017,***.***.***.***:27017,***.***.***.***:27017,***.***.***.***:27017,***.***.***.***:27017/exampleDb";
mongoose.connect(dbUrl, {
server: {
readPreference: "nearest",
strategy: "ping"
},
replset: {
rs_name: "exampleRepSet",
readPreference: "nearest",
strategy: "ping"
}
});
Run Code Online (Sandbox Code Playgroud)
虽然文档指定ping为默认策略,但 Mongoose 似乎要求您在使用readPreference.
另请注意,这secondaryPreferred与 不同nearest。secondaryPreferred无论网络延迟如何,都更喜欢读取次要成员(顾名思义),其中nearest优先读取网络延迟最低的成员。
如果您的副本集中没有配置错误,请确保您的主数据库在线且可访问 - 默认情况下,如果主数据库离线,Mongoose 将拒绝使用辅助数据库。