当主节点崩溃并且它位于不同的主机上时会发生什么情况?



我已经阅读了Mongo Docs和一些帖子,但对我来说还不够清楚。我不明白当Mongo分布在不同的主机上时它是如何工作的

我想在不同的主机(EC2 实例(上开发一个具有副本集的集群(以便应用程序可以承受网络和数据库问题(。让我们假设这个场景(基于本教程(:

实例 A:10.0.0.1 上的主节点

实例 B:10.0.0.2 上的辅助节点

实例 C:10.0.0.3 上的仲裁程序

我的应用程序工作正常并连接到A(IP 10.0.0.1 配置为环境变量(。突然,A内部的Mongo由于任何原因崩溃,然后Mongo做了它的事情,C选择B作为新的主节点。 连接到A的应用会发生什么情况?Mongo会自动重定向到B吗?当整个实例 (A( 关闭时会发生什么情况?我是否需要添加一些额外的代码来处理此问题?

我一直只使用单个 mongo 实例,但这次我想做一些更大、更一致的事情,这让我感到困惑。感谢您的回答。

...A中的Mongo由于任何原因崩溃,然后Mongo执行其 东西,C 选择 B 作为新的主节点。我的 连接到 A 的应用?Mongo会自动重定向到B吗? 当整个实例 (A( 关闭时会发生什么情况?我需要添加吗 一些额外的代码来处理这个问题?

副本集有三个节点 - A、B 和仲裁器 C。当节点 A 出现故障时,辅助节点 B 被选为主节点。在节点 B 被选为主节点后,之前连接到 A 的应用会自动连接到 B。 请参阅具有辅助和仲裁服务器的主要。

所有应用程序都通过(或通过(驱动程序软件连接到MongoDB数据库(mongod实例(。例如,mongoshell 实用程序有自己的驱动程序。如果您的应用程序是 NodeJS 或 Java 应用程序,则有相应的驱动程序软件。这些驱动程序软件是副本集感知的 - 这意味着驱动程序知道它正在连接到副本集的主节点,并且当 mongod 崩溃时,它无法访问(读取或写入(该主节点,并等待直到选择新的主节点(选择新的主节点可能需要几十秒(,然后连接到新的主节点。所有这些都是自动发生的。 因此,应用程序开发人员无需在应用程序中执行任何特殊编程即可连接到新的主节点,以防主节点不可用。

通常,驱动程序还具有以下功能:连接到MongoDB数据库并将应用程序的数据格式转换为BSON格式,以便存储在MongoDB数据库中(并返回(。请注意,数据以BSON格式存储在MongoDB数据库中(。

相关内容

最新更新