为第一次配置MongoDB做好准备:容量计划和监督

假使你早就完结了友好新的MongoDB应用程序的支出,并且现在正准备将它配备进产品中,那么您和您的运营团队需要讨论一些紧要的题目:

  • 至上配置举行是咋样?
  • NoSQL,为了确保应用程序满意它所必须的劳务层次我们需要监控哪些重大目标?
  • 何以可以确定增长分片的空子?
  • 有咋样工具得以对数据库举办备份和复苏?
  • 怎么样才能安全地访问具有新的实时大数额?

本文介绍了硬件选择、扩张、HA和督察。在查看详细音讯此前,首先让我们处理一个最普遍的问题:

配备MongoDB和配备RDBMS有什么样不同?

你会意识MongoDB作为一个文档数据库,它和您曾经深谙的关系型数据库分享了好多同一的定义、操作、策略和进程。监控、索引、调整和备份等情节的流程和特等实践能够使用到MongoDB。同时假使您想要开首协调的扶植,那么可以从MongoDB大学中得到到来自于开发者和DBA的免费在线课程。

系统性能和容量规划是多少个第一的核心,任何部署都亟待处理这两个问题,无论是RDBMS依旧NoSQL数据库都是这样。作为规划的一部分我们应该对数据卷(volume)、系统负荷、性能(吞吐量及延迟时间)和容量利用建立基线。这多少个基线应该反映您对数据库在产品环境中举行的劳作负荷的希望,它们应该乘机用户数、应用程序效率、性能SLA或者其他因素的转移定期地调整。

基线将扶持你精通系统怎么着时候是按部就班设计运行的,哪些时候恐怕会影响用户体验质量如故其他决定性系统因素的题目先河显示。

上面将会谈论关键的配备要素,包括硬件、增添和HA,同时还会谈谈为了保全最佳的系统特性你应该监控哪些内容。

接头自己的工作集

在为布局MongoDB优化硬件预算的时候,RAM应该是要么接近于列表的第一位。

为了兑现低顺延的数据库操作MongoDB中广泛运用了RAM。在MongoDB中,所有的多少都是经过内存映射文件读取和操作的。从内存中读取数据是行使阿秒来度量的,而从磁盘中读取数据则是接纳皮秒度量的,所以从内存中读取数据几乎比从磁盘中读取要快了十万倍。

在正常操作期间最频繁造访的多寡和目录的集纳称为工作集,在卓绝的状态下它们应该在RAM中。工作集可能是整套数据库的一小部分,例如方今的风波所提到的应用程序数据或者最常访问的热门产品。

MongoDB试图访问数据时暴发的页面错误并不会被加载到RAM中。假诺有空余内存,那么操作系统将一定到磁盘上的页面并将它们一向加载到内存中。不过一旦没有空余内存,那么操作系统必须将内存中的一个页面写入磁盘,然后将被呼吁的页面读取到内存中。这一个流程比访问已经存在于内存中的数据要慢。

有些操作可能会在不经意间从内存中革除大量的工作集,这样会对性能爆发严重影响。例如,对于一个浏览数据库中拥有文档的询问而言,假若数据库比服务器上的RAM大,那么将会促成文档被读入内存而工作集被写出到磁盘。在档次的形式设计阶段为投机的询问定义合适的目录将会极大地下降这种高风险发生的可能。MongoDB说明操作可以为查询计划和目录的使用提供信息。

MongoDB劳动意况命令中含有了一个管用的出口:工作集文档,它提供了一个MongoDB实例工作集的估算大小。运营社团能够遵照给定的时光跟踪实例访问的页面数,包括工作集中最旧的文档到新型的文档之间的运作时刻。通过跟踪那些目标我们可以发现什么日期工作会议接近现在的RAM限制从而积极地拔取行动确保系统是可扩张的。

MongoDB管理服务mongostat可知襄助用户监督内存的应用意况,下边我们将会对此展开详细地谈论。

储存和磁盘I/O

MongoDB不需要共享存储(例如存储区域网络)。MongoDB能够采纳当地附加的囤积和固态硬盘(SSD)。

MongoDB中的大部分磁盘访问情势并不曾各种属性,这样做的结果便是客户可以透过动用SSD拿到巨大的属性获益。咱们早就观看到应用SATA
SSD和PCI得到的完美结果和强有力的性质。商业SATA旋转驱动器能够比美成本更高的旋转驱动器,那得益于MongoDB的非顺序访问格局:应该更实用地选择预算将其用来更多的RAM或者SSD上,而不是更多地用来昂贵的旋转驱动器上。

在数据文件获益于SSD的还要,MongoDB的日记文件由于其自我的高依次的写属性成为了急忙健康磁盘的一个很好的候选。

大部MongoDB部署应该选拔RAID-10。RAID-5和RAID-6没有提供丰硕的性质。RAID-0提供了很好的写性能,不过读性能有限,容错能力也相差。部署的MongoDB可以透过副本集(下面将会谈论)提供很强的数额可用性,同时用户应该考虑接纳RAID和任何因素满意想要的SLA可用性。

虽说我们应有设计MongoDB系统让它的干活集适合于内存,但是磁盘I/O依旧是一个着重的习性考虑。MongoDB会定期地将写操作刷新到磁盘并交给到日记,所以在写负载较重的时候基础的磁盘子系统或许会变得不堪重负。iostat命令能够用于展示高磁盘利用率和过多的写队列。

CPU接纳——速度依旧基础?

MongoDB的性质一般不会绑定到CPU上。因为MongoDB很少会遇需要选用大量内核的干活负荷,比起时钟速度较慢的多核服务器最好的采纳是有更快的钟表速度。

无论什么系统,测量CPU的利用率都是分外重大的。假若观察到CPU的利用率很高只是并没有出现磁盘饱和或者页面错误这样的其余题目,那么系统中或者会设有不平庸的问题。例如,一个存在但是循环的MapReduce工作或者一个尚无创设优质索引就对工作集中的雅量文档举行排序和过滤的查询都可能会招致CPU利用率的攀升,不过它们却不会掀起磁盘系统问题如故页面错误。用于监控CPU利用率的工具将在底下介绍。

扩充数据库——哪一天扩张和什么扩大?

MongoDB通过一种叫做Sharding的技艺提供了档次扩大能力。Sharding可以在五个大体分区(称为片)之间分发数据。Sharding可以让MongoDB的配置解决单个服务器的硬件限制而不需要充实应用程序的复杂性,解决的硬件限制包括RAM和磁盘I/O的瓶颈。

NoSQL 1

MongoDB自动分片和应用程序的透明度

在系统资源变得半点从前实现分片是分外容易的,由此容量规划和主动监督在需要成功地扩大应用程序时是不行关键的要素。

在底下的面貌中用户应该考虑安排一个分片的MongoDB集群:

  • RAM限制:系统活动工作集的分寸很快就会领先系统RAM的最大容量。
  • 磁盘
    I/O限制:系统有恢宏的写活动,但是操作系统写多少的快慢不够快,不可以满意急需;同时/或者I/O带宽限制了数据写入磁盘的速度。
  • 存储限制: 数据集接近或者超过了系统中的单个节点的仓储容量。

Sharding的靶子之一就是在多台服务器之间一致地分发数据。若是服务器资源的利用率并不是接近地相等,那么可能会设有引发调度错误的神秘问题。例如,拔取一个不好的分片键可能会促成不平衡的数据分发。在这种状态下,即使不是有着的而是多数查询也会被导向到正在管理数据的极度单独的MongoDB。

除此以外,MongoDB可能会总括再度分发文档从而在服务器之间实现更为美丽的平衡。即便再次分发最后会实现一种更加中意的文档分发,然而有大气与重新平衡数据相关的工作,这么些干活儿本身就有可能会发生潜移默化导致无法落实预期性能的SLA。

透过运行db.currentOp()命令,你将可以精通集群现在正值推行什么样工作,包括跨分片的文档再平衡。

为了保证数量可知在集群中的所有分片间均匀地分发,拔取一个名特优的分片键是老大重大的。MongoDB文档中含有了一个有关如何抉择好好分片键的科目

MongoDB复制集的高可用性

MongoDB使用当地复制维护复制集以内的五个数据副本。复制集可以因而发现错误(服务器、网络、OS或者数据库)和自动化故障修复避免停机时间。推荐的做法是:所有的MongoDB部署都应有安排复制。

(单击放大图片)

NoSQL 2

使用MongoDB复制集自恢复生机

对主节点数据库的改动操作会通过名为oplog的日志被复制到其他二级节点上。oplog包含了一个排序的幂等操作的聚集,该集合中的操作会在二级节点上重播。oplog的轻重缓急是可安排的,默认是可用磁盘空间的5%。

正如下边的图片所论述的,可以由此一定副本为服务器、机架、数据核心故障和网络分区提供容错性。

(单击放大图片)

NoSQL 3

复制延迟是用作健康运作的一局部来监督的。它意味着的是将主节点上的一个写操作复制到二级节点上所花费的岁月。一定的延迟是健康的,不过如若复制延迟增长,则可能会掀起问题。复制延迟暴发的卓著原因概括网络延迟、连接问题和磁盘延迟(例如二级节点的吞吐量劣于主节点)。

复制状态和复制延迟可以由此replSetGetStatus命令重新恢复生机。

日记概述

用作所有配置的一部分,应该监控应用程序和数据库的日志以便发现错误并查阅其他的连串消息。将应用程序和数据库的日记关联起来是不行重大的,因为这么才能说了算应用程序中的活动最后是否需要对系统中的其他题材担当。例如,用户写入峰值可能会增添写入MongoDB的容量,这反过来或者会压垮下边的贮存系统。假若没有应用程序和数据库日志的涉嫌,那么可能要花费更多的时间才可以规定写入容量的增进是应用程序的问题而不是运作在MongoDB中的某些进程的题材。

MongoDB 监控工具

MongoDB包含了各个监督工具,让您可知主动地管理类别的周转和属性。

MongoDB管理服务 (MMS)

MongoDB管理服务(MMS)提供了云监控和备份服务,援助用户优化集群、解决性能问题、减轻运维风险。MMS备份服务将在事后的篇章中钻探。

MMS监控辅助图表、自定义仪表盘和自定义警告。MMS仅需要最低限度的设置和安排。用户在享有的MongoDB实例上安装一个当地代理,该代理会跟踪与数据库使用意况有关的数百个至关首要的正常化目的,包括:

  • 操作数(Op Counters)—每分钟执行的操作的数码
  • 内存(Memory)—MongoDB正在使用的数据量
  • 锁百分比(Lock Percent)—写锁消耗时间的百分比
  • 后台刷新(Background Flush)—将数据刷新到磁盘消耗的平分时间
  • 老是(Connections)—MongoDB当前开拓的连日的多少
  • 队列(Queues)—等待运行的操作的数量
  • 页面错误(Page Faults)—磁盘的页面错误数
  • 复制(Replication)—主节点操作日志的长短以及复制延时
  • 日志(Journal)—写入日志的数据量

(单击放大图片)

NoSQL 4

这多少个目标会被本溪地报告给MMS服务,告诉它它们是在何地处理、聚合、通告的,并在浏览器中可视化突显。用户能够容易地遵照各类性能目标了解他们集群的健康境况。

硬件监控

Munin
node
是一个开源软件程序,它可以监控硬件并告诉磁盘和RAM的接纳意况这样的目标。MMS可以收集Munin
node暴发的这个数据,并在MMS仪表盘中将那些数据和此外数据一起突显给用户。因为每一个应用程序和布局都是绝无仅有的,所以用户应该为磁盘利用率的峰值、网络移动的最重要变化和平均查询长度/响应时间的滋长创设警报。

数据库分析工具

MongoDB提供了一个性能分析工具,该工具可以记录数据库操作相关的细粒度信息。分析工具得以记下所有事件的音信,也可以只记录那一个持续时间超出了部署阈值的事件的信息。分析数据存储在一个定位集合中,用户可以很容易地从中寻找相关的轩然大波——查询这一个集合可能比尝试着去分析日志文件进一步便于。

其余的督查工具

有充分多采的监察工具让您可知从其余的地点深远了然MongoDB系统。

  • mongotop
    是随MongoDB提供的一个工具,它可以跟踪并告诉一个MongoDB集群当前的读、写活动。
  • mongostat
    是随MongoDB提供的另一个工具,它为保有的操作提供了一个完善概览,包括革新、插入的计数,页面错误、索引的散失情况以及许多其他的涉及到系统健康的紧要性目标。
  • Iostat、vmstat、netstat和sar这样的Linux工具也能为深入探索MongoDB系统提供有价值的信息。
  • 对此Windows环境上的用户而言,性能监控器(Performance
    Monitor,一个Microsoft管理控制台单元)是一个相当实用的工具,可以用来测量各样目的。

假如想要获取更多与监控工具和监督内容有关的音信,可以查阅MongoDB文档中的监察数据库系统页面。

配置MongoDB

用户应该将安排选项存储到MongoDB的部署文件中。sysadmins可以通过这种方法在全部集群之间实现一致性的布局。配置文件帮助MongoDB命令行所匡助的所有选项。安装和升级换代应该经过流行的工具(例如Chef和Puppet)自动完成,同时MongoDB社区还提供并维护了那些工具的以身作则脚本。

一个基础的MongoDB配置文件类似于下边的始末:

  • fork = true
  • bind_ip = 127.0.0.1
  • port = 27017
  • quiet = true
  • dbpath = /srv/mongodb
  • logpath = /var/log/mongodb/mongod.log
  • logappend = true
  • journal = true

你可以透过文档精通到与MongoDB配置选项有关的更多内容。在MongoDB文档产品认证页面上还维护着针对操作系统、文件系统、存储设备和此外系统有关核心特定配置的风靡指出。

结论

在本文中我们介绍了怎么用于部署关系型数据库的定义、操作和流程能够被一向地采纳到MongoDB上,同时还介绍了硬件采取和部署及监督的特等实践。另外,有关于所有这一个核心的详实谈论可以从MongoDB操作指南(一个.pdf文件)中获取。

至于作者

NoSQL 5Mat Keep (@matkeep)
是MongoDB产品营销团队的一员,负责为MongoDB的制品和劳务构建愿景、定位和内容,同时也承担对市场趋势和客户需求开展辨析。在上任于MongoDB在此以前,Mat是Oracle集团的成品管理总裁,负责MySQL数据库在Web、电信行业、云和大数据方面的使用。在这之后她还在技能供应商和面向最后用户的商家中从事过一名目繁多的工作,包括销售、商业支出与分析、程序员。

查看英文原文Preparing for Your First MongoDB Deployment: Capacity
Planning and
Monitoring

翻开中文原文:为第一次配置MongoDB做好准备:容量计划和监理

网站地图xml地图