【问题标题】:mongodb not using local database in replica setmongodb没有在副本集中使用本地数据库
【发布时间】:2019-01-29 21:07:40
【问题描述】:

我有 4 台服务器,每台服务器都托管一个网站和一个 mongo 副本集。

  • MongoDB 版本:v3.4.13
  • 驱动:PHP

服务器 1 是主服务器。

  • 位于西海岸

服务器 2 是 SECONDARY,带有标签:{ location: 'east' }

  • 位于东海岸

  • 我正在使用连接字符串连接到数据库:mongodb://localhost:27017/?replicaSet=rs&readPreference=nearest&readPreferenceTags=location:east

服务器 3 和 4 是 SECONDARY,没有标签。

我希望服务器 2 从其本地数据库中读取,但它正在从主数据库(或另一个辅助数据库,我无法确定,但它绝对不是从其本地数据库中读取)读取)

  • 我怀疑它没有从自己的 SECONDARY db 中读取数据,因为我运行的任何查询都有大约 3 秒的延迟。

如何告诉服务器 2 从它自己的本地 SECONDARY db 中读取?

【问题讨论】:

  • 你能澄清local的意思吗?这可能是local 数据库(复制操作日志和其他非复制集合所在的位置)或本地数据(即从任何其他数据库读取)。我怀疑你的意思是后者,但从目前的描述中并不清楚。编辑您的描述以包含有关您正在连接的驱动程序和版本的信息以及您如何验证从预期服务器返回的数据也会很有帮助。
  • @Stennie 你是对的,我希望它从自己的本地数据中读取,以便读取速度非常快。数据库在东海岸,我不希望它从西海岸的数据库中读取。我已经更新了我的问题。

标签: mongodb mongodb-replica-set


【解决方案1】:

在您的连接字符串中包含readPreferenceTags。参考online doc

顺便说一句,你不应该在副本集中有偶数个节点,除非其中一个没有投票权。

【讨论】:

    【解决方案2】:

    解决方案:集群中的所有服务器都需要能够连接到集群中的所有其他服务器。

    事实证明,由于我的 iptables 中放置了一些规则,我的一些辅助服务器无法连接到其他辅助服务器。

    一旦集群中的所有服务器都能够相互连接,速度就会显着提高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      相关资源
      最近更新 更多