繁体   English   中英

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

[英]What happens when the primary node crashes and it is on a different host?

我已经阅读了 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作为新的 Primary。 我的应用程序连接到A会发生什么? Mongo 会自动重定向到B吗? 当整个实例 ( A ) 关闭时会发生什么? 我是否需要添加一些额外的代码来处理这个问题?

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

... A 中的 Mongo 由于任何原因崩溃,然后 Mongo 做它的事情,C 选择 B 作为新的 Primary。 连接到 A 的应用程序会发生什么? Mongo 会自动重定向到 B 吗? 当整个实例 (A) 宕机时会发生什么? 我是否需要添加一些额外的代码来处理这个问题?

副本集有三个节点 - A、B 和仲裁器 C。当节点 A 宕机时,辅助节点 B 被选为主节点。 之前连接到 A 的应用程序,在节点 B 被选为主节点后,自动连接到 B。 请参阅带有辅助节点和仲裁器的主节点

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM