当负载增加时,Mongodb 似乎正在调用 secondary

Cru*_*yro 5 mongodb mongodb-java mongodb-query

我们有一个 mongo db 副本集配置,其中有 1 个主数据库和 2 个辅助数据库。我们已将读取首选项设置为,primary因为我们的辅助节点之一位于远程区域,并且不希望在该节点上进行读取操作。

如果我在调试模式下逐一运行 collection.find() 方法(该方法使用 MongoCursor 并迭代响应),我会看到所有调用都转到主函数。

上述可以通过2种方式验证:

  1. 客户端上的 mongo 驱动程序日志显示命令已发送到主 mongo 服务器
  2. 服务器上的mongodb.log打印find操作(启用slowms选项)

但是,如果我在没有调试模式(更高的速度+负载)的情况下运行相同的操作,则两台服务器的 mongodb.log 都会开始显示查找操作。这是出乎意料的,因为我们希望调用仅转到主数据库而不是远程辅助数据库。此外,客户端上的 mongo 驱动程序日志显示命令仅发送到主 mongo 服务器。

此外,主 mongodb.log 和辅助 mongodb.log 的区别在于,辅助 mongodb.log 中的 readPreference 显示为“secondaryPreferred”(并且我们不在代码中的任何位置设置此首选项)。

在辅助 mongodb.log 中看到日志的原因可能是什么?

是否只是打印日志并且调用真的会转到主要?或者主服务器确实将调用转发到具有 secondaryPreferred 读取首选项的辅助服务器?