java - Mongo 副本集 - 客户端是否需要了解所有这些?

标签 java mongodb replicaset

我们使用 4 个成员和一个仲裁者的 mongo 副本集。有3个物理站点,所有mongo服务器都可以相互通信:

Site 1 (west coast) site1-mg01 site1-mg02

Site 2 (east coast) site2-mg03 site2-mg04

Site 3 (cloud, arbiter only) site3-mgarbiter

我们有一个 Java 客户端。我希望客户端永远不要连接到另一个站点中的 Mongo 服务器,即使其中一个服务器成为主服务器(滞后会杀死应用程序。)或者换一种方式

Site 1 Java App connects to site1-mg01 and site1-mg02

Site 2 JavaApp connects to site2-mg03 and site2-mg04

客户端仅了解副本集的一部分是否可以接受?因此,如果 Web 客户端实际上只能到达站点 1,并且我按如下方式设置副本集:

"site1-mg01:270xx,site1-mg02:270xx"

我的客户会受到负面影响吗?我认为它的工作方式是,只要其中一台服务器是主服务器,它就能正常连接吗?如果站点 2 Mongo 成为主站点,我就无法连接?

最佳答案

在 Mongo 中,所有写入都会写入主数据库。 如果您的客户端是“只读”的,您可以在查询中使用“最近”的读取首选项。 另一种选择是连接到非主节点并设置 rs.slaveOk 以允许客户端读取。 https://docs.mongodb.org/v3.0/reference/method/rs.slaveOk/

希望有帮助。

关于java - Mongo 副本集 - 客户端是否需要了解所有这些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416795/

相关文章:

java - 关于 Android 应用程序的 "focused"是什么?

node.js - 在 Mongoose 中调用 modal.countDocuments() 和 modal.count() 时抛出错误

mongodb - 无法连接到工作的Dockerized Mongo ReplSet

kubernetes - 为什么在 Kubernetes 中引入 ReplicaSet?

java - 我的应用程序中的 "Socket is closed"

java - 针对这种具体情况选择适当的布局

java - MySQL 对同一个表的多次更新超时

mongodb - mongorestore 连接错误

ios - 仅为非高级用户禁用 Realm 同步

MongoDB二级完全跟不上