这不仅仅是询问mongo集群的基本问题。在我看来,这不重复 我有一个mongodb 3节点集群,我的网址是PlayFramework配置文件中的以下几行
mongodb.uri = "mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/myproj"
默认情况下,配置副本时,所有读取和写入仅在主节点上发生,这就是我想要的。但是,我希望在没有主节点时读取进入辅助节点,即当2个节点关闭时,不会有主节点和只有一个辅助节点。
我不想修改我的代码来为每个读取查询实现此目的。我在辅助节点上尝试了以下操作,但它没有帮助
db.getMongo().setReadPref('primaryPreferred')
我需要做些什么来完成这项工作?
答案 0 :(得分:2)
我不想修改我的代码来为每个读取查询实现此目的。我在辅助节点上尝试了以下操作,但它没有帮助:
db.getMongo().setReadPref('primaryPreferred')
您使用读取偏好设置在正确的轨道上,但需要在连接字符串或驱动程序中设置此选项。在mongo
shell中设置读取首选项只会影响当前的shell会话,对远程连接没有影响。
mongodb.uri =" mongodb:// mongodb1:27017,mongodb2:27017,mongodb3:27017 / myproj"
您需要根据MongoDB Connecting String URI Format添加一些其他参数:
replicaSet=...
选项表示驱动程序应使用"副本集"连接模式,而不是默认的直接连接模式。此参数启用副本集监视,读取首选项和拓扑更改的发现。提供的副本集名称必须与为部署配置的replica set name匹配。有关官方支持的MongoDB驱动程序的连接行为的完整详细信息,请参阅Server Discovery and Monitoring (SDAM)规范。规范的rationale部分包含有关所选方法的常见问题的答案。readPreference=primaryPreferred
选项表示从主数据库读取的首选项,但如果没有主数据库,则使用辅助服务器。maxStalenessSeconds=...
选项,该选项限制使用辅助读取首选项时的最大复制滞后(或过时)。默认情况下,没有最大过时性,因此在根据读取首选项选择辅助节点时,驱动程序不会考虑复制延迟。如果您的意图是使用primaryPreferred
作为读取的故障转移选项,我会谨慎设置最大过期时间:您需要确保至少有一个具有可接受的过期性的辅助设备。 因此,假设副本集名称为mongocluster
,数据库为myproj
,建议的连接字符串为:
mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/myproj?replicaSet=mongocluster&readPreference=primaryPreferred