【发布时间】:2016-03-30 00:40:10
【问题描述】:
我有一个包含三个成员的副本集。我是否可能只想从两个辅助节点之一读取?我使用以下代码,其中 ip 是辅助节点之一,但我仍然看到流量已部署到其他节点。
Mongo mongo = new MongoClient("171.21.43.34");
【问题讨论】:
-
确实可以从辅助文件中读取。您只需在连接字符串中指定您的意图。见docs.mongodb.org/manual/core/read-preference。您始终可以直接从任何节点读取。
-
除非您设置读取首选项,否则即使指定“辅助”的地址(您实际上不应该这样做)并不意味着这是 only 连接的节点。因为这个是一个副本集,驱动程序无论如何都会“自我发现”所有成员节点。所以读取首选项是这里的“国王”。此外,如果您的成员不是“平衡的”(即一个比另一个更强大的服务器),这可以再次这是一件非常糟糕的事情,因为您最终会在较慢的节点上出现“滞后”,这实际上可能导致落后于 oplog。
-
是的,我支持@BlakesSeven。除非您有特殊需要,否则不应直接从副本集中的特定辅助节点读取。例如指定一个特定的辅助服务器作为报告服务器左右。
标签: mongodb mongodb-replica-set