2017-06-15 1187 views
1

我有3个在AWS,1个主节点和2个辅助节点上运行的mongo实例。我们希望所有读查询去辅助节点,因此创建猫鼬连接,当我们使用这些配置选项:readPreference secondaryPreferred不仅从Secondary节点读取

options = { 
    db: { 
     readPreference: 'secondaryPreferred', 
     native_parser: true 
    }, 
    replset: { 
     strategy: 'ping', 
     auto_reconnect: false, 
    } 
}; 
mongoose.connect(databaseUrl, options); 

问题:通过这些设置,读取查询到两个主要节点,而2个辅助节点正在运行。

当我们使用readPreference: 'secondary'时,它的工作方式与我们预期的一样:所有读取查询都只发送给辅助节点。

请帮我解释这是因为与蒙戈文档提到:

secondaryPreferred:在大多数情况下,操作从二级会员阅读,但如果没有次要部件可用,操作从主读取。

顺便说一句,我看到一些相同的问题,但他们都还没有一个明确的解决方案。 :(

我们使用:

  • 猫鼬:v4.9.5
  • 蒙戈服务器:V3.2
  • 节点:v5.12.0
+1

除非您真正了解这意味着什么和所有含义,否则您应该只是从“主要”中读取。如果你必须提出这个问题,那么你应该坚持阅读小学。似乎是偏好设置按设计工作。 –

+0

我需要配置从'secondary'读取,因为'write'操作符的'primary'当前满载。如果这些设置按照设计工作,那么为什么它会从'primary'和'secondary'中读取。 – HuyTran

+0

这并不足以单独做到这一点。如果你的主要负载很重,那么“分片”是你应该看的第一个地方。次要读数“按设计”意味着数据不能保证是最新的。只有当你接受,作为一个给定的事实,你的应用程序可以忍受,这真的是一个有效的选择。次要读取不用于扩展,就像复制不会替代备份一样。 –

回答

0

对于谁具有同样的问题的人, 我确认这个行为起源于节点驱动程序,Python驱动程序和Java驱动程序似乎没有展示过。 Mongo开发人员修复了该错误并等待合并掌握。您可以查看此票:https://jira.mongodb.org/browse/NODE-1049