您可以在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.14+以下列方式之一部署的副本集:
使用Kubernetes Operator 在Kubernetes集群内部
Kubernetes集群外部
Cloud Manager或MongoDB Ops Manager实例
开始之前,请考虑以下事项:
配置任务
下表显示了Kubernetes Operator 自动执行的配置任务,以及要在Kubernetes中成功部署MongoDB Search 和 Vector Search,以及连接到Kubernetes中的MongoDB副本集或外部MongoDB副本集必须采取的操作。
任务 | (在 Kubernetes 内) 执行者 | (外部 MongoDB) 执行者 |
|---|---|---|
Deploy Ops Manager inside Kubernetes | 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,以便从 | 没有必要 | 您 |
安全性
下图说明了 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。



