我们使用 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/