MongoDB生产环境性能和可靠性注意事项

本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容。这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,

本文是翻译mongodb manuel中的mongodb production notes一节内容。这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署mongodb的工作者们关注。本文详细描述了影响mongodb,特别是生产环境的关键系统配置。以下是正文。

  安装包

  确保你安装了最新的稳定版本。这是了解最新版本的最佳场所,即使你稍后选择从包管理器安装。

  生产环境始终使用64位版本。32位版本是为测试和部署环境准备的,不适于生产环境部署,因为它只能存储2GB以内的数据。了解更多内容请查看32位限制。

  32位版本的存在是为满足非正式环境的使用场景。

  操作系统

  MongoDB发行版目前可用于Max OS X,Linux,Windows Server 2008 R2 64位版,Windows 7(32位及64位版),Windows Vista,以及Solaris平台。

  注意:在可能的情况下,MongoDB使用GNU C库(glibc)。MongoDB要求版本至少在glibc-2.12-1.2.el6以避免早先版本一个已知的Bug。为了效果最佳请使用至少2.13版本。

  并发

  早先版本的MongoDB中所有写操作都集中使用实例中的唯一一个读写锁。从2.2开始,每个数据库开始具有一个独立的读写锁,这使得一个数据库可以并发读,同时每个数据库有了独立的写控制。查看并发页了解更多信息。

  日志

  MongoDB使用预先写日志到磁盘日志的办法来保证MongoDB能够快速从崩溃或其他严重错误中恢复写操作。

  为了保证mongod能够从崩溃中恢复并继续处于可用状态,你应该启用日志。查看日志页以了解更多内容。

  网络

  使用可信任网络环境

  始终在可信任环境中运行MongoDB,并启用网络策略禁止未知机器,系统和网络访问。犹如依赖网络访问的任何一个敏感系统一样,你的MongoDB环境应该只为指定的,需要访问的系统开发,例如应用程序服务器,监控服务及其他MongoDB组件。

  注意:默认情况下认证功能未开启,mongod推断自己处于可信任环境中。如有必要你可以启用安全认证模式。

  查看安全章节的内容以了解更多信息。特别是:

  ●配置选项

  ●防火墙

  ●为MongoDB配置Linux iptables防火墙

  ●为MongoDB配置Windows netsh防火墙

  对于Windows用户,在Windows上部署MongoDB时考虑Windows Server TCP技术文章中的内容。

 

  连接池

  为避免单个mongod或mongos实例连接资源越负荷,请确保客户端维护了合理数量的连接池配置。

  connPoolStats数据库命令能够返回一个分片集群里mongos和mongod实例中当前数据库打开连接的信息。

  硬件考量

  MongoDB的设计是基于兼容大多数硬件考虑,几乎没有特别的要求或限制。MongoDB的核心组件能够运行于小端字节优先的硬件,主要是x86/x86_64处理器上。客户端类库(例如驱动)在大端优先或小端优先系统上都可以运行。

  硬件需求和限制

  能够让MongoDB最有效率地运行的硬件应该包含以下特性:

  分配了足够的内存和CPU

  犹如对于所有软件一样,更多的内存和更快的CPU时钟频率对于性能很重要。

  基本上,数据库并非受限于CPU。因此,增加核心数量虽然有帮助,但不会提供显著的回报。

可灵AI 可灵AI

可灵AI:新一代AI创意生产力平台

可灵AI 10856 查看详情 可灵AI

  使用固态硬盘(SSD)

  MongoDB使用SATA SSD能得到很好的效果和很好的性价比。

  在足够经济的情况下请使用SSD。传统硬盘也可能很有效率,但SSD对于随机IO访问的良好支持更符合mongod的数据更新模型。

  传统硬盘通常也是个好的选择,因为使用更昂贵的硬盘来提高随机IO性能并不是那么有效(只能是每次2倍)。使用SSD或增加RAM的容量可能对于提升IO更有效率。

  避免使用远程文件系统

  远程文件存储系统可能对MongoDB造成性能问题。查看远程文件系统了解更多关于MongoDB和存储的信息。

  MongoDB和NUMA硬件

  重要:这里讨论的NUMA仅限于Linux系统,因此不影响运行于其他类Unix系统或Windows系统。

  在运行NUMA的系统中运行MongoDB可能造成一系列问题,包括一段时间内的效率低下和高系统进行使用率。

  当运行MongoDB在NUMA硬件上时,你应该为MongoDB禁用NUMA并使用Interleave内存策略。

  注意:MongoDB 2.0以上版本如果部署在Linux系统上,启动时会检查系统配置,如果系统是基于NUMA的,会给出警告。

  为禁用NUMA并启用interleave内存策略,请使用numactl并使用以下方式启动mongod

  numactl –interleave=all /usr/bin/local/mongod

  然后,为了禁用proc配置中的zone reclaim,请使用以下命令:

  echo 0 > /proc/sys/vm/zone_reclaim_mode

  为了彻底禁用NUMA,你必须操作以上两步。了解更多信息,请查看/proc/sys/vm/*文档。

  查看MySQL“疯狂交换”问题和NUMA效果一文,它描述了NUMA对数据库造成的影响。这篇博客确定了NUMA对MySQL的影响,但对于MongoDB的影响也是类似的。这篇文章介绍了NUMA和它的目标,并指出了为什么这些目标和生产环境数据库的需求是不相容的。

 

  磁盘和存储系统

  虚拟内存

  为你的系统分配虚拟内存。分配虚拟内存可以避免内存争抢问题,同时可以阻止Linux系统的OOM Killer杀死mongod。

  mongod使用的映射内存文件到内存的方法可以确保操作系统从来不会把MongoDB数据放进虚拟内存。

  RAID

  绝大多数MongoDB应该使用RAID-10磁盘系统。

  RAID-5和RAID-6典型情况下不能为MongoDB提供足够好的性能。

  MongoDB应该避免使用RAID-0。RAID-0提供了足够好的写性能,但它只能提供有限的可用性,并且可能导致读操作性能低下,特别是在Amazon EBS卷上。

  远程文件系统

?

  MongoDB不推荐使用网络文件系统(NFS),因为一些版本的NFS性能低下。

  当数据文件和日志文件同时位于NFS上时就会发生性能问题。如果你把日志放到本地或iscsi上则可能得到更好的性能体验。如果必须使用NFS,添加以下NFS选项到你的/etc/fstab文件:bg,nolock及noatime。

  把不同的组件放到不同的存储设备

  为了提高性能,考虑把你的数据库的数据,数据日志和应用日志按照你的应用程序的读写模式放到不同的存储设备上。

  注意:这会影响你创建数据快照的能力。因为文件会在不同的设备和卷上。

  架构

  Write Concern

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/542725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NASA 利用 AI 预测太阳风暴,地球可提前半小时应对危机
上一篇 2025年11月9日 16:01:31
快手视频如何上热门_快手视频上热门的技巧与策略
下一篇 2025年11月9日 16:01:33

相关推荐

  • Laravel自定义用户提供者?用户提供者怎样实现?

    自定义用户提供者可集成非Eloquent模型与多种数据源,如NoSQL、API、LDAP或文件,通过实现UserProvider和Authenticatable接口,灵活处理用户检索与密码验证,解决认证问题需确保接口方法正确实现并合理配置。 自定义 Laravel 用户提供者允许你使用非 Eloqu…

    2026年9月11日
    100
  • 数据量大的App制作,数据库如何选型?

    在开发处理大量数据的应用程序时,数据库的选择至关重要。选择一个合适的数据库不仅能确保数据的存储效率和安全性,还能提升应用程序的整体性能和用户体验。以下将从几个关键方面探讨如何为数据量大的app选择合适的数据库。 首先,考虑数据量的大小。 对于数据量庞大的应用程序,首要考虑的是数据库的存储能力和扩展性…

    2026年9月7日
    000
  • 在 Spring Boot Web 应用程序中序列化枚举

    枚举类型在定义应用程序域内有限且明确的值集方面非常有效,有助于避免代码中出现无效状态。 应用场景 以下以一个Spring Boot 3.3.x 和 MongoDB 实现的笔记Web应用为例,演示枚举值的序列化和反序列化方法。 我们将定义一个Type枚举,表示待办事项的类型:事件和活动。 public…

    2026年9月7日
    000
  • 玩转mongoDB(五):mongoDB 3.0+ 查询性能分析

    为了展示mongodb的性能分析方法,我们首先创建一个包含200万个文档的集合。(在我的电脑上,插入过程大约耗时15分钟。如果您想插入更多文档,只要有耐心等待即可。) 为了演示的效果,我们先来创建一个有200万个文档的记录。(我自己的电脑耗了15分钟左右插入完成。如果你想插更多的文档也没问题,只要有…

    2026年9月7日
    200
  • MySQL如何监控数据库性能_有哪些常用监控工具?

    MySQL如何监控数据库性能_有哪些常用监控工具?MySQL如何监控数据库性能_有哪些常用监控工具?MySQL如何监控数据库性能_有哪些常用监控工具?MySQL如何监控数据库性能_有哪些常用监控工具?

    mysql性能监控需关注关键指标、使用合适工具、设置告警并注意易忽略细节。一、最关键监控指标包括连接数、qps/tps、慢查询数量、innodb读写情况、锁等待与死锁;二、常用工具包括show processlist、pmm、zabbix、prometheus+grafana、pt-query-di…

    2026年9月5日 用户投稿
    100
  • 高效单元测试:使用Helmich/Mongomock模拟MongoDB

    我最近参与开发一个基于mongodb的项目,其中涉及大量的数据库操作。为了保证代码质量,我们需要编写全面的单元测试。然而,直接使用真实的mongodb进行单元测试带来了诸多不便:测试速度慢,需要搭建和维护测试数据库,以及测试环境的依赖性等问题。这些问题严重影响了开发效率和测试的稳定性。 为了解决这个…

    用户投稿 2026年9月4日
    200
  • 这次简单多了,最新版 MongoDB 安装

    这次简单多了,最新版 MongoDB 安装这次简单多了,最新版 MongoDB 安装这次简单多了,最新版 MongoDB 安装这次简单多了,最新版 MongoDB 安装

    在 windows 10 系统上安装 mongodb 4.0.1 版本变得更为简便,基本上一路点击“下一步”就能完成安装,不再需要繁琐的配置。 首先,访问 MongoDB 官方网站,下载 MongoDB 4.0.1 版本,网址如下: https://www.php.cn/link/9cba84644…

    2026年9月4日 用户投稿
    300
  • Web全栈开发者如何提升技能,获得更好的就业机会?

    Web全栈开发:提升技能,拓展职业发展 如何提升Web全栈开发技能,从而获得更理想的就业机会,是许多开发者共同关注的问题。本文将探讨有效提升全栈开发能力的途径,帮助您在竞争激烈的就业市场中脱颖而出。 虽然无法提供具体的全栈学习路线图,但我们可以从编程大师的经验中汲取灵感。 (此处省略图片,但其核心思…

    2026年9月2日
    200
  • MongoDB ObjectId类型转换报错:如何正确处理String到ObjectId的转换?

    MongoDB ObjectId类型转换错误排查与解决 在MongoDB数据库操作中,ObjectId类型常常引发转换错误。ObjectId是MongoDB文档的唯一标识符,与普通字符串不同,直接转换可能导致异常。本文针对“将字符串转换为ObjectId时报错”的问题提供解决方案。 用户反馈的错误信…

    2026年9月1日
    000
  • MongoDB ObjectId类型转换错误:字符串转ObjectId失败如何排查?

    MongoDB ObjectId转换错误排查指南 在使用MongoDB时,经常需要将字符串类型的ID转换为ObjectId类型。如果转换失败,将会影响数据库操作。本文针对字符串转ObjectId报错问题提供排查方法。 问题:将字符串转换为ObjectId时报错,错误信息未提供,但可能原因与字符串ID…

    2026年9月1日
    100
  • 如何在CentOS和Fedora上将Node.js程序与MongoDB连接

    本篇文章将介绍关于将node.js应用程序与mongodb连接的方法。另外,在centos和redhat系统上使用mongoose节点应用程序为nodejs配置mongodb驱动器。 步骤1:首要条件 我们假设系统上已经安装了node.js和mongodb。如果没有安装,可以参考下面的文章完成所需的…

    2026年8月30日
    000
  • laravel支持几种数据库

    Laravel 支持多种数据库连接,包括:MySQL、PostgreSQL、SQLite、SQL Server、MariaDB、MongoDB 和 Redis。要连接到数据库,您需要在 .env 文件中设置配置并使用 DB 外观进行连接。 Laravel 支持的数据库 Laravel 是一个 PHP…

    2026年8月30日
    100
  • Spring Boot集成Nacos时,为什么读取不到配置项“spring.data.mongodb.uri”?

    Spring Boot项目Nacos配置中心读取“spring.data.mongodb.uri”失败分析 在使用Spring Boot整合Nacos配置中心时,经常会遇到配置读取失败的情况。本文针对错误提示“Could not resolve placeholder ‘spring.d…

    2026年8月28日
    100
  • Node.js/JavaScript:高效转换嵌套对象数组为自定义字符串格式

    本文将指导您如何在Node.js或JavaScript环境中,将来自MongoDB等数据源的嵌套对象数组,高效地转换为扁平化的自定义字符串格式。通过运用Array.prototype.map()、解构赋值、展开语法和模板字面量等现代JavaScript特性,您将学会如何优雅地处理复杂数据结构,实现清…

    2026年8月27日
    100
  • MySQL如何支持强化学习环境 使用MySQL管理强化学习状态和动作数据

    mysql可通过设计episodes、transitions、policies和hyperparameters等表构建结构化数据模型,支持强化学习的数据持久化;2. 数据写入采用批量插入策略以减少i/o开销,读取时利用索引提升采样效率,并结合json或blob字段存储复杂状态与动作;3. 为应对高并…

    2026年8月27日
    200
  • 游戏服务器(Game Server)的后端架构

    游戏服务器的后端架构重要,因为它直接影响玩家的游戏体验。1) 高效的网络架构如使用tcp/ip和websocket处理客户端请求;2) 负载均衡通过nginx和haproxy分配流量;3) 数据同步使用分布式数据库如redis保证数据一致性;4) 安全性通过加密算法和验证机制防范攻击;5) 扩展性利…

    2026年8月27日
    200
  • 表单数据验证与过滤的最佳实践

    我们需要重视表单数据的验证和过滤,以确保应用的安全性和数据的完整性。1) 结合使用客户端和服务器端验证,客户端提供即时反馈,服务器端确保数据安全。2) 验证不同类型的数据,如字符串、数字、日期,确保格式和业务逻辑正确。3) 处理错误时提供友好的错误信息,并防止泄露敏感信息。4) 使用适当的函数过滤数…

    2026年8月26日
    000
  • 为什么多年的经验让我选择全栈而不是平均栈

    在全栈和平均栈开发方面工作了 6 年多,我可以告诉您,虽然这两种方法都是流行且有效的方法,但它们满足不同的需求,并且有自己的优点和缺点。这两个堆栈都可以帮助您创建 Web 应用程序,但它们的实现方式却截然不同。如果您在两者之间难以选择,我希望我在两者之间的经验能给您一些有用的见解。 在这篇文章中,我…

    2025年12月24日
    300
  • 使用HTML表单GET方法创建带查询参数的动态搜索链接

    本教程详细阐述了如何在网页中,通过简单地将HTML表单的提交方法从`POST`更改为`GET`,来自动生成包含用户选择搜索条件的动态URL查询参数。这使得搜索结果页面的链接可分享、可收藏,并简化了%ignore_a_1%生成复杂URL的逻辑,后端可直接从URL中解析查询参数进行数据检索。 引言:动态…

    2025年12月23日
    000
  • Web表单提交:如何利用GET方法构建动态查询链接

    本文将指导您如何利用html表单的get方法,根据用户输入的搜索条件动态生成带有查询参数的url。当用户在表单中输入数据并提交时,get方法会自动将表单字段及其值附加到url作为查询字符串,从而创建如`/search?param1=value1&param2=value2`的链接。这对于实现…

    2025年12月23日
    100

发表回复

登录后才能评论
关注微信