【发布时间】:2021-02-18 23:42:44
【问题描述】:
我目前正在规划一些服务器基础架构。我在不同的位置有两台服务器。我的应用程序(api 和东西)都在它们上面运行。客户端连接到最近的(最佳连接)。如果一台服务器发生故障,另一台服务器可以处理请求。我想在我的项目中使用 mongodb。第一个想法是使用副本集,因此我可以确保数据是一致的。如果一台服务器出现故障,数据仍然可以访问,并且辅助服务器切换到主服务器。当主服务器上的应用程序想要使用数据时,这很好,但其他服务器必须连接到主服务器才能处理数据(这将解决故障转移,但不是“最佳连接”问题)。在 Mongodb 中有一个从辅助服务器读取数据的选项,但是我必须确保插入(仅在主服务器上可能)在每个辅助服务器上都是一致的。这个“writeConcern”还有一个选项。是否有可能以某种方式指定“特定二级上的 writeConcern”?因为如果在没有应用程序的情况下添加第二个辅助节点,则不需要在每个辅助节点上“writeConcern”。如果我指定一个特定值,我真的不知道数据在哪个辅助节点上可用,对吧?
总结:我想在调用api时减少服务器之间的连接。
请分享一些想法或想法来解决我的问题。
【问题讨论】:
-
“如果一台服务器发生故障,数据仍然可以访问,并且辅助服务器切换到主服务器。” 在双节点副本集中,这是不可能的。首先,需要两个多数才能选出一个主节点(如果发生故障)。看看Primary-Secondary-Arbiter。看到这个帖子Does a replica-set with two members make sense?。
-
好吧,你说得对。我至少需要 3 台服务器,但问题还是一样。
-
应用程序始终连接到 a 副本集 - 而不是副本集的特定成员。主节点将数据复制到其他成员(并且所有成员都已连接)。当一个成员(主节点)失败时,将在剩余的两个成员之间进行选举,并选出一个新的主节点。因此,应用程序连接到新选择的主节点进行写入。
标签: mongodb replicaset