Atlas Search 部署选项
您可以使用不同的部署类型、云提供商和集群层来构建 Atlas 集群,以满足预生产或生产环境的需求。 使用这些建议来选择部署类型、云提供商和区域以及用于执行向量Atlas Search的集群和Atlas Search层。
environment | 部署类型 | 集群层 | 云提供商地区 | 节点架构 |
---|---|---|---|---|
测试查询 | Shared or dedicated cluster Local deployment | M0 , M2 , M5 , or higher tierN/A | All N/A | MongoDB和Atlas Search进程在同一节点上运行 |
应用程序原型设计 | 专用集群,分片或非分片 | M10 、M20 或更高层级 | 所有 | MongoDB和Atlas Search进程在同一节点上运行 |
生产 | 具有独立搜索节点(分片或非分片)的专用集群 | M10 或更高集群层以及 S10 或更高搜索层级 | 某些区域的 AWS 或所有区域的 Google Cloud 和 Azure | MongoDB和Atlas Search进程在不同节点上运行 |
要了解有关这些部署模型的更多信息,请查看以下部分:
测试和原型环境
为了测试搜索查询和构建应用程序原型,我们建议使用以下配置。此配置最适合以下应用场景:
要索引的文档总数少于 2M。
少于 10 GB 的索引数据。
在 7 天内少于 10,000 次查询。
如果使用量超过列出的值,请迁移到单独的搜索节点。
部署类型
要测试 Atlas Search 查询,您可以部署共享或专用集群或本地 Atlas 部署。
如果您希望在本地测试 Atlas Search 查询,则可以使用 Atlas CLI 部署一个托管在本地计算机上的单节点副本集。要了解详情,请参阅创建本地 Atlas 部署。
当您的应用程序准备上线时,请使用实时迁移功能将本地 Atlas 部署迁移到生产环境。本地部署受本地计算机的 CPU、内存和存储资源的限制。
节点架构
在此部署模型中,搜索 mongot
进程与 Atlas 集群每个节点上的 mongod
一起运行。mongod
进程将查询路由到同一节点上的 mongot
,并且它们共享相同的资源。
默认情况下,当您创建第一个 Atlas Search 索引时,Atlas 会在运行 mongod
进程的同一节点上启用搜索 mongot
进程。mongot
进程执行关于mongot
进程所述的操作。
您可以在 Atlas Search 索引中定义存储源字段,以便 mongot
进程可以在 mongot
上存储指定的字段。然后,您可以在 Atlas Search 查询中使用 returnStoredSource 选项直接从 mongot
检索匹配文档的存储字段,而不必在数据库中进行完整文档查询。
收益分析
启用 Atlas Search 后,您可以使用自动同步到数据库的集成、完全托管的搜索引擎轻松地在数据上构建搜索。Atlas Search 提供了丰富的查询语言,使用 Atlas Search 聚合管道阶段(如用于全文搜索的 $search
和 $searchMeta
以及用于语义搜索的 $vectorSearch
)与其他 MongoDB 聚合管道阶段相结合,并基于分数进行结果排名。
根据集群的资源配置情况,在同一节点上部署这两个进程,可能比在单独的专用节点上运行搜索进程更具成本效益。
限制
您可能会遇到数据库 mongod
和搜索 mongot
进程之间的资源争用。这可能会对索引性能和查询延迟产生负面影响。我们建议将此部署模型仅用于测试和原型开发环境。对于生产就绪型应用程序和相关的搜索工作负载,我们建议迁移到专用的搜索节点。
成本
不需要,当您在 Atlas 集群上启用 Atlas Search 时,不会产生任何额外的费用或收费。不过,您可能会发现集群上的资源使用量有所增加,具体取决于索引集合大小或索引定义等因素。
Considerations
由于 mongod
和 mongot
进程在同一节点上运行,因此在某些情况下,mongot
可能不可用。下表描述了可能的原因:
原因 | 说明 |
---|---|
集群层扩展 — 网络存储 | 当您向上或向下扩展集群时, Atlas会预配一个新实例。实例准备就绪后, Atlas会附加网络存储并在新节点上启动 如果 |
集群层扩展 — 本地固态硬盘 | |
Lucene降级 | |
存储调整 | 您可以保留连接到Atlas 集群节点的网络存储。这样,您就可以在不影响 但是,在某些区域、当集群使用本地 NVMe 磁盘或其他罕见情况下,可能无法保留网络存储。在这些情况下, Atlas会执行初始同步,搜索查询将失败,直到初始同步完成。 |
mongot 版本更新 | 在 mongot 版本更新期间, Atlas会停止旧版本的 mongot 并启动新版本。在此短暂期间,搜索查询将失败,直到新的 mongot 启动。 |
新的 mongod 节点 | 当您向集群添加新节点时, Atlas会执行初始同步以创建搜索索引。在初始同步完成之前,使用新 mongod 节点的搜索查询将失败。 |
实例重启或替换 |
|
生产环境
对于生产就绪型应用程序,我们建议使用以下集群配置。此配置非常适合以下应用场景:
要索引的文档总数超过 2 百万个。
索引数据大于 10 GB。
在 7 天内大于 10,000 次查询。
部署类型
对于生产就绪的应用程序,您需要专用的集群。
Cluster Tiers
专用集群包括 M10
和更高层级。M10
和 M20
层级适用于开发和生产环境。但是,较高的层级可以处理大型数据集和生产工作负载。我们建议您还为搜索工作负载部署专用的搜索节点。这样,您就可以独立且适当地扩展搜索部署。
云提供商和地区
搜索节点在 Google Cloud 和 Azure 的所有区域都可用,但只在 AWS 的部分区域可用。您必须选择搜索节点可用于部署的云提供商和区域。
所有集群层在支持的云提供商区域均可使用。您选择的云提供商和区域会影响集群可用的配置选项和搜索层级以及运行集群的成本。
节点架构
在此部署模型中,mongot
进程在搜索节点上运行,搜索节点与运行 mongod
进程的群集节点是分开的。Atlas 为每个集群或集群上的每个分片部署搜索节点。
例如,如果您为具有 3 个分片的集群部署 2 个搜索节点,则 Atlas 会部署 6 个搜索节点,每个分片 2 个。您还可以配置搜索节点的数量,以及为每个搜索节点配置的资源量。
部署单独的搜索节点时,Atlas 会自动为每个 mongot
分配一个 mongod
以进行索引。mongot
会与 mongod
通信,以侦听并同步其所存储索引的索引更改。Atlas Search 对查询进行索引和处理的方式与 mongod
和 mongot
进程在同一节点上运行时类似。要了解更多信息,请参阅创建和管理 Atlas Search 索引和创建和运行 Atlas Search 查询。要了解有关单独部署搜索节点的更多信息,请参阅用于隔离工作负载的搜索节点。
当您迁移到搜索节点时,Atlas 会部署搜索节点,但不会在节点上提供查询,直到它在搜索节点上的集群上成功构建所有索引。当 Atlas 在新节点上构建索引时,它会继续使用集群节点上的索引提供查询。仅当 Atlas 在搜索节点上成功构建索引并删除集群节点上的索引后,它才会开始从搜索节点提供查询服务。
如果删除集群上的所有搜索节点,则在处理搜索查询结果时会出现中断。要了解详情,请参阅修改集群。如果删除 Atlas 集群,Atlas 则会暂停,然后删除所有关联的 Atlas Search 部署(mongot
进程)。
您可以在 Atlas Search 索引中定义存储源字段,以便 mongot
进程可以在 mongot
上存储指定的字段。然后,您可以在 Atlas Search 查询中使用 returnStoredSource 选项直接从 mongot
检索匹配文档的存储字段,而不必在数据库中进行完整文档查询。
收益分析
单独部署搜索节点具有以下优势:
- 高可用性
- 当您部署单独的搜索节点时,Atlas 会强制使用至少两个搜索节点,以确保在出现故障或中断时您的工作负载保持运行状态,将停机时间降至最低。
- 可扩展性
当您部署单独的搜索节点时,您可以执行以下操作:
独立于 MongoDB 集群扩展存储和计算。
独立于 MongoDB 扩展查询负载。
您可以水平和垂直扩展搜索节点。
您可以增加或减少搜索节点的数量并水平扩展集群。您可以预置最少 2 个、最多 32 个搜索节点。Atlas Search 通过循环浏览可用搜索节点列表来分发您的查询,以便在搜索节点上执行,这使其能够平衡所有预置节点之间的查询负载。
您可以为搜索节点选择不同的搜索层级。通过不同的搜索层级,您可以选择最适合全文向矢量工作负载的 CPU、RAM、存储配置。
- 性能
在部署单独的搜索节点时,您可以提高
mongod
和mongot
进程的性能和资源利用率,并消除这两个进程之间的资源争用。专用搜索节点支持并发分段搜索,这使得 Atlas Search 可以同时搜索多个索引分段,并在某些情况下提高查询响应速度。要了解更多信息,请参阅并行查询各分段。
调整集群大小和扩展
要确定您在搜索节点上所需的内存量,请使用以下 Atlas 指标:
搜索索引的大小
搜索节点上的总 RAM
例如,请考虑以下情况:
搜索索引的大小 = 10GB
搜索节点上的总 RAM = 4GB
在 4GB 的 RAM 中,假设 1GB 被其他进程使用,只有 3GB 可用于索引数据。因此,剩余 7GB的索引数据 ( 10GB - 3GB = 7GB) 会根据需要从磁盘分页调入。频繁从磁盘 ( 7GB) 进行分页会导致页面错误、磁盘 I/O 和 CPU IOWait 增加,从而导致性能下降。
具有更多 RAM(8GB 或更大)的更高搜索层允许从内存中提供搜索索引的大部分数据,从而最大限度地减少磁盘读取和页面错误,从而提高性能。
注意
用于搜索节点的本地固态硬盘需要 20% 的存储开销来支持索引操作。
搜索节点成本
MongoDB 仅支持在专用(M10
或更高版本)集群上使用单独的搜索节点。搜索节点部署在计算密集型 NVMe 实例上。必须至少部署两个节点。每天将按每个节点的每小时资源使用量向您收费。如要了解更多信息,请参阅搜索节点成本。
迁移到专用Atlas Search节点
使用专用搜索节点,您可以独立于集群来调整和扩展搜索部署的大小。它还消除了在同一节点上运行数据库和搜索进程的集群上可能遇到的任何资源争用。
要迁移到专用搜索节点,请对您的部署进行以下更改:
如果您的部署当前使用共享层级,请将您的集群升级到更高的层级。专用搜索节点仅支持
M10
及更高集群层级。要了解有关迁移到不同集群层的更多信息,请参阅修改 Cluster Tier。专用搜索节点可用于 AWS 的部分区域以及所有受支持的 Google Cloud 和 Azure 区域。确保将集群部署在搜索节点也可用的区域。如果现有集群位于搜索节点不可用的区域,请将集群迁移到搜索节点可用的区域。如需了解更多信息,请参阅云提供商区域。
启用 Search Nodes for workload isolation 并配置搜索节点。要了解更多信息,请参阅添加搜索节点。
当您部署单独的搜索节点时,Atlas Search 将继续使用 Atlas 集群上的索引提供查询,同时 Atlas 在搜索节点上构建索引。Atlas 仅在完成以下操作后才会将查询路由到搜索节点:
在搜索节点上成功构建所有索引。
从集群节点中删除搜索索引。