为什么不建议在生产中启动单独的 MongoDB 实例作为副本集?

2023-12-28

根据评论中的讨论这个答案 https://stackoverflow.com/a/51239633/330867,@kevinadi 建议我提出一个与他的评论相关的新问题:

您可以出于开发目的使用一个节点启动一个副本集。 [...] 请注意,这不是生产环境的推荐设置。

许多人正在为单独的 MongoDB 实例启动一个副本集,并且对于为什么不建议这样做有一个明确的答案,这对于将来的参考很有趣。

我希望 @kevinadi 能够回答这个问题,提供内存、CPU、性能方面的论点,以及不建议为 MongoDB 实例启动副本集的所有影响和原因。


副本集的主要功能是为 MongoDB 部署提供数据冗余和高可用性。也就是说,如果副本集中的主节点因任何原因发生故障,辅助节点将立即接管作为新的主节点(平均在约 10 秒内)。看复制 https://docs.mongodb.com/manual/replication/有关此主题的更多详细信息。

官方 MongoDB 驱动程序知道此副本集选举事件,并将提供对新主数据库的自动重新连接和操作重试。从应用程序的角度来看,数据库端没有发生任何事情。

使用具有多个辅助副本集的另一个优点是可以以滚动方式实现零停机升级/维护。为此,可以通过以下方式完成:使一个辅助节点脱机,对其进行维护,然后对其他辅助节点进行维护,最后关闭主节点并对其进行维护。同样,由于官方 MongoDB 驱动程序知道这些事件,因此从技术上讲,您可以对实时数据库进行维护,而对应用程序的影响非常小,并且不会造成停机。

与单一数据库服务器相比,这是一种不同的理念,其中只有一个真正的大型服务器。尽管整体部署有一定的优点(这又是一个不同的讨论:)),MongoDB 被设计为一个容错的分布式数据库。单一服务器的一个直接缺点是服务器必须始终保持 100% 运行,否则应用程序就会中断。副本集的设计是为了让您的应用程序可以拥有 100% 的正常运行时间,而不会给单个服务器带来 100% 正常运行时间的压力。

作为奖励,复制品集may能够通过将驱动程序设置为从辅助设备读取来提供读取可扩展性(写入必须始终转到主设备)。请注意,如果您想要进行二次读取,则应该进行仔细的设计,因为如果滥用,这可能会干扰高可用性方面。

总之,副本集可以提供:

  • 高可用性和容错能力
  • 无需停机维护
  • 数据冗余以扩展读取

无需硬件 100% 可靠。这就是为什么在产品部署中强烈建议使用副本集的原因。

See 副本集部署架构 https://docs.mongodb.com/manual/core/replica-set-architectures/#consider-fault-tolerance有关更详细的副本集部署注意事项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么不建议在生产中启动单独的 MongoDB 实例作为副本集? 的相关文章

  • 我如何在 mongodb 的数组中找到文本搜索

    id objectId 23651478 name Tomatos array title Vegetables description Vegitables are good to health id objectId 45761244
  • 如何在 Mongoose 中执行查找查询?

    我在 mongodb 中有一组电子书数据 例如 id ObjectId 58b56fe19585b10cd42981d8 cover path D Ebooks uploads ebooks cover 1488285665748 img1
  • MongoDB 在仅返回 _id 时使用 COLLSCAN

    我想返回 MongoDB 集合中的所有 ID 我使用了以下代码 db coll find id 1 但MongoDB扫描整个集合而不是从默认读取信息index id 1 从日志中 find collection filter project
  • 使用 AWS MSK 连接器连接到 AWS VPC 内的 MongoDB atlas

    我正在尝试使用MongoDB使用更改流Kafka 我选择 AWS MSK 是因为我的整个基础设施都位于 AWS 内 并且可以轻松与其他 AWS 服务集成 I created an AWS MSK cluster within the VPC
  • Mongodb聚合数组大小大于匹配项[重复]

    这个问题在这里已经有答案了 我有一个集合 其中投资是 mongodb 文档内的一个数组 现在使用聚合 我尝试过滤投资长度超过 5 倍的结果 然后使用匹配查询进行下一步处理 Collection id 000000 investments h
  • Strapi 未加载 Digital Ocean 上托管的现有 MongoDB 中的集合

    我正在使用 Strapi 创建一个新应用程序 并尝试将其与托管在 Digital Ocean 上的 MongoDB 连接 但不幸的是Strapi 无法从现有 MongoDB 获取集合 在这里 我提到我实现 Strapi 与现有 MongoD
  • 未找到“MongoId”类(带有 MongoDB Doctrine 的 Zend 框架)

    我目前正在尝试将 MongoDB 与 ZendFramework 中的 Doctrine 集成 我做了很多教程 在 StackOverflow 或其他地方 但没有任何效果 我一步步按照教程进行操作 http www bigwisu com
  • 在 mongodb 和 nodejs 中对博客和评级进行建模

    我有一个博客集合 其中包含用户给予的标题 正文和综合评分 另一个集合 评级 其架构引用了博客 以对象 ID 的形式对博客进行评级 如果有的话 的用户以及他们给出的评级 即 1 或 1 当特定用户按照 最新优先 的顺序浏览博客时 比如每页 4
  • Mongodb $push 嵌套数组

    我想向我的嵌套数组添加新数据 我的文档是 username erkin email email protected cdn cgi l email protection password b playlists id 58 name asd
  • C# Mongo DeleteMany - 不使用类

    我在 MongoDB 中有一个普通的 不是 GridFS 集合 我需要访问和删除一些文档 我想 需要在不使用类的情况下执行此操作 昨天 今天尝试了一些事情 并在网上进行了很多搜索并尝试了很多事情 无法弄清楚为什么 deletemany 对我
  • 将日期差转换为年数以计算 MongoDB 中的年龄

    我正在使用以下方法来计算时间戳差异中的年龄 db getCollection person aggregate project item 1 DOB personal DOB dateDifference subtract new Date
  • 一次更新猫鼬中的多个文档

    我有一个用户文档数组 每个用户都有关注者属性 它是一个数字 我只想将此属性增加 1 然后立即更新数据库中的所有这些用户文档 更多细节 在请求中 我有一组用户 id 我使用这些 id 进行查询以获取一组用户文档 const users awa
  • MongoDB中如何通过引用字段进行查询?

    我有两个 Mongo 模式 User id ObjectId name String country ObjectId Reference to schema Country Country id ObjectId name String
  • Mongodb:语法错误:意外的标识符

    我是 mongodb 的新手 我正在使用 mongolab 创建免费数据库 我的数据库名称是 enron 使用在线 mongoshell 连接到 mongo 数据库然后发生错误 mongo ds033499 mongolab com 334
  • Express中间件修改请求

    我目前有一个正在运行的服务器 前端使用nodejs mongo express 和 W2UI W2ui 请求来自包含所有参数的记录数组 记录 名称 foo 我想编写一个中间件 在请求到达路由之前对其进行编辑和更改 您可以创建自己的中间件来处
  • 通过 elemMatch 在 MongoDB 中排序

    MongoDB 有没有一种基于排序的方法 elemMatch 例如 我有如下所示的文档 user ObjectId fsdfsdf array of things attribute 1 ObjectId sdfsdfsd attribut
  • MongoDB 聚合:如何检查数组中是否存在包含多个属性的对象

    我有一个对象数组 我想检查是否有一个对象与多个属性匹配 我尝试过使用 in and and但它并没有按照我想要的方式工作 这是我当前的实现 https mongoplayground net p dEQp2Q4DW0j 我有一个像这样的数组
  • 如何在CentOS 5.3上安装php-mongodb?

    我已经在我的 VPS 上安装了 mongoDB 效果很好 现在我想安装 php 驱动程序以使 php 与 mongoDB 一起工作 我跟着蒙戈安装 http www php net manual en mongo installation
  • Node.js 和 Passport 对象没有 validPassword 方法

    我正在使用 Node js Express Passport 创建一个简单的身份验证 本地 到目前为止我所达到的效果是 当输入错误的用户名或密码时 用户将被重定向到错误页面 但是当用户输入正确的用户名和密码时 我收到此错误 node mod
  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数

随机推荐

  • 使用 HTTP 上传文件。收到错误:- HttpSendReuest 12005

    我想使用 HTTP 将 D er txt 上传到网络服务器 当我运行程序时 我收到 HttpSendRequest 12005 错误 我在我的网络服务器上使用了一个 PHP 脚本 它将接受该文件并将其存储在名为 upload 的预制目录中
  • 持久“记住我”Cookie 的竞争条件

    根据持久登录 Cookie 最佳实践 http fishbowl pastiche org 2004 01 19 persistent login cookie best practice 您不应该允许多次使用 记住我 令牌 持久性 coo
  • 由于未知表而无法删除表(错误 1051)

    我正在尝试从我继承的架构中删除一个表 当我SHOW TABLES I get Tables in schema a table 1 table 2 table 3 table 4 table 5 table 6 但是当我执行时
  • 领域 + NSTableView + NSArrayController

    我的 macOS 应用程序有一些问题 希望您能帮助我 我对 macOS 还很陌生 所以请多多关照 应用程序的一部分由一个简单的 NSTableView 组成 其内容绑定到 NSArrayController NSArrayControlle
  • Apache poi:删除 XWPFDocument 中的图片

    我正在编写一个应用程序 它采用带有一堆空段落和表格的 docx 文件 并使用 Apache POI 和数据库中的数据以编程方式填充它们 我提供的 docx 模型中还包含一系列图片 我的问题是我想删除不需要的图片 再次以编程方式 我看到有一种
  • TextMate 语法——规则的优先级

    我正在尝试修改 CSharp 语言的语法突出显示 因此我将在 C 字符串中获得 SQL 的语法突出显示 TextMate 支持嵌入语言 因此这似乎是可能的 我建立在csharp tmLanguage json https github co
  • 在 git 中交换暂存和未暂存更改的最短方法是什么?

    如果有一些更改添加到索引中 而有一些更改未添加到索引中 我如何交换这两组更改 它认为这对于临时提交来说是最容易做到的 当您有暂存和未暂存的提交时 在尝试对更改重新排序时可能会发生冲突 对分阶段的更改进行提交 创建一个分支供以后使用 git
  • 如何在 OpenAPI / Swagger 中递归引用封闭类型定义?

    我正在 Swagger 编辑器中编写 OpenAPI 定义 我的类型定义之一包含一个数组 其中包含与父元素类型相同的子元素 IE 像这样的东西 definitions TreeNode type object properties name
  • Centos 7 / Apache / PHP - mkdir():权限被拒绝

    在你大喊重复之前 并将我放逐至深渊 听我说完 我一直在为我工作的公司开发一个内联网站点 最初我是直接从运行的工作站上开发它Windows 7 IIS 当我接近完成网站 应用程序时 我得到了Centos 7正在运行的盒子Apache 所以我已
  • 定期刷新网页

    我的要求是我有一个 php 页面 必须根据数据库中的数据显示一些图形 数据 我想自动并定期刷新页面 以便可以更新图形 数据 因为数据仅在加载页面时获取 我怎样才能做到这一点 也许你可以尝试 setTimeout javascript 方法
  • 使用正则表达式查找字符串中的确切字符

    我有像下面这样的字符串 M10 end start M11 M1 M1 start M n1 end M1 我想要实现的目标是仅获得 M1 使用正则表达式 这是我当前的代码 Regex r new Regex M1 M1 输出如下所示 缺少
  • 在 scala 项目上 - 运行 sbt test 命令时出现错误 GC 开销限制超出

    我是 Scala 编程新手并正在学习GC overhead limit exceeded我执行时出错sbt test大型 scala 项目之一中的命令 有人知道我该如何解决这个问题吗 我得到了朋友的帮助 通过使用 mem 选项执行来增加内存
  • 用于检查属性不包含两个值的 CSS 选择器

    我有一个非常奇怪的 CSS 问题想要解决 我正在寻找任何 html 元素not have display none 以其任何有效形式 内联在style属性 一些例子
  • 如何访问 GTK/Gnome 上的主题字体和颜色

    假设我想编写一个特殊的文本编辑器小部件 我如何获得文本的默认主题颜色 选定的文本和背景 这是用户默认的 字体 我看到 GNOME 确实定义了 5 种特殊的系统字体和默认大小 为此 在 GNOME 外观配置对话框中 但我在 GTK 文档中没有
  • 如何在私有子网上运行Dataflow python?

    Apache Beam 2 1 0 添加了对在私有子网上的 Dataflow 运行器上提交作业且无需公共 IP 的支持 这是我们需要满足防火墙规则的 我打算使用squid代理来访问apt get pip等安装python依赖项 代理实例已经
  • 需要动态转换派生类:寻找替代方法

    我以这种简单的形式提出我的问题 class animal public animal name animal virtual void makenoise cout lt lt name lt
  • 替换 Javascript 构造函数的 .prototype 而不是添加它是否存在问题?

    我遇到过另一个开发人员的代码 它执行类似的操作来定义 Javascript 类型 function Ninja Ninja prototype swingSword function return true 当更传统的方式是这样的 func
  • 解析 allocator::rebind 调用

    我刚刚学习 C 分配器 我试图理解的目的struct rebind在每个分配器中 例如 在这个程序 https msdn microsoft com en us library 5fk3e8ek aspx include
  • Android 上 AVRCP 的最佳实践(将元数据发送到蓝牙设备)

    我想通过 Android 4 3 设备将元数据发送到蓝牙设备 我遇到的有效解决方案是向 google android music 谷歌音乐应用程序 发送意图 通知它有关元数据的信息 如下所示 通过A2DP AVRCP发送曲目信息 https
  • 为什么不建议在生产中启动单独的 MongoDB 实例作为副本集?

    根据评论中的讨论这个答案 https stackoverflow com a 51239633 330867 kevinadi 建议我提出一个与他的评论相关的新问题 您可以出于开发目的使用一个节点启动一个副本集 请注意 这不是生产环境的推荐