【发布时间】:2017-12-09 21:04:31
【问题描述】:
这不是仅仅询问 mongo 集群的基本问题。我认为这不是重复的 我有一个 mongodb 3 节点集群,我的 url 在 PlayFramework conf 文件中如下所示
mongodb.uri = "mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/myproj"
默认情况下,配置副本时,所有读取和写入都只发生在主节点上,这就是我想要的。但是,我希望在没有主节点时读取到辅助节点,即当 2 个节点关闭时,不会有主节点,只有一个辅助节点。
我不想修改我的代码来为每个读取查询实现这一点。我在辅助节点上尝试了以下操作,但没有帮助
db.getMongo().setReadPref('primaryPreferred')
我需要做些什么才能完成这项工作?
【问题讨论】:
-
如果“三个”节点中的“两个”出现故障,那么在进一步干预之前,副本集将根本无法用于操作。整个主题有大量的手册部分。索引于Replication
-
不完全正确。副本集不会同意主要是,我知道。二级将仍然存在。如果我盲目地标记 rs.slaveOK(),我仍然可以读取它,但我不想这样做。我希望剩余的次要仅在没有主要时才允许读取
-
从您的“应用程序代码”的角度来看,这是真的。该主题的其他所有内容都需要 DBA 干预。因此成为更适合dba.stackexchange.com 的问题,因为这与应用程序代码无关。以类似的方式,您也可以手动“提升”剩余节点。但同样,DBA 问题。 “代码”的答案是“它不应该关心”。
-
要么你不清楚我在问什么,要么我需要重新表达我的问题。目的不是使用手动干预,而是使用 ?readPreference=secondary&maxStalenessSeconds=
-
你被告知你不能。您“必须”手动干预。怎么这么难理解?您应该关注的真正事情是首先不要让大多数节点停机。
标签: mongodb mongodb-query