对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

部署MongoDB Search 和 Vector Search

您可以在Kubernetes集群中部署MongoDB Search 和 Vector Search,直接在应用程序中构建强大的搜索体验。使用MongoDB Search 和 Vector Search,您可以构建传统的文本搜索和AI支持的向量搜索功能,这些功能可自动与本地部署MongoDB 数据库同步。这样一来,在提供高级搜索功能的同时,就无需保持不同的系统同步。要学习;了解详情,请参阅:

要在本地部署中启用全文和语义搜索等搜索功能,必须部署MongoDB搜索和向量搜索进程(mongot),并将其与MongoDB 数据库部署(mongod) 连接。部署 mongot 是可选的,仅当您计划利用其提供的搜索功能时才需要部署。

MongoDB数据库进程 (mongod) 充当 mongot 的所有搜索查询的代理。mongod 将查询转发到 mongot,由其处理该查询。mongot 将查询结果返回给 mongod,然后将结果转发给您。您从不直接与 mongot交互。

每个 mongot进程都有自己的持久卷,不与数据库或其他搜索节点共享。存储用于维护根据持续源自数据库的数据构建的索引。索引定义(元数据)存储在数据库中。

mongot 执行以下操作:

  • 管理索引。

    mongot 负责更新数据库中的索引定义。

  • 从数据库中获取数据。

    mongot 节点与数据库建立永久连接,以便实时更新数据库中的索引。

  • 处理搜索查询。

    当 mongod 收到 $search、$searchMeta 或 $vectorSearch 查询时,它会将查询定向到 mongot 节点之一。接收查询的 mongot 会处理查询、聚合数据,并将结果返回给 mongod,然后再将结果转发给用户。

mongot 组件与单个MongoDB副本集紧密耦合,不能在多个数据库或副本集之间共享。这意味着副本集部署有自己的专用搜索节点。

mongot 和 mongod 之间的网络连接是双向的:

  • mongot 建立与副本集的连接,以获取用于构建索引和运行查询的数据。

  • mongod 连接到 mongot 以转发搜索相关操作,例如索引管理和查询数据。

有或没有Kubernetes Operator 的搜索部署架构没有太大区别。Kubernetes Operator 简化了部署功能齐全的搜索节点所需的步骤,尤其是当数据库也由Kubernetes Operator托管时。

要部署MongoDBSearch 自定义资源 (CR), Kubernetes Operator 会应用该资源并开始部署 mongot Pod,并请求 spec 中指定的持久存储。使用Kubernetes Operator 部署的MongoDB Search 和 Vector Search 可以针对Kubernetes Operator 在同一Kubernetes集群内或完全独立的外部MongoDB 数据库中部署的MongoDB副本集。要学习;了解如何部署和配置 mongot 以使用:

为了在MongoDB Enterprise部署中利用MongoDB Search 和 Vector Search,您必须具备以下条件:

  • 全功能MongoDB 8.0.10+以下列方式之一部署的副本集:

    • 使用Kubernetes Operator 在Kubernetes集群内部

    • Kubernetes集群外部

  • Cloud Manager或MongoDB Ops Manager实例

下表显示了Kubernetes Operator 自动执行的配置任务,以及要在Kubernetes中成功部署MongoDB Search 和 Vector Search,以及连接到Kubernetes中的MongoDB副本集或外部MongoDB副本集必须采取的操作。

任务
(在 Kubernetes 内)
执行者
(外部 MongoDB)
执行者

在Kubernetes内部署MongoDB Ops Manager

Kubernetes Operator

Kubernetes Operator

在Kubernetes外部部署Cloud Manager或MongoDB Ops Manager

您

您

部署MongoDB副本集

Kubernetes Operator

您

创建 MongoDBSearch 自定义资源

您

您

为MongoDB副本集提供连接字符串

Kubernetes Operator

您

创建 mongot 配置 YAML

Kubernetes Operator

Kubernetes Operator

在每个 mongod进程中设置必要的副本集参数

Kubernetes Operator

您

MongoDB版本低于 8.2 中的 Polyfill searchCoordinator角色

Kubernetes Operator

您

为 mongot 创建具有 searchCoordinator角色的用户

Kubernetes Operator 和您通过应用 MongoDBUser资源

您

使用具有查询搜索所需权限的用户配置MongoDB副本集

您

您

创建MongoDB Search 和 Vector Search 索引

您

您

向外部公开搜索Pod,以便从每个 mongod节点进行连接

没有必要

您

向外部公开mongod Pod,以便从 mongot 节点进行连接

没有必要

您

下图说明了 mongot进程的安全配置。如果MongoDB服务器位于Kubernetes集群内部,则Kubernetes Operator 会自动为MongoDB Search 和 Vector Search 设置密钥文件身份验证。如果MongoDB服务器位于外部,则必须创建一个包含副本集密钥文件档案的Kubernetes密钥,并在 MongoDBSearch CR 中引用它。

连接到 mongod 时,mongot 会将自身验证为数据库用户。部署MongoDB Search 和 Vector Search 时,您必须创建数据库用户。您必须通过填充 MongoDBSearch CR 中的 spec.source.username 和 spec.source.passwordSecretRef 字段,将存储在Kubernetes密钥中的用户凭证传递给 mongot。

接受来自 mongod 的连接时,mongot 会使用带密钥文件的内部身份验证对远程请求进行身份验证,这与MongoDB副本集内部身份验证类似。当配置为索引同一Kubernetes集群上的MongoDB资源时, Kubernetes Operator 会自动为 MongoDBSearch 设置密钥文件身份验证。如果MongoDB副本集部署在Kubernetes外部,则必须创建一个包含副本集密钥文件档案的Kubernetes密钥,并在 MongoDBSearch.spec.source.external.keyfileSecretRef字段中引用它。

MongoDBSearch 可以使用 TLS 保护传输过程中的数据和凭证。对于索引管理命令和搜索查询,指定(即使是空对象,{})spec.security.tls 字段,并在 spec.security.tls.certificateKeySecretRef 字段的 Kubernetes Secret 中提供 TLS 证书。这个 TLS 证书必须由颁发MongoDB副本集使用的 CA 证书的同一 CA 颁发和签名。

当 MongoDBSearch 和 MongoDB 同时由Kubernetes Operator 部署时,根本的mongot 和 mongod 配置主要由Kubernetes Operator 本身处理。当MongoDB副本集部署在Kubernetes之外时,.spec.source.external.tls字段必须使用包含与配置 mongod 相同的 CA 证书的Kubernetes密钥来填充,并且 mongod 配置本身必须将 searchTLSMode 参数设立为requireTLS。