node.js - nodejs 应用程序如何知道在副本集中选出了一个新的主 mongodb?
问题描述
我读了一些关于 mongodb 复制的内容。我想用两个不同数据中心中的两台服务器设置 mongodb 复制,以便它为连接到它的 NodeJS 应用程序提供更高的可用性。假设我在美国新泽西州纽瓦克有一个主 mongodb 实例, IP111.111.111.111
和加拿大安大略省多伦多的辅助 mongo db 实例 IP 222.222.222.222
。据我了解,如果111.111.111.111
遇到失败,222.222.222.222
则将自己选为主。
我不明白的是我应该如何配置我的 NodeJS 应用程序的数据库连接以与任何 mongodb 实例进行通信。我不明白如果111.111.111.111
或222.222.222.222
. 例如,考虑以下场景:
- 在我的 NodeJS 应用程序中,我的
.env
文件有一个带有DB_HOST=111.111.111.111
. 111.111.111.111
经历网络中断的数据中心。- NodeJS 应用程序无法访问
111.111.111.111
并收到network timeout
错误。 - mongodb 实例
222.222.222.222
选择自己作为主数据库。 - NodeJS 应用程序不知道存在
222.222.222.222
那么我的 NodeJS 应用程序如何知道切换到222.222.222.222
. 我的 NodeJS 应用程序是否应该连接到负载均衡器,并且负载均衡器应该连接到副本集的每个 mongodb 实例?或者我的 NodeJS 应用程序是否需要有一系列故障转移 mongodb 连接并系统地尝试每个连接直到成功?或者我是否构建某种 Websocket/MQTT 代理服务器,将每个 mongodb 实例的健康状况传达给我的 nodejs 应用程序,以便我的 nodejs 应用程序在每次传输之前知道要连接到哪个实例?
当主节点失败时,如何让我的 NodeJS 应用程序成功地将数据传输到 mongodb?
解决方案
推荐阅读
- python - 如何将带有索引列表的dict映射到新变量
- javascript - 为什么这种动态 HTML5 视频缩略图生成在 IE11 中失败?
- python - Python string format() 函数在语法中使用零来引用字典
- module - 如何在 Lua 中返回多个模块?
- rxjs - 每次订阅都需要退订吗
- r - 从差异向量为列创建新值
- json - 需要帮助解码包含数组的 Json
- php - 批量更改 WooCommerce 可变产品的属性下拉列表的顺序
- python - 将列表中的所有元素更改为浮点数
- mongodb - Share MongoDB across 2 Docker containers having different MongoDB versions