Overview
您可以使用不同的部署类型、云提供商和集群层来构建 Atlas 集群,以满足预生产或生产环境的需求。 使用这些建议来选择部署类型、云提供商和区域以及用于执行向量Atlas Search的集群和Atlas Search层。
environment | 部署类型 | 集群层 | 云提供商地区 | 节点架构 |
---|---|---|---|---|
测试查询 | Flex or dedicated cluster Local deployment | M0 , Flex, or higher tierN/A | All N/A | MongoDB和Atlas Search进程在同一节点上运行 |
应用程序原型设计 | 专用集群,分片或非分片 |
| 所有 | MongoDB和Atlas Search进程在同一节点上运行 |
生产 | 具有独立搜索节点(分片或非分片)的专用集群 |
| MongoDB和Atlas Search进程在不同节点上运行 |
以下各节描述了每个环境:
测试和原型环境
为了测试您的搜索查询和为您的应用程序创建原型,我们建议采用以下部分中描述的部署类型和节点架构。
此配置最适合以下用例:
要索引的总文档少于 2M
少于 10 GB 的索引数据
在 7 天内少于 10,000 次查询
如果使用量超过列出的值,请迁移至专用搜索节点。
以下各节更详细地描述了此节点架构。
- 部署类型
要在云中的集群上测试MongoDB搜索查询,您可以部署Flex 或专用集群。
要在本地测试MongoDB搜索查询,请使用Atlas CLI 创建本地Atlas部署。这可以是本地计算机上托管的单节点副本集。本地部署受到本地计算机的 CPU、内存和存储资源的限制。当您的应用程序准备好投入生产时,将本地Atlas部署迁移到生产环境。
- Cluster Tiers
要测试MongoDB搜索查询,请使用免费 (
M0
) 和 Flex 集群。要对应用程序进行原型设计,请使用专用的
M10
、M20
和更高层级的集群,或部署专用的搜索节点以实现工作负载隔离性。当您的应用程序准备投入生产并可以处理大型数据集时,升级到更高层级。- 云提供商和地区
使用任何受支持的云提供商区域。
您选择的云提供商和地区会影响可用于集群层的配置选项以及运行集群的费用。
节点架构
对于测试和原型环境,我们建议采用MongoDB进程和MongoDB搜索进程在同一节点上运行的节点架构。在此部署模型的下图中, MongoDB Search mongot
进程与 mongod
一起在Atlas 集群中的每个节点上运行,并且它们股票相同的资源。

默认下,当您创建第一个MongoDB Search索引时, Atlas会在运行 mongod
进程的同一节点上启用MongoDB Search mongot
进程。
运行查询时, MongoDB Search 会使用配置的读取偏好(read preference)来识别运行查询的节点。查询首先进入MongoDB进程,对于副本集集群为 mongod
,对于分片集群为 mongos
。
对于副本集集群,mongod
进程会将查询路由到同一节点上的 mongot
。对于分片的集群,您的集群数据跨 mongod
实例(分片)进行分区,并且每个 mongot
进程只能访问权限同一节点上的 mongod
实例上的数据。因此,您无法运行针对特定分片的MongoDB Search 查询。mongos
将查询路由到所有分片,使这些查询成为分散聚集查询。如果您使用区域将分片的集合分布在集群中的一部分分片上, MongoDB Search 会将查询路由到包含您正在查询的集合的分片的区域,并仅对以下分片运行$search
查询,其中集合所在的位置。
将查询路由到MongoDB搜索mongot
进程后,mongot
进程执行搜索和评分,并将匹配结果的文档ID 和其他搜索元数据返回相应的mongod
进程。然后, 进程对匹配结果隐式执行完整文档查找,并将结果返回客户端。如果在查询中使用mongod
$search
并发选项, MongoDB Search 将启用查询内并行机制。要学习;了解更多信息,请参阅跨分段并行查询执行。
要了解有关 mongot
过程的更多信息,请参阅查询处理。
您可以在MongoDB Search索引中定义存储的源字段,以便 mongot
进程可以在 mongot
上存储指定的字段。然后,您可以在MongoDB Search查询中使用 returnStoredSource 选项,直接从 mongot
检索匹配文档的检索字段,而不是在数据库中执行完整文档查找。
收益分析
启用MongoDB Search 后,您可以使用完全托管搜索引擎(自动同步到数据库)轻松地在数据上构建搜索。MongoDB Search 提供了一种丰富的查询语言,该语言使用MongoDB Search聚合管道阶段(例如用于全文搜索的$search
和 $searchMeta
以及与其他MongoDB聚合管道阶段结合使用的 $vectorSearch
进行语义搜索)以及基于分数的结果排名。
根据为集群预配的资源,在同一节点上部署这两个进程可能比在单独的专用节点上运行搜索进程更具成本效益。
限制
您可能会遇到数据库 mongod
和搜索 mongot
进程之间的资源争用。这可能会对索引性能和查询延迟产生负面影响。为了支持生产就绪的应用程序及其搜索工作负载,请迁移至专用搜索节点。
成本
在Atlas 集群上启用MongoDB Search 时,无需支付额外费用或收费。但是,您可能会发现大型索引集合或索引定义的集群资源利用率有所增加。
Considerations
由于 mongod
和 mongot
进程在同一节点上运行,因此在某些情况下,mongot
可能不可用。 下表描述了可能的原因:
原因 | 说明 |
---|---|
集群层扩展 — 网络存储 | 当您向上或向下扩展集群时, Atlas会预配一个新实例。 实例准备就绪后, Atlas会附加网络存储并在新节点上启动 如果 |
集群层扩展 — 本地固态硬盘 | |
Lucene降级 | 在需要降级Lucene 的极少数情况下,您可能无法读取较新的Lucene索引格式。 |
存储调整 | 您可以保留连接到Atlas 集群节点的网络存储。 这样,您就可以在不影响 但是,在某些区域、当集群使用本地 NVMe 磁盘或其他罕见情况下,可能无法保留网络存储。在这些情况下, Atlas会执行初始同步,搜索查询将失败,直到初始同步完成。 |
| 在 |
新的 | 当您向集群添加新节点时, Atlas会执行初始同步以创建搜索索引。 在初始同步完成之前,使用新 |
实例重启或替换 |
|
| 每当由于配置更改而导致 |
生产环境
对于您的生产就绪应用程序,我们建议使用以下各节中描述的部署类型和节点架构。
此配置最适合以下用例:
如果您选择将现有测试环境迁移到生产环境,请向集群添加专用搜索节点。要学习;了解更多信息,请参阅迁移到专用搜索节点。
如果您从头开始创建新的生产部署,请确保在MongoDB Search 可用的地区和分区中使用支持MongoDB Search 的
M10
或更大层级的集群,并为您的环境添加专用的 Search Nodes。要学习;了解更多信息,请参阅添加专用搜索节点。
- 部署类型
对于生产就绪型应用程序,请使用
M10
、M20
和更高的专用集群层级。这些更高层级的集群可以处理大型数据集和生产工作负载。我们建议您还部署专用搜索节点。如果您的搜索需求增加,您可以扩展搜索部署,而无需扩展MongoDB节点。
- 云提供商和地区
在所有 Google Cloud 区域以及部分 AWS 和 Azure 区域中使用搜索节点。您必须选择一个云提供商和可部署搜索节点的地区。
所有集群层在支持的云提供商区域均可使用。您选择的云提供商和区域会影响集群可用的配置选项和搜索层级以及运行集群的成本。
节点架构
对于生产环境,我们建议采用一种节点架构,其中MongoDB进程和MongoDB搜索进程在单独的节点上运行。要部署单独的搜索节点,请参阅迁移到专用搜索节点。
在此部署模型的下图中, MongoDB Search mongot
进程在专用搜索节点上运行,这些节点与运行 mongod
进程的集群节点是分开的。

Atlas 为每个集群或集群上的每个分片部署搜索节点。例如,如果您为具有三个分片的集群部署两个搜索节点,则 Atlas 会部署六个搜索节点(每个分片两个)。您还可以配置搜索节点的数量,以及为每个搜索节点配置的资源量。
当您部署单独的搜索节点时, Atlas会自动为每个 mongot
分配一个 mongod
以便索引。mongot
与 mongod
通信,侦听并同步其存储的索引的索引更改。MongoDB搜索对您的查询进行索引和处理,类似于 mongod
和 mongot
进程在同一节点上运行的部署。要学习;了解更多信息,请参阅支持的客户端以及查询和索引。要学习;了解有关单独部署搜索节点的更多信息,请参阅用于隔离工作负载的搜索节点。
当您迁移到搜索节点时,Atlas 会部署搜索节点,但不会在节点上提供查询,直到它在搜索节点上的集群上成功构建所有索引。当 Atlas 在新节点上构建索引时,它会继续使用集群节点上的索引提供查询。仅当 Atlas 在搜索节点上成功构建索引并删除集群节点上的索引后,它才会开始从搜索节点提供查询服务。
运行查询时,查询会根据配置的读取偏好路由到 mongod
。mongod
进程通过同一节点上的负载均衡器路由搜索查询,以便将请求分发到所有 mongot
进程。
MongoDB Search mongot
进程执行搜索和评分,并将匹配结果的文档ID 和元数据返回给 mongod
。然后,mongod
对匹配结果执行完整文档查找,并将结果返回给客户端。如果在查询中使用 $search
并发 选项, MongoDB Search 将启用查询内并行机制。要学习;了解更多信息,请参阅跨分段并行查询执行。
如果删除集群上的所有搜索节点,则在处理搜索查询结果时会出现中断。要学习;了解更多信息,请参阅修改集群。如果删除Atlas 集群, Atlas会暂停,然后删除所有关联的MongoDB Search 部署(mongot
进程)。
您可以在MongoDB Search索引中定义存储的源字段,以便 mongot
进程可以在 mongot
上存储指定的字段。然后,您可以在MongoDB Search查询中使用 returnStoredSource 选项,直接从 mongot
检索匹配文档的检索字段,而不是在数据库中执行完整文档查找。
收益分析
单独部署搜索节点具有以下优势:
- 高可用性
- 当您部署单独的搜索节点时,Atlas 会强制使用至少两个搜索节点,以确保在出现故障或中断时您的工作负载保持运行状态,将停机时间降至最低。
- 可扩展性
当您部署单独的搜索节点时,您可以在不依赖 MongoDB 集群的情况下独立扩展存储和计算能力。这使您可以独立于 MongoDB 扩展查询负载。
要扩展扩展搜索节点,请增加或减少搜索节点的数量。您可以预配最少 2 个、最多 32 个搜索节点。为了平衡查询负载, MongoDB Search 将搜索查询分布在所有可用的搜索节点上。
要垂直扩展搜索节点,请选择支持您全文工作负载的不同搜索层级、CPU、RAM和存储配置。
- 性能
在部署专用搜索节点时,您可以提高
mongod
和mongot
进程的性能和资源利用率,并消除这些进程之间的资源争用。专用搜索节点支持并发分段搜索,这允许MongoDB Search 同时搜索多个索引段。在某些情况下,使用并发分段搜索可缩短查询响应时间。
调整和扩展搜索节点大小的技巧
如要确定搜索节点的内存需求,请参考以下 Atlas 指标:
搜索索引的大小
搜索节点上的总 RAM
假设某个应用程序的搜索索引为 10GB,而搜索节点的总 RAM 为 4 GB。在这种情况下,如果其他进程使用了 1 GB RAM,而只有 3 GB 可用于索引数据,则剩余的 7 GB 索引数据(10 GB - 3 GB = 7 GB)将根据需要从磁盘分页读取。频繁从磁盘进行分页会导致页面错误、磁盘 I/O 和 CPU IOWait 增加,从而造成性能下降。
如果您使用具有更多 RAM 的更高搜索集群层(例如 8GB 或更多),这将允许 Atlas 从内存中提供搜索索引的大部分数据,最大限度地减少磁盘读取和页面错误,从而提高性能。
注意
用于搜索节点的本地固态硬盘需要 20% 的存储开销来支持索引操作。
搜索节点成本
MongoDB 仅支持在专用(M10
或更高版本)集群上使用单独的搜索节点。搜索节点部署在计算密集型 NVMe 实例上。必须至少部署两个节点。每天将按每个节点的每小时资源使用量向您收费。如要了解更多信息,请参阅搜索节点成本。
启用静态加密
默认下, MongoDB和搜索进程在同一节点上运行。在这种架构中,客户管理的加密适用于数据库数据,但不适应用搜索索引。
启用专用搜索节点后,搜索进程将在单独的节点上运行。这允许您启用搜索节点数据加密,以便您可以使用相同的客户托管密钥对数据库数据和搜索索引进行加密,以实现全面的加密覆盖范围。
要了解更多信息,请参阅为搜索节点启用客户密钥管理。
注意
KMS 提供商均提供此功能,但搜索节点必须位于 AWS 上。
添加专用搜索节点
向新集群添加专用搜索节点可以使您:
独立于集群更改搜索部署的大小和规模。
消除在同一节点上运行 MongoDB 数据库和搜索进程的集群中可能出现的资源争用。
要添加专用搜索节点:
迁移到专用Atlas Search节点
要从暂存迁移到生产并添加专用搜索节点,请对现有的暂存和原型部署进行以下更改:
如果您的部署使用 Flex 集群,请将集群层级变更为更高的层级。专用搜索节点仅支持
M10
及更高集群层级。在支持搜索节点的区域中部署集群。专用搜索节点在部分 AWS 和 Azure 区域以及所有受支持的 Google Cloud 区域均可使用。如果您的现有集群托管在搜索节点不可用的区域,请将集群迁移到搜索节点可用的区域。如需了解更多信息,请参阅支持节点隔离的云提供商区域。
启用 Search Nodes for workload isolation 并配置搜索节点。要了解更多信息,请参阅添加搜索节点。
部署专用搜索节点时,会执行以下操作顺序:
Atlas 在搜索节点上构建搜索索引,并从集群节点中移除这些索引。
Atlas 将搜索查询路由到搜索节点。
MongoDB Search 使用搜索索引在Atlas 集群上提供服务查询服务。
排除部署故障
Failed to Execute search Command
错误
如果您部署 mongot
以与 mongod
一起运行并且未配置搜索节点,则 mongot
可能会在以下任何事件中终止并返回 Failed to Execute search Command
错误:
扩展集群
节点故障转移
正在升级
mongot
如果您在专用搜索节点上部署 mongot
,mongod
将使用代理仅将搜索查询路由到 mongot
进程处于活动状态的健康节点。