您可以在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
以转发搜索相关操作,例如索引管理和查询数据。
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副本集,请参阅安装和使用MongoDB Search 以及 Vector Search 与外部MongoDB Enterprise Edition。
先决条件
为了在MongoDB Enterprise部署中利用MongoDB Search 和 Vector Search,您必须具备以下条件:
通过以下方式之一部署的功能齐全的MongoDB 8.0.10+副本集:
使用Kubernetes Operator 在Kubernetes集群内部
Kubernetes集群外部
Cloud Manager或Ops Manager实例
配置任务
下表显示了Kubernetes Operator 自动执行的配置任务,以及要在Kubernetes中成功部署MongoDB Search 和 Vector Search,以及连接到Kubernetes中的MongoDB副本集或外部MongoDB副本集必须采取的操作。
任务 | (Inside Kubernetes) Performed by | (External MongoDB) Performed by |
---|---|---|
在Kubernetes内部署Ops Manager | Kubernetes Operator | Kubernetes Operator |
在Kubernetes外部部署Cloud Manager或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 执行以下操作:
使用
MongoDBSearch
spec.source.mongodbResourceRef
查找由 引用的MongoDB CR,或者通过查找与 同名的MongoDB CRMongoDBSearch
按命名约定引用。mongot
在 YAML文件中生成 配置,并将其保存到名为<MongoDBSearch.metadata.name>-search-config
的配置映射中。配置映射由搜索Pod 挂载,YAML 配置由
mongot
的进程在初创企业时使用。生成的 YAML 包含有关如何连接到副本集、TLS 设置等的所有信息。部署名为 的MongoDB Search 和 Vector Search
<MongoDBSearch.metadata.name>-search
有状态设立,并根据spec.persistence
spec.resourceRequirements
CR 中的 和 设置配置存储和资源要求。通过添加必要的
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
自定义资源。
要学习;了解有关 进程的 CR mongot
设置的更多信息,请参阅MongoDB搜索和向量搜索设置。
下图展示了使用外部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 (仅适用于低于 () 的MongoDB版本)创建具有所有必要权限的
<
8.2searchCoordinator
自定义角色。从MongoDB 8.2+ 开始,
searchCoordinator
是内置角色,因此您可以跳过此步骤。在外部副本集为搜索同步进程创建一个用户。此用户必须具有
searchCoordinator
角色。- userName: "search-sync-source" password: "<your-search-sync-password>" database: "admin" roles: - role: "searchCoordinator" db: "admin"
Kubernetes配置
配置并应用
MongoDBSearch
CR,其中spec.source.external
指向外部MongoDB主机。为搜索同步用户的密码创建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>
)。
要学习;了解有关用于连接到外部 mongot
mongod
进程的 进程的 CR 设置的更多信息,请参阅MongoDB搜索和向量搜索设置。
安全性
下图说明了mongot
进程的安全配置。如果MongoDB服务器位于Kubernetes集群内部,则Kubernetes Operator 会自动为MongoDB Search 和 Vector Search 设置密钥文件身份验证。如果MongoDB服务器位于外部,则必须创建一个包含副本集密钥文件档案的Kubernetes密钥,并在MongoDBSearch
CR 中引用它。

身份验证
连接到mongod
时,mongot
会将自身验证为数据库用户。部署MongoDB Search 和 Vector Search 时,您必须创建数据库用户。您必须通过填充mongot
spec.source.username
spec.source.passwordSecretRef
MongoDBSearch
CR 中的 和 字段,将存储在Kubernetes密钥中的用户凭证传递给 。
接受来自 mongod
的连接时,mongot
会使用带密钥文件的内部身份验证对远程请求进行身份验证,这与MongoDB副本集内部身份验证类似。当配置为索引同一Kubernetes集群上的MongoDB资源时, Kubernetes Operator 会自动为 MongoDBSearch
设置密钥文件身份验证。如果MongoDB副本集部署在Kubernetes外部,则必须创建一个包含副本集密钥文件档案的Kubernetes密钥,并在 MongoDBSearch.spec.source.external.keyfileSecretRef
字段中引用它。
传输层安全
MongoDBSearch
可以使用 TLS 保护传输中的数据和凭证。对于索引管理命令和搜索查询,请指定(即使是空对象,即{}
)spec.security.tls
字段,并在 字段的Kubernetes密钥中提供 TLSspec.security.tls.certificateKeySecretRef
证书。此 TLS 证书必须由颁发MongoDB副本集使用的 CA 证书的同一 CA 颁发和签名。
当 MongoDBSearch
和 MongoDB
同时由Kubernetes Operator 部署时,根本的mongot
和 mongod
配置主要由Kubernetes Operator 本身处理。当MongoDB副本集部署在Kubernetes之外时,.spec.source.external.tls
字段必须使用包含与配置 mongod
相同的 CA 证书的Kubernetes密钥来填充,并且 mongod
配置本身必须将 searchTLSMode
参数设立为requireTLS
。