Mongodb群集和在主服务器关闭时从辅助服务器读取

Mongodb群集和在主服务器关闭时从辅助服务器读取,mongodb,mongodb-query,Mongodb,Mongodb Query,这不是一个关于mongo集群的基本问题。我认为这不是重复的 我有一个mongodb 3节点集群,我的url是PlayFramework conf文件中的以下内容 mongodb.uri = "mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/myproj" 默认情况下,配置复制副本时,所有读写操作都只在主服务器上进行,这正是我想要的。但是,我希望在没有主节点的情况下,读取转到辅助节点,也就是说,当两个节点停止时,将不会有一个主节点,而

这不是一个关于mongo集群的基本问题。我认为这不是重复的 我有一个mongodb 3节点集群,我的url是PlayFramework conf文件中的以下内容

mongodb.uri = "mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/myproj"
默认情况下,配置复制副本时,所有读写操作都只在主服务器上进行,这正是我想要的。但是,我希望在没有主节点的情况下,读取转到辅助节点,也就是说,当两个节点停止时,将不会有一个主节点,而只有一个辅助节点

我不想修改我的代码来为每个读取查询实现这一点。我在辅助节点上尝试了以下操作,但没有帮助

db.getMongo().setReadPref('primaryPreferred')
我到底需要做什么才能让这一切顺利进行

我不想修改我的代码来为每个读取查询实现这一点。我在辅助节点上尝试了以下操作,但没有帮助:

您使用了读取首选项,但需要在连接字符串或驱动程序中设置此选项。在
mongo
shell中设置读取首选项只会影响当前shell会话,而不会影响远程连接

mongodb.uri=”mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/myproj“

您需要根据MongoDB添加一些额外的参数:

  • (必需)该选项指示驱动程序应使用“副本集”连接模式,而不是默认的直接连接模式。此参数启用副本集监视、读取首选项和发现拓扑更改。提供的副本集名称必须与为部署配置的名称匹配。有关官方支持的MongoDB驱动程序预期的连接行为的完整详细信息,请参阅规范。规范部分包括对所选方法的常见问题的回答
  • (必选)
    readPreference=primaryPreferred
    选项表示从主设备读取的首选项,但如果没有可用的主设备,则使用辅助设备
  • (可选)在MongoDB 3.4+中,您可以指定一个选项,用于在使用辅助读取首选项时限制最大复制延迟(或过时)。默认情况下,没有最大的单调性,因此当基于读取偏好选择次要时,驱动程序不会考虑复制滞后。如果您打算使用
    primaryPreferred
    作为读取的故障切换选项,我会小心地设置max staleness:您需要确保至少有一个具有可接受的staleness的辅助设备
因此,假设副本集名称为
mongocluster
,数据库名称为
myproj
,建议的连接字符串为:

mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/mypr‌oj?replicaSet=‌mongocluster&readPreference=primaryPreferred
我不想修改我的代码来为每个读取查询实现这一点。我在辅助节点上尝试了以下操作,但没有帮助:

您使用了读取首选项,但需要在连接字符串或驱动程序中设置此选项。在
mongo
shell中设置读取首选项只会影响当前shell会话,而不会影响远程连接

mongodb.uri=”mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/myproj“

您需要根据MongoDB添加一些额外的参数:

  • (必需)该选项指示驱动程序应使用“副本集”连接模式,而不是默认的直接连接模式。此参数启用副本集监视、读取首选项和发现拓扑更改。提供的副本集名称必须与为部署配置的名称匹配。有关官方支持的MongoDB驱动程序预期的连接行为的完整详细信息,请参阅规范。规范部分包括对所选方法的常见问题的回答
  • (必选)
    readPreference=primaryPreferred
    选项表示从主设备读取的首选项,但如果没有可用的主设备,则使用辅助设备
  • (可选)在MongoDB 3.4+中,您可以指定一个选项,用于在使用辅助读取首选项时限制最大复制延迟(或过时)。默认情况下,没有最大的单调性,因此当基于读取偏好选择次要时,驱动程序不会考虑复制滞后。如果您打算使用
    primaryPreferred
    作为读取的故障切换选项,我会小心地设置max staleness:您需要确保至少有一个具有可接受的staleness的辅助设备
因此,假设副本集名称为
mongocluster
,数据库名称为
myproj
,建议的连接字符串为:

mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/mypr‌oj?replicaSet=‌mongocluster&readPreference=primaryPreferred

如果“三个”节点中的“两个”发生故障,则在进一步干预之前,复制集将无法用于操作。。关于整个主题,手册中有大量章节。索引在不完全正确。副本集不会有一个主要的是,我知道这一点。第二个问题仍然存在。如果我盲目地标记rs.slaveOK(),我仍然可以读取它,但我不想这样做。我希望剩下的次要部分只在没有主要部分时才允许读取。从“应用程序代码”的角度看,这是正确的。关于该主题的所有其他内容都需要DBA介入。因此成为一个更适合的问题,因为这与应用程序代码无关。以类似的方式,您还可以手动“升级”剩余节点。但是,DBA也是一个问题。“代码”的答案是“不应该在意”。要么你不清楚我在问什么,要么我需要重新表述我的问题。目的不是使用手动干预,而是使用?readPreference=secondary&maxStalenessSeconds=选项,而你被告知你不能。您“必须”手动干预。怎么这么难理解?您应该关注的真正问题是,首先不要让大多数节点宕机。如果“三个”节点中的“两个”宕机,那么在进一步干预之前,复制集将无法用于操作。。Th