Mongoose / MongoDB 副本集使用辅助读取

Mongoose / MongoDB replica set using secondary for reads

我最近更改了我的服务器设置以包含一个副本集。辅助数据库位于全球多个区域以减少延迟。问题是我认为所有的读取都是从主服务器而不是从辅助服务器完成的。我在远离主数据库的服务器上看到 newrelic 有 500 毫秒以上的延迟,但是与主数据库位于同一区域的登台服务器约为 20 毫秒。我如何检查辅助读取或最近的读取是否正常,或者我是否缺少/错误设置? (SECONDARY_PREFERRED 和 NEAREST 我都试过了)

Url:

mongodb://1.1.1.1:27017,1.1.1.2:27017,1.1.1.3:27017,1.1.1.4:27017,1.1.1.5:27017/mydatabase

我的选项是这样的:

"replSet": {
   "rs_name": "myRepSet"
   "readPreference": "ReadPreference.SECONDARY_PREFERRED",
   "read_preference": "ReadPreference.SECONDARY_PREFERRED",
   "slaveOk": true
}

猫鼬版本:3.8.x

您可以检查最近的选项而不是辅助选项。我想那应该行得通。 检查此 link。 http://docs.mongodb.org/manual/reference/read-preference/#nearest

How can I check if the secondary read or nearest is working,

如果您有权访问您的机器,检查正在查询哪些机器的简单方法是使用 mongostat。只需登录到您的其中一台服务器,然后 运行

mongostat --discover

这将为您提供关于 inserts/queries/updates/delete 的基本输出,这些输出正在您的副本集中的每台计算机上 运行。如果你有一个安静的系统,那么很容易看到查询被重定向到哪里,这样你至少可以知道你的辅助系统是否受到攻击。

如果不是,您将需要调查您的驱动程序设置。

根据 gitHub 上的项目问题,在升级到最新版本 (mongoose@3.8.1 & mongodb@1.3.23) 时,阅读首选项似乎不起作用 ] 因为所有的读取都是从主服务器而不是从辅助服务器完成的。

根据评论,当您回滚到旧版本 (mongoose@3.6.4 & mongodb@1.2.14) 时不会出现此问题,读取将开始转到辅助节点(集合级别)。此问题将在 version 3.8.7.

中修复

请参考以下问题:

https://github.com/Automattic/mongoose/issues/1833 https://github.com/Automattic/mongoose/issues/1895