热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

本文是翻译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。因此,增加核心数量虽然有帮助,但不会提供显著的回报。

  使用固态硬盘(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

推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • centos php部署到nginx 404_NodeJS项目部署到阿里云ECS服务器全程详解
    本文转载自:http:www.kovli.com20170919ecs-deploy作者:Kovli本文详细介绍如何部署NodeJS项目到阿里云ECS上, ... [详细]
  • 一、前言在数据库中,慢查询日志通常是用来进行优化数据库,MySQL中存在慢查询,Mongodb中也是如此。在Mongo中的慢查询属于Mon ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
author-avatar
warzsy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有