微信号:infoqchina

介绍:有内容的技术社区媒体

为首次部署MongoDB做好准备:容量计划和监控

2014-01-24 19:36 InfoQ

将MongoDB应用程序的部署进产品中,需要讨论一些关键的问题:

最佳部署实践是什么?

为了确保应用程序满足它所必须的服务层次我们需要监控哪些关键指标?

如何能够确定添加分片的时机?

有哪些工具可以对数据库进行备份和恢复?

怎样才能安全地访问所有新的实时大数据?

 

本文介绍了硬件选择、扩展、HA和监控。首先让我们处理一个最常见的问题:


部署MongoDB和部署RDBMS有什么不同?


MongoDB作为一个文档数据库,和关系型数据库分享了很多同样的概念、操作、策略和过程。监控、索引、调整和备份等内容的流程和最佳实践可以应用到MongoDB。

 

系统性能和容量规划是两个重要的主题。作为规划的一部分应该对数据卷(volume)、系统负载、性能和容量利用建立基线。


清楚自己的工作集


在为部署MongoDB优化硬件预算的时候,RAM应该是或者接近于列表的第一位。为了实现低延迟的数据库操作MongoDB中广泛使用了RAM。在MongoDB中,所有的数据都是通过内存映射文件读取和操作的。在正常操作期间最频繁访问的数据和索引的集合称为工作集,在理想的情况下它们应该在RAM中。有些操作可能会在不经意间从内存中清除大量的工作集,这样会对性能产生严重影响。在项目的模式设计阶段为自己的查询定义合适的索引将会极大地降低这种风险发生的可能性。

 

MongoDB服务状态命令中包含了一个有用的输出:工作集文档,它提供了一个MongoDB实例工作集的估算大小。

 

MongoDB管理服务和mongostat能够帮助用户监控内存的使用情况。


存储和磁盘I/O


MongoDB不需要共享存储。MongoDB能够使用本地附加的存储和固态硬盘(SSD)。


MongoDB中的大部分磁盘访问模式并没有顺序属性,这样做的结果便是客户可以通过使用SSD获得巨大的性能收益。我们已经观察到使用SATASSD和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很少会遇需要利用大量内核的工作负载,比起时钟速度较慢的多核服务器最好的选择是有更快的时钟速度。


扩展数据库——何时扩展和如何扩展?


MongoDB通过一种称为Sharding的技术提供了水平扩展能力。Sharding能够在多个物理分区(称为片)之间分发数据。Sharding可以让MongoDB的部署解决单个服务器的硬件限制而不需要增加应用程序的复杂性,解决的硬件限制包括RAM和磁盘I/O的瓶颈。Sharding的目标之一就是在多台服务器之间一致地分发数据。另外,MongoDB可能会试图重新分发文档从而在服务器之间实现更加理想的平衡。


通过运行db.currentOp()命令,你将能够了解集群现在正在执行哪些工作,包括跨分片的文档再平衡。

 

为了确保数据能够在集群中的所有分片间均匀地分发,选择一个优秀的分片键是非常重要的。MongoDB文档中包含了一个关于如何选择优秀分片键的教程。


MongoDB复制集的高可用性


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


使用MongoDB复制集自恢复


对主节点数据库的修改操作会通过名为oplog的日志复制到其他二级节点上。oplog包含了一个排序的幂等操作的集合,该集合中的操作会在二级节点上重放。oplog的大小是可配置的,默认是可用磁盘空间的5%。

 

复制延迟是作为正常运行的一部分来监控的。它表示的是将主节点上的一个写操作复制到二级节点上所花费的时间。复制状态和复制延迟可以通过replSetGetStatus命令重新恢复。


日志概述


作为所有部署的一部分,应该监控应用程序和数据库的日志以便发现错误并查看其他的系统信息。将应用程序和数据库的日志关联起来是非常重要的。


MongoDB监控工具


MongoDB管理服务(MMS)提供了云监控和备份服务,帮助用户优化集群、解决性能问题、减轻运维风险。


硬件监控


Muninnode是一个开源软件程序,它可以监控硬件并报告磁盘和RAM的使用情况这样的指标。MMS能够收集Muninnode产生的这些数据,并在MMS仪表盘中将这些数据和其他数据一起展现给用户。因为每一个应用程序和部署都是唯一的,所以用户应该为磁盘利用率的峰值、网络活动的主要变化和平均查询长度/响应时间的增长创建警报。


数据库分析工具


MongoDB提供了一个性能分析工具,该工具能够记录数据库操作相关的细粒度信息。分析工具可以记录所有事件的信息,也能够只记录那些持续时间超出了配置阈值的事件的信息。

 

如果想要获取更多与监控工具和监控内容相关的信息,可以查看MongoDB文档中的监控数据库系统页面。


配置MongoDB


用户应该将配置选项存储到MongoDB的配置文件中。sysadmins能够通过这种方式在整个集群之间实现一致性的配置。配置文件支持MongoDB命令行所支持的所有选项。安装和升级应该通过流行的工具(例如Chef和Puppet)自动完成,同时MongoDB社区还提供并维护了这些工具的示例脚本。


更多精彩内容,请点击阅读原文。


***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************


 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 程序员,你知道 Hello World 的历史么? K-近邻算法的R实现 做好软件测试需要具备的思维方式 无休止加班的成因 【UXRen活动现场笔录】当我们谈论产品用研时我们在谈论什么?