我希望getServerAddress返回Mongo服务器(副本集节点之一)的地址,它实际上处理查询。
我正在记录getServerAddress的输出并且仅查看主地址,尽管我非常确定某些查询由 secondary处理
我有点困惑,因为我在辅助中看到了查询(已设置profillingLevel
),而getServerAddress则返回主要。也许我错了......
这可能是API中的错误吗?有没有人遇到这样的问题? getServerAddress是否有可能始终返回主,而某些查询实际上是由 secondaries 处理的?
答案 0 :(得分:1)
我希望getServerAddress返回Mongo服务器(副本集节点之一)的地址,它实际上处理查询。
这个期望应该是正确的:DBCursor.java:getServerAddress()返回当前光标的主机值。
我正在记录getServerAddress的输出,只看到主地址,虽然我很确定某些查询是由辅助处理的。
默认情况下,所有查询都是副本集的主要查询。如果您未在应用程序代码中明确指定任何secondary read preferences,则辅助节点上的查询将来自其他来源。
由于您在问题的评论中提到使用 nearest 读取首选项,因此读取查询应该支持副本集的最近(通过网络延迟)成员。最近的成员可以是辅助成员,也可以是主要成员。
MongoDB手册提供了有关阅读偏好的Member Selection的更多信息。
您可以通过多种方式查看查询来源:
作为快速检查,请运行mongostat --discover
以查看副本集中的读取活动,以查看复制之外是否存在实际的辅助读取活动。或者,您也可以通过免费MongoDB Management Service(MMS)等监控服务查看此历史记录。
检查辅助服务器上的服务器日志,以获取来自应用服务器IP的连接。除非您设置了--quiet
logging mode,否则您应该看到记录的新连接类似于:
[initandlisten]连接从127.0.0.1:53548#1234接受(现已开通29个连接)
登录您的辅助人员并运行db.currentOp();您应该看到来自应用程序服务器的查询(由currentOp信息中的client
IP标识)。