mongodb未在副本集中使用本地数据库

时间:2019-01-29 21:07:41

标签: mongodb mongodb-replica-set

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

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

服务器1是主服务器。

  • 位于西海岸

服务器2是次要的,标签为:{location:'east'}

  • 位于东海岸

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

服务器3和4是次要的,没有标签。

我希望服务器2从它的本地数据库中读取,但是相反,它是从主数据库(或者我不能告诉它的另一个辅助数据库,但是绝对不是从其本地数据库中读取)中读取

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

如何告诉服务器2读取其自己的本地SECONDARY数据库?

2 个答案:

答案 0 :(得分:0)

在连接字符串中包含readPreferenceTags。请参阅online doc

顺便说一句,除非副本集中的一个节点没有投票权,否则副本集中的节点数不应为偶数。

答案 1 :(得分:0)

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

结果是,由于iptables中放置了一些规则,因此某些辅助服务器无法连接到其他辅助服务器。

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