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
除非您真正了解这意味着什么和所有含义,否则您应该只是从“主要”中读取。如果你必须提出这个问题,那么你应该坚持阅读小学。似乎是偏好设置按设计工作。 –
我需要配置从'secondary'读取,因为'write'操作符的'primary'当前满载。如果这些设置按照设计工作,那么为什么它会从'primary'和'secondary'中读取。 – HuyTran
这并不足以单独做到这一点。如果你的主要负载很重,那么“分片”是你应该看的第一个地方。次要读数“按设计”意味着数据不能保证是最新的。只有当你接受,作为一个给定的事实,你的应用程序可以忍受,这真的是一个有效的选择。次要读取不用于扩展,就像复制不会替代备份一样。 –