Mongoose / MongoDB副本集使用secondary进行读取

时间:2015-07-11 01:59:06

标签: mongodb mongoose replicaset

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

地址:

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
}

Mongoose版本:3.8.x

3 个答案:

答案 0 :(得分:3)

根据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

答案 1 :(得分:1)

  

如何检查辅助读取或最近读取是否正常,

如果您有权访问您的计算机,则可以使用mongostat检查正在查询的计算机的简单方法。只需登录您的某个服务器并运行

即可

mongostat --discover

这将为您提供在副本集中的每台计算机上运行的插入/查询/更新/删除的基本输出。如果你有一个安静的系统,很容易看到查询被重定向到哪里,所以你至少可以知道你的副词是否被击中。

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

答案 2 :(得分:0)

您可以使用最近的选项检查辅助设备。我想这应该有效。 检查此链接。 http://docs.mongodb.org/manual/reference/read-preference/#nearest