【五】MongoDB管理之生产环境说明
下面详细说明影响mongodb的系统配置,尤其在生产环境上。
1、生产环境推荐的平台
- Amazon Linux
- Debian 7.1
- Red Hat / CentOS 6.2+
- SLES 11+
- Ubuntu LTS 12.04
- Ubuntu LTS 14.04
- Windows Server 2012 & 2012 R2
推荐使用官方最新的64位发行版本。
2、网络配置
1)使用可信任的网络环境
MongoDB总是运行在可信任的网络环境中,通过网络规则设置避免所有不知来历的机器访问。MongoDB应该部署在独立的环境中,这个环境仅仅能被应用server,监控服务,mongodb组件等访问。
2)禁用HTTP接口
3、连接池管理
为了避免连接超载,确保客户端维护合理的连接池大小,调整连接池的大小以适应具体案例,一般而言,开始连接池大小设置为数据库请求并发数的110-115%。
4、硬件配置说明
MongoDB对于服务器的硬件有一定的需求和限制。
1)分配充足的CPU和RAM
- 对于MMAPv1存储引擎:由于它本身的并发模型设计,MMAPv1并不需要更多的CPU核心,所以,增加CPU核心在一定程度上有所帮助但是性能提升并不显著。增加RAM能够帮助减少发生分页错误频率。
- 对于WiredTiger存储引擎:它是为多线程设计,能够利用很多CPU核心,所以,活跃线程总数对应于CPU的数量能够提升性能。随着活跃并发操作数量增加到系统CPU个数,系统吞吐量增加;随着活跃并发操作数超过系统CPU的个数阙值,系统吞吐量下降;
这个系统阙值数依赖于你的应用程序,你可以通过实验测量系统吞吐量来决定最优的活跃并发数。mongostat工具的输出能够提供活跃并发的读写数据。在v3.2版本中,默认使用WiredTiger存储引擎,MongoDB可以利用操作系统文件系统cache和WiredTiger引擎的cache。WiredTiger v3.2 cache默认设置为1GB或者内存的60%,取其中大的。当然,我们可以自己设置:一般而言,服务器物理内存10G以下的,比较合理的设置值是小于等于3G;对于物理内存大于10G的,可以大于3G。在v3.0版本中,cache默认为1G或物理内存的一半,取其中大的。
注意:storage.wiredTiger.engineConfig.cacheSizeGB仅仅限制WiredTiger cache大小,不会限制mongd服务占用内存的总量。WiredTiger cache仅仅是mongodb使用内存的一个组件,除此之外,mongodb还可以利用操作系统中文件系统cache。
如果一台节点上只有一个mongodb实例,那么建议使用默认的WiredTiger cache即可;如果一台节点上有多个实例,那么你需要考虑减少WriedTiger cache的大小以满足其他实例的需要。
2)使用SSDs(固态硬盘)
MongoDB在使用SATA SSDs上有很好的性价比。如果经济条件允许,建议使用SSDs。SSDs在随机IO操作上的性能表现完全适应于MMAPv1存储引擎的更新模型。通过使用SSDs和增加内存能够提升I/O的吞吐量
3)NUMA设置
MongoDB运行在NUMA系统上,能够导致一些操作问题,如间断性性能低下、高系统进程占用等。所以需要对内存交叉策略进行配置以使主机是non-NUMA状态,MongoDB在启动时就会对系统的NUMA进行检查,如果NUMA配置降低性能了就会进行警告提示。
- windows系统上NUMA配置
内存策略通过BIOS配置,具体请参考系统资料
- liunx系统上NUMA配置
numactl --interleave=all <path> #path是mongod路径
echo > /proc/sys/vm/zone_reclaim_mode
4)磁盘存储系统
- swap分配:分配系统swap空间能够避免内存争用、预防系统出现OOM杀死mongod进程等问题。对于MMAPv1存储引擎,mongodb不会在swap空间中存储数据。(windows环境另算);对于WiredTiger存储引擎,mongodb可能会在swap中存储数据。
- RAID:建议使用raid10,其他不建议。
- 文件系统类型选择:对于MMAPv1存储引擎,建议xfs或ext4,如果可能,优先选择xfs。对于WiredTiger存储引擎,强烈推荐使用XFS文件系统,因为能够避免使用ext4产生的性能问题。一般而言如果你用xfs文件系统,操作系统内核版本应该在2.6.25及以后;如果使用ext4文件系统,建议内核版本2.6.23及以后。
5、其他建议配置(liunx)
- 对于存储数据库文件的磁盘卷,建议关闭atime
vim /etc/fstab
#在存储数据库文件的磁盘卷设备上default后面加上noatime,nodiratime
UUID=98a683e4-ab44-4fe4-85de-7808ee5f167d /data xfs defaults,noatime,nodiratime
- 设置unlimit值大于20000
- 禁用Transparent Huge Pages
- 禁用NUMA
- 设置SELinux on Red Hat
- 如果使用分片集群,别忘了使用NTP同步主机的时间,这个是特别重要的。
【五】MongoDB管理之生产环境说明的更多相关文章
- 使用Asset Pipeline管理rails生产环境静态资源实现步骤
1. 修改项目中指向静态资源文件的链接 a) 访问静态资源文件 <%= stylesheet_link_tag "application", media: &q ...
- git管理测试生产环境代码
利用post-update实现简单钩子 #!/bin/bash cd /www/test || exit #进入指定的目录 unset GIT_DIR #清楚环境变量 git checkout mas ...
- 从零开始部署Django生产环境(适用:《跟老齐学Python Django实战》)
<跟老齐学Python Django实战>作为市面上少有的Django通俗实战书籍,给了我学习Django很大的帮助.作为一名新入门的菜鸟,全书我重复练习了至少三遍,每次都有新的收获. 前 ...
- MongoDB 生产环境笔记
目录 MongoDB 生产环境笔记 一.vm.zone_reclaim_mode 参数 二.添加 swap 分区 三.设置 swappiness 参数 四.内核和文件系统版本 五.禁用 Transpa ...
- [译]MongoDb生产环境注意事项
译注: 本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容.这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署MongoDB的工作者 ...
- MySQL 系列(五) 多实例、高可用生产环境实战
MySQL 系列(五) 多实例.高可用生产环境实战 第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 史上最屌.你不知道的数据库操作 第三 ...
- 一次生产环境下MongoDB备份还原数据
最近开发一个版本的功能当中用到了MongoDB分页,懒于造数据,于是就研究了下从生产环境上导出数据到本地来进行测试. 研究了一下,发现MongoDB的备份还原和MySQL语法还挺类似,下面请看详细介绍 ...
- prometheus+grafana 监控生产环境机器的系统信息、redis、mongodb以及jmx
介绍: 为了更好的对生产环境的一些中间件和操作系统的运行情况进行可视化的展示,近期了解了下prometheus加上grafana来实现这种效果,由于prometheus是新出来的开源项目,所以,监控的 ...
- java mongodb连接配置实践——生产环境最优
之前百度,google了很多,发现并没有介绍mongodb生产环境如何配置的文章, 当时想参考下都不行, 所以写篇文章,大家可以一块讨论下. 1. MongoClientOptions中的连接池配置: ...
随机推荐
- 【转】Intellij IDEA常用配置详解
1. IDEA内存优化 先看看你机器本身的配置而配置. \IntelliJ IDEA 8\bin\idea.exe.vmoptions -------------------------------- ...
- java中利用WeakHashMap实现缓存
简介 WeakHashMap是Java集合框架里的一员,从名字可以看出它是某种 Map.它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除,即使程序员没有调用remove() ...
- Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage mvc mvp的 java c#.net php js
Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage mvc mvp的 java c#.net php js 原理 通过vm带入启 ...
- idea设置自定义快捷键
在说明之前,先引入一个非常好的 Intellij Idea中文教程:intelliJ Idea中文教程 一创建模板类 二使用方法备注 在IntellijIdea中我并没有找到直接对某个方法进行注释的模 ...
- iOS左滑手势失效
iOS7之后,苹果优化了一个小功能,就是对于UINavagationController堆栈里的UIViewController,只要轻轻在视图控制器的左边缘右滑一下,该视图控制器就会pop出栈(前提 ...
- Android 你可能忽略的提高敲代码效率的方式 (转)
每日推荐 Eyepetizer-in-Kotlin:一款简约的小视频app,带你走进kotlin 作为学习kotlin的一款app,在撸代码的过程中学习kotlin的语法及特性. Eyepetizer ...
- UFLDL深度学习笔记 (五)自编码线性解码器
UFLDL深度学习笔记 (五)自编码线性解码器 1. 基本问题 在第一篇 UFLDL深度学习笔记 (一)基本知识与稀疏自编码中讨论了激活函数为\(sigmoid\)函数的系数自编码网络,本文要讨论&q ...
- Shell 编程基础 --语法高速入门
简单的说shell就是一个包括若干行Shell或者Linux命令的文件.对于一次编写,多次使用的大量命令,就能够使用单独的文件保存下来,以便日后使用.通常shell脚本以.sh为后缀.第一行一定要指明 ...
- js实现table内 某列的内容进行即时筛选
往往有些时候,我们把数据从数据库读取出来,显示到table里面,而此时来了个新需求,要在一个搜索框内输入关键字,表格的内容进行即时的筛选. 而即时触发进行数据库的查询,再回调显示,就显得慢,拖累服务器 ...
- 安卓常用的xml控件配件的使用包含shape,declare-styleable、selector
今天就讲我所遇到的常用到的一些通过xml文件制作的背景效果,以后用到的话就直接使用啦!哈哈,我一向就是这么懒! 接下来,就开始介绍了 1.shape的使用,可以混合使用 xml控件配置属性 andro ...