MongoDB操作最佳实践(六)

本文探讨了MongoDB在不同环境下的部署策略,包括虚拟化、IaaS平台及裸金属服务器的选择,强调了分片系统中mongos和config服务器的合理配置,以及Linux操作系统与文件系统的优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

每台主机进程

为了获得最佳性能,用户应该在每个主机上运行一个mongod进程。通过使用虚拟化或容器技术来进行适当的大小调整和资源分配,可以在单个服务器上运行多个MongoDB进程,而不会争用资源。使用WiredTiger存储引擎,管理员将需要计算每个实例的适当缓存大小,方法是评估每个实例应该使用总RAM的哪个部分,并在每个实例之间分割默认的cache_size。

为了高可用性,同一副本集的多个成员不应该位于同一物理硬件上,或者共享任何单点故障,例如电源。在云中运行时,利用虚拟化提供者跨可用性区域部署的能力,确保来自每个副本集的成员在地理上分散,并且不共享相同的电源、管理程序或网络。

 

虚拟化与IaaS

客户可以在裸金属服务器、虚拟环境和云中部署MongoDB。尽管许多MongoDB用户利用基础设施即服务(IaaS)平台,如亚马逊Web服务的弹性计算云(AWS EC2)、谷歌计算引擎(Google Compute Engine)、微软Azure、Rackspace等,但使用裸金属通常性能最好,也最稳定。

Mongos和Config服务器进程的大小

对于分片系统,其他进程必须与mongod数据存储进程一起部署:mongos查询路由和config服务器。分片是分布在多个服务器上的数据的物理分区。有关分片的更多信息,请参阅关于使用分片的水平扩展的部分。使用称为mongos的查询路由进程将查询路由到适当的碎片。mongos用于确定将查询路由到哪里的元数据由config服务器维护。mongos和confi服务器进程都是轻量级的,但是每个进程都有一些不同的大小要求。

在分片内部,MongoDB进一步将文档分区为块。MongoDB在config数据库中维护关于块与片关系的元数据。在分片部署中维护三个或更多个config服务器,以确保元数据始终可用。碎片元数据访问很少见:每个mongos维护该数据的缓存,当块被分割或迁移到其他分片时,后台进程定期更新该缓存,通常在集群扩展和收缩的平衡操作期间。因此,config服务器的硬件应该关注可用性:应该使用冗余电源、冗余网络接口、冗余RAID控制器和冗余存储。config服务器可以部署为具有多达50个成员的副本。

通常,在MongoDB分片系统中使用多个mongos实例。MongoDB用户在每个应用服务器上部署mongos实例并不罕见。mongos服务器的最佳数量将由应用程序的特定工作负载决定:在某些情况下,mongos只是将查询路由到适当的分片,而在其他情况下,mongos必须将查询路由到多个分片并合并结果集。为了估计每个mongos的存储器需求,考虑以下几点:

• 由mongos缓存的分片元数据的总大小
• 每个应用程序连接的1MB
Mongos进程使用有限的RAM,并且更快速的CPU和网络会有更好的结果。

操作系统与文件系统

Linux配置

MongoDB只支持64位版本的操作系统。对于具有MMAPv1存储引擎的MongoDB,32位系统是可用的,但是只提供与旧开发环境的向后兼容性。MongoDB WiredTiger版本不能用于32位平台。

在生产中使用MongoDB应该在Linux内核的版本2.6.36或更高版本中。

尽量使用EXT4或XFS文件系统;避免使用EXT3,EXT3相当旧,对大多数数据库工作负载来说都不是最佳的。例如,MMAPv1为数据预先分配空间。在EXT3中,预分配实际上将0写入磁盘以分配空间,这很耗时。在EXT4和XFS中,预分配作为逻辑操作来执行,这更有效。

对于WiredTiger存储引擎,强烈建议使用XFS,以避免在与WiredTiger一起使用EXT4时所观察到的性能问题。

对于Linux上的MongoDB,使用以下推荐配置:

  • 关闭带有数据库文件的存储卷的atime。
  • 不要使用巨页虚拟内存页,MongoDB在普通虚拟内存页上表现更好。
  • 在BIOS中禁用NUMA,或者在禁用NUMA的情况下调用mongod。
  • 确保存储数据库文件的块设备的预读设置相对较小,因为大多数访问都是非顺序的。例如,将readahead设置为32(16KB)是一个很好的开始。
  • 同步主机之间的时间——例如,使用NTP。这对于分片的MongoDB集群尤其重要。这也适用于运行MongoDB进程的VM客户机。

Linux提供控制以限制每个进程和每个用户的资源和open files的数量。默认设置可能不够MongoDB。通常,MongoDB应该是系统、VM或容器上的唯一进程,以确保与其他进程没有冲突。

虽然每个部署都有独特的要求,但是以下配置是mongod和mongos实例的良好开始。使用ulimit配置这些设置:

  •  -f (file size): unlimited
  • -t (CPU time): unlimited
  • -v (virtual memory): unlimited
  • -n (open files): above 20,000
  • -m (memory size): unlimited
  • -u (processes/threads): above 20,000

有关使用ulimit设置MongoDB的资源限制的更多信息,请参阅Linux ulimit Settings上的MongoDB文档页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值