您可以在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节点与数据库建立永久连接,以便实时更新数据库中的索引。处理搜索查询。
When
mongodreceives a$search,$searchMeta, or$vectorSearchquery, it directs the query to one of themongotnodes. Themongotthat receives the query processes the query, aggregates the data, and returns the results tomongod, which it forwards to the user.
mongot 组件与单个MongoDB副本集紧密耦合,不能在多个数据库或副本集之间共享。这意味着副本集部署有自己的专用搜索节点。
mongot 和 mongod 之间的网络连接是双向的:
mongot建立与副本集的连接,以获取用于构建索引和运行查询的数据。mongod连接到mongot以转发搜索相关操作,例如索引管理和查询数据。
MongoDB Search 和 Vector Search 部署
有或没有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 以使用:
Kubernetes中的MongoDB副本集,请参阅在MongoDB Enterprise Edition 中安装和使用搜索
先决条件
为了在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 | 您 |
创建 | 您 | 您 |
为MongoDB副本集提供连接字符串 | Kubernetes Operator | 您 |
创建 | Kubernetes Operator | Kubernetes Operator |
在每个 | Kubernetes Operator | 您 |
MongoDB版本低于 8.2 中的 Polyfill | Kubernetes Operator | 您 |
为 | Kubernetes Operator 和您通过应用 MongoDBUser资源 | 您 |
使用具有查询搜索所需权限的用户配置MongoDB副本集 | 您 | 您 |
创建MongoDB Search 和 Vector Search 索引 | 您 | 您 |
向外部公开搜索Pod,以便从每个 | 没有必要 | 您 |
向外部公开mongod Pod,以便从 | 没有必要 | 您 |
下图显示了Kubernetes集群中具有MongoDB Enterprise副本集的单个MongoDB Search 和 Vector Search实例的部署架构。

下图显示了Kubernetes Operator 在Kubernetes集群中为带有MongoDB Enterprise版副本集的MongoDB Search 和 Vector Search 部署的组件。

当 mongot 和 mongod 进程同时部署在Kubernetes集群内时, Kubernetes Operator 会自动为这两个进程执行配置。具体来说, Kubernetes Operator 执行以下操作:
Finds the MongoDB CR referenced by
MongoDBSearchusingspec.source.mongodbResourceRef, or by a naming convention by looking for MongoDB CR with the same name asMongoDBSearch.Generates
mongotconfiguration in a YAML file and saves it to a config map named<MongoDBSearch.metadata.name>-search-config.The Config map is mounted by the search pods and the YAML configuration is used by
mongot's process on startup. The generated YAML contains all the information about how to connect to the replica set, TLS settings, and so on.部署名为
<MongoDBSearch.metadata.name>-search的MongoDB Search 和 Vector Search 有状态设立,并根据 CR 中的spec.persistence和spec.resourceRequirements设置配置存储和资源要求。通过添加必要的
setParameter选项(包括mongot主机的主机名和端口号)来更新每个mongod进程的配置。必要的setParameter选项,包括MongoDB副本集的主机名和端口号。对于 v8.2 之前的MongoDB版本,创建
searchCoordinator自定义角色,使其具有mongot进程所需的所有必要权限。从MongoDB 8.2 开始,searchCoordinator是内置角色。
您必须执行以下操作:
使用
MongoDBUser自定义资源在副本集创建用户。mongot使用该用户的凭证连接到副本集以获取数据:用户名可以是任意的(在示例中,我们使用
search-sync-source-user),但必须设立searchCoordinator角色。该用户的用户名和密码分别在
MongoDBSearch.spec.source.username和MongoDBSearch.spec.source.passwordSecretRef中传递。密码密钥可以指用于创建
MongoDBUser规范(在MongoDBUser.spec.source.passwordSecretKeyRef中)的包含用户密码的相同密钥。
配置并应用
MongoDBSearch自定义资源。
To learn more about the CR settings for the mongot process, see MongoDB Search and Vector Search Settings.
下图展示了使用外部MongoDB Enterprise版副本集的Kubernetes集群中MongoDB Search 和 Vector Search 的部署架构。

下图显示了Kubernetes Operator 在Kubernetes集群中为MongoDB Search 和 Vector Search 部署的组件。

当您在Kubernetes外部MongoDB 部署时,为了利用MongoDB Search 和 Vector Search,您可以使用Kubernetes Operator部署mongot,并且必须手动执行一些步骤。Kubernetes Operator 处理搜索Pod 的配置。但是,当MongoDB副本集位于Kubernetes外部时,您必须重新配置MongoDB节点和网络。
您负责以下手动配置:
外部MongoDB配置
在外部副本集的每个
mongod进程上使用setParameter配置以下参数。配置时,将<search-service-hostname>:27027替换为MongoDBSearch服务的实际可解析主机名和端口。setParameter: mongotHost: "<search-service-hostname>:27027" searchIndexManagementHostAndPort: "<search-service-hostname>:27027" skipAuthenticationToSearchIndexManagementServer: false searchTLSMode: "disabled" # or "requireTLS" for TLS deployments (仅适用于低于 (
<) 8.2 的MongoDB版本)创建具有所有必要权限的searchCoordinator自定义角色。从MongoDB 8.2+ 开始,
searchCoordinator是内置角色,因此您可以跳过此步骤。在外部副本集为搜索同步进程创建一个用户。此用户必须具有
searchCoordinator角色。- userName: "search-sync-source" password: "<your-search-sync-password>" database: "admin" roles: - role: "searchCoordinator" db: "admin"
Kubernetes配置
Configure and apply the
MongoDBSearchCR withspec.source.externalpointing to your external MongoDB hosts.为搜索同步用户的密码创建Kubernetes密钥。
apiVersion: v1 kind: Secret metadata: name: search-sync-source-password stringData: password: "your-search-sync-password" 创建密钥文件密钥,其中包含与外部MongoDB副本集使用的密钥文件中指定的相同密钥。
配置网络和 DNS,确保外部MongoDB和搜索Pod 之间存在双向连接。您的外部MongoDB环境必须能够解析您的搜索服务主机名 (
<search-service-hostname>)。
To learn more about the CR settings for the mongot process to connect to an external mongod process, see MongoDB Search and Vector Search Settings.
安全性
下图说明了 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 can protect data and credentials in transit using TLS. For index management commands and search queries, specify (even an empty object, {}) spec.security.tls field and provide a TLS certificate in a Kubernetes Secret in the spec.security.tls.certificateKeySecretRef field. This TLS certificate must be issued and signed by the same CA that issued the CA certificate that the MongoDB replica set uses.
当 MongoDBSearch 和 MongoDB 同时由Kubernetes Operator 部署时,根本的mongot 和 mongod 配置主要由Kubernetes Operator 本身处理。当MongoDB副本集部署在Kubernetes之外时,.spec.source.external.tls字段必须使用包含与配置 mongod 相同的 CA 证书的Kubernetes密钥来填充,并且 mongod 配置本身必须将 searchTLSMode 参数设立为requireTLS。