1. 云数据库MongoDB版概述与架构选型
先澄清一个常见的认知误区:从托管型数据库服务开始接触一个产品,并不意味着可以跳过架构层面的思考。云数据库MongoDB版,本质上是阿里云基于MongoDB协议构建的、完全兼容的文档型数据库服务——它继承了MongoDB灵活的数据模型、强大的聚合框架以及水平扩展能力,同时底层由阿里云提供运维保障、自动备份、高可用切换这些企业级特性。
在正式开始对接之前,理解三种部署架构的差异,其实是最关键的一步。很多项目后期出问题,往往不是代码写得不好,而是选型阶段就埋下了隐患。

单节点架构:只提供一个StandAlone节点用于读写数据,性价比最高,但没有任何高可用保障。适用于开发、测试、培训学习这类非核心业务场景——简单说,只适合“玩玩”,不适合“上线”。
副本集架构:提供一个可读写的Primary节点、一个或多个Secondary节点、以及一个隐藏的Hidden节点。Secondary节点可以分担读压力,并提供高可用保障。对于读多写少或有临时活动的生产业务,这个架构是入手的好选择。说实话,大多数中小型生产项目,从副本集架构开始,性价比很理想。
分片集群架构:由Mongos、Shard、ConfigServer三个组件构成,支持水平扩展存储空间与计算性能。适用于高并发读写、数据量巨大的核心业务场景。
选择架构时,需要综合考虑数据量预期、并发规模、可用性要求与成本预算。对于不少项目来说,副本集架构是一个可以在成本和安全之间取得平衡的起点。
2. 开通服务与创建实例
使用云数据库MongoDB版的第一步,是开通服务并创建实例。首先要注册并登录阿里云账号。新用户的话,阿里云提供了副本集实例的免费试用活动,企业认证用户可以去阿里云免费试用页面申请资格。
创建实例的操作流程如下:进入MongoDB管理控制台,点击“创建实例”。以创建按量付费的MongoDB 8.0版副本集实例为例,需要配置以下核心参数:
- 地域与可用区:选择靠近业务服务器的位置,降低延迟。
- 数据库版本:建议选择较新的稳定版本,MongoDB 8.0相比7.0,读取性能提升20%-36%,写入性能提升35%-58%。
- 主备节点数:通常选择三节点,实现高可用。
- 存储引擎:固定为WiredTiger。
- 存储类型:可选ESSD云盘等。
- 网络类型:固定为专有网络。如果后续通过ECS访问,推荐选择与ECS相同的VPC,实现内网互通。
- 规格与存储空间:根据业务预估选择。
- 用户名:固定为root。密码可以在创建时立即设置,或后续重置。
创建完成后,在实例列表中可以看到新建的实例,状态变为“运行中”后,就可以进行后续操作了。
另外,阿里云也支持通过Terraform以基础设施即代码的方式创建MongoDB实例。创建一个工作目录,在其中编写main.tf配置文件,通过Terraform就可以在指定地域创建VPC、交换机及MongoDB副本集实例。
3. 设置IP白名单——安全访问的第一道防线
为保障MongoDB数据库的安全稳定,系统默认任何设备都无法访问云数据库MongoDB实例(默认IP地址为127.0.0.1)。所以,在使用实例前,必须将客户端的IP地址添加到白名单中。
设置白名单的步骤如下:在MongoDB控制台的目标实例详情页,点击左侧导航栏的“数据安全性”或“白名单设置”。可以修改默认白名单分组,也可以新建白名单分组。将需要访问实例的客户端IP地址(如ECS内网IP、本地公网IP)添加进去。如果需要通过DMS管理数据库,还要将DMS服务器的IP地址加入白名单。
IP地址支持指定单个IP(如192.168.0.1)或IP段(如192.168.0.0/24),多个IP用英文逗号隔开。单个实例最多添加1000个IP地址或IP段。
必须警惕的是:在生产环境中,绝对不要将白名单设置为0.0.0.0/0,这相当于允许所有IP访问,无异于敞开大门。正确使用白名单,可以使云数据库MongoDB得到高级别的安全保护。建议定期维护白名单。
如果应用部署在Serverless应用引擎SAE中,需要获取SAE应用的VPC和vSwitch的IPv4网段,并添加到白名单中。不同VPC和不同地域之间逻辑上完全隔离,如需跨VPC或跨地域访问,可以通过VPC对等连接或公网NAT网关实现。
4. 连接数据库的多种方式
云数据库MongoDB版支持私网和公网两种连接方式,不同网络环境需要使用不同的连接地址。可以登录MongoDB管理控制台,在“数据库连接”页面查看云数据库MongoDB实例的连接地址。下面以私网连接-专有网络的ConnectionStringURI高可用连接地址为例进行说明。
4.1 通过DMS登录
在MongoDB控制台的目标实例页面右上方,点击“登录数据库”。副本集实例选择Primary节点后跳转至DMS控制台,分片集群实例选择任一节点后跳转。在DMS控制台弹出的登录实例对话框中,输入数据库账号和数据库密码即可登录。
需要注意:DMS在查询数据时,对单个document长度限制为512KB,不支持调整。如需查询更大的数据,可以使用MongoDB Shell。
4.2 通过MongoDB Shell连接
MongoDB提供了两个命令行工具:MongoDB Shell(mongosh)和mongo Shell。mongo Shell是早期版本的客户端工具,MongoDB Shell是升级后的工具。获取ConnectionStringURI高可用连接地址后,在客户端上执行以下命令连接MongoDB:
如果密码中包含特殊字符,需要在连接串中对特殊字符进行转义处理。例如密码ab@#c时,转义后为ab@#c。
4.3 高可用连接地址的重要性
这里想特别强调:云数据库MongoDB版提供的ConnectionStringURI高可用地址,包含了实例所有节点的地址。MongoDB副本集实例的主节点不是固定的某个节点——当出现异常时,系统会触发主备切换。如果使用主节点的直连地址,一旦发生主备切换,客户端将无法执行写操作。而ConnectionStringURI地址在发生主备切换后,写请求会被自动路由到新的主节点上。
所以,为了实现高可用,生产环境的应用程序应当都通过ConnectionStringURI地址连接实例。
4.4 读写分离配置
ConnectionStringURI高可用地址提供了readPreference和readPreferenceTags参数。readPreference参数可以实现读写分离和负载均衡;readPreferenceTags可以将读请求优先发送到标签对应的节点。通过在ConnectionStringURI地址后添加readPreference参数,即可灵活控制读请求的路由策略。
5. 多语言程序代码连接与操作
云数据库MongoDB版完全兼容MongoDB协议,所有官方Driver都支持通过ConnectionStringURI地址连接MongoDB。下面提供Python、Node.js、Ja va三种语言的完整连接与操作代码示例。
5.1 Python连接示例
首先安装pymongo驱动:
Python连接与操作示例代码:
5.2 Node.js连接示例
安装mongodb驱动包:
Node.js连接与操作示例代码:
5.3 Ja va连接示例
Ma ven依赖中添加mongodb-driver-sync:
Ja va连接与操作示例代码:
6. 数据库账号管理
实例创建完成后,云数据库MongoDB版默认在admin数据库中创建一个root账号。通过root账号登录数据库后,可以根据业务需求创建用户并分配权限。这里有一个建议:不要在生产环境中直接使用root账号连接实例。可以创建其他数据库账号,并添加相应权限后连接实例。
通过DMS创建数据库账号的操作如下:在DMS左侧的数据库实例列表中,右键单击目标实例,在弹出的列表中选择“数据库账号管理”。点击“创建数据库账号”,配置用户信息。也可以在DMS的SQL Console页面中执行命令创建账号:
返回结果中ok取值为1.0时表示创建成功。数据库账号创建后,不支持在云数据库MongoDB控制台的账号管理页面查询。
此外,还可以通过访问控制RAM,将MongoDB的管理权限授权给RAM用户(子账号),使用RAM用户管理MongoDB实例。创建RAM用户时,支持设置“控制台访问”和“使用永久AccessKey访问”两种访问方式。
7. 数据备份与恢复
云数据库MongoDB版提供了一整套数据保护方案:容灾、备份、恢复、监控和告警。生成的备份文件存储在阿里云对象存储服务OSS中,不会占用MongoDB实例的存储空间。
自动备份支持用户自行设置备份周期和备份开始时间,可以根据业务低峰灵活配置。备份系统同时支持用户自定义备份策略的自动备份和手动备份。对于云盘版4.2及以上版本,支持自定义设置手动备份的过期策略,保留时间范围为7至730天。
云数据库MongoDB版还提供了高频备份功能,可以根据需求设置分钟级别或小时级别的高频备份。设置高频备份保留的天数,取值范围为1至7天。可以基于备份文件或按实例运行的时间点进行数据恢复。
8. 监控与报警
云数据库MongoDB版提供多达20种的性能指标监控及报警功能。监控平台提供CPU利用率、IOPS、连接数、磁盘空间等实例信息的实时监控及报警。管理控制平台对实例重启、备份、数据恢复等高频高危操作,可以便捷地进行一键式操作。
设置报警规则的操作如下:在目标实例页面的左侧导航栏,点击“报警规则”。点击“设置报警规则”,跳转至云监控控制台。在云监控控制台的“报警规则”页面,点击“创建报警规则”,设置报警规则相关参数。云数据库MongoDB支持为实例的重要监控项设置阈值报警规则,当监控项的值不在设置的阈值范围内时,系统会自动发出报警通知。报警服务支持电话、信息、邮件和Webhook地址等多种通知方式。
9. 性能优化
9.1 索引优化
阿里云MongoDB推出了索引推荐功能,帮助发现漏加索引或使用不恰当索引导致的慢查询,并为这些慢查询提供相应的最优索引。MongoDB索引优化的核心目标是降低集合的扫描量,所以主要关注慢日志中的DocsExamined和KeysExamined指标。DocsExamined表示该条查询扫描的文档个数,如果数量很大,说明索引使用不当。
降低索引的数量也可以减少WiredTiger存储引擎层维护的磁盘文件,有助于缓解实例卡顿或异常问题。索引优化的一些基本原则包括:避免无用索引。如果查询根本不会访问到的字段,索引自然也命中不了,属于无用索引,可以删除。
9.2 分片集群优化
对于分片集群实例,MongoDB按照片键的值的范围将数据拆分为不同的块(chunk),每个块包含了一段范围内的数据。对集合所在的数据库启用分片功能后,mongos可以快速定位请求需要的数据,并将请求转发到相应的Shard节点上。需要为片键的字段建立索引。
合理选择片键是分片集群性能优化的关键。应选择具有较高基数、能够均匀分布数据的字段作为片键——简单说,就是选择一个能把数据打散的字段。
9.3 MongoDB 8.0性能提升
阿里云在国内独家发布MongoDB 8.0版本,这个版本的性能全面提升。读操作性能较7.0提升20%-36%,写操作性能提升35%-58%。新版本推出了升级版TCMalloc,使用每个CPU的缓存而不是每个线程的缓存,以减少内存碎片并使数据库更能适应高压力工作负载。
新版本还优化了复制性能、reshard性能,并在分片、日志、聚合、安全性等方面进行了增强优化。reshardCollection性能改进,支持通过此命令改变集合的分片键并改变数据的分布——这解决了分片集群设计中一个很棘手的痛点。
9.4 连接池配置
通过Connection String URI连接数据库时,在URI末尾加上maxPoolSize参数,即可设置连接池的连接数。通常MongoClient使用默认100的连接池都没问题,但当访问同一个Mongod的源比较多时,就需要合理规划连接池大小。连接池大小应根据业务并发量和数据库规格合理配置,避免连接数过多导致数据库压力过大,或连接数不足导致请求排队。
10. 数据迁移——使用DTS平滑上云
数据传输服务DTS支持将自建MongoDB数据库迁移至云数据库MongoDB中。DTS支持全量数据迁移和增量数据迁移,同时选择这两种迁移类型,可以实现在不停服的情况下平滑地完成数据库迁移。
迁移操作步骤如下:登录数据传输控制台,在左侧导航栏点击“数据迁移”。在迁移任务列表页面顶部选择阿里云MongoDB实例所属地域,点击“创建迁移任务”。配置迁移任务的源库及目标库信息。
几点注意事项:
- 建议在业务低峰期执行数据迁移,否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库负载上升。
- 建议云数据库MongoDB的存储空间比自建MongoDB数据库占用的存储空间大10%。
- 不支持数据库admin和local作为源和目标库。
- 由于DTS写入数据的逻辑为并发写入,会导致目标端占用的存储空间比源端大5%-10%。
- 请确保目标端MongoDB没有与源端相同的主键(默认为_id),否则会导致数据丢失。
- 全量数据迁移不收费,增量数据迁移收费。
11. 安全加固
11.1 透明数据加密TDE
云数据库MongoDB版支持KMS加密,可以通过控制台启用透明数据加密TDE,对数据文件执行实时I/O加密和解密。TDE让数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密。通过使用自定义密钥为MongoDB设置TDE,可以满足企业对数据存储安全的合规性要求,同时确保加密过程对业务透明且高效。开启TDE后,备份文件同样会被加密。TDE在实例级别加密,仅适用于集合。
11.2 审计日志
开通审计日志后,系统将记录写操作的审计信息。审计日志功能帮助定位数据修改的操作者身份或时间点等信息,识别是否存在滥用权限、执行非合规命令等内部风险。开通审计日志后,实例版本在6.0及以上时可能会造成15%-20%的性能损失。新版审计日志引入了冷热分层存储能力。
开通审计日志的操作:在目标实例页面的左侧导航栏选择“数据安全 > 审计日志”,点击“开通审计日志”即可。系统默认在对应地区创建一个名为“nosql-阿里云账号ID-地区ID”的Project,以及名为“mongo_audit_log_standard”和“mongo_slow_run_log”的专属LogStore。
12. 小结
这篇文章系统梳理了阿里云云数据库MongoDB版从开通服务、架构选型、创建实例、设置白名单、多种方式连接数据库、多语言程序代码操作示例、账号管理、备份恢复、监控报警、性能优化、数据迁移到安全加固的完整对接使用流程。
云数据库MongoDB版完全兼容MongoDB协议,提供了稳定可靠、弹性伸缩的数据库服务。通过合理运用ConnectionStringURI高可用地址实现高可用与读写分离,通过索引优化和连接池配置提升性能,通过白名单、TDE加密和审计日志保障数据安全,通过DTS实现不停服平滑迁移——开发者可以快速将MongoDB能力集成到业务系统中,构建高可用、高性能、高安全的生产级应用。
常见问题解答
问1:云数据库MongoDB版支持哪些部署架构?如何选择?
答:支持单节点、副本集和分片集群三种架构。单节点适用于开发测试环境;副本集提供高可用和读扩展能力,适合大多数中小型生产项目;分片集群支持水平扩展,适用于高并发、海量数据的核心业务场景。
问2:连接MongoDB实例时密码中的特殊字符如何处理?
答:需要在连接串中对特殊字符进行URL转义。例如!转义为!,@转义为@,#转义为#,$转义为$。密码ab@#c转义后为ab@#c。
问3:如何实现MongoDB副本集的高可用和读写分离?
答:使用ConnectionStringURI高可用地址连接实例。该地址包含所有节点地址,主备切换后写请求自动路由到新主节点。通过在URI后添加readPreference参数可实现读写分离,如readPreference=secondaryPreferred优先读从节点。
问4:如何优化MongoDB的查询性能?
答:主要关注慢日志中的DocsExamined和KeysExamined指标。通过索引推荐功能发现缺失或不恰当的索引。避免创建无用索引。对于分片集群,合理选择片键并建立索引。升级到MongoDB 8.0可获得20%-36%的读性能提升和35%-58%的写性能提升。
问5:如何将自建MongoDB迁移到阿里云MongoDB版?
答:使用数据传输服务DTS。DTS支持全量迁移和增量迁移,可实现不停服平滑迁移。在DTS控制台创建迁移任务,配置源库和目标库信息即可。建议在业务低峰期执行迁移。
问6:MongoDB实例如何保证数据安全?
答:设置IP白名单限制访问来源,避免设置为0.0.0.0/0。使用RAM子账号进行最小权限管理。启用透明数据加密TDE对数据文件加密。开通审计日志记录所有写操作。定期自动备份数据。
