Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Implemente MongoDB Search y búsqueda vectorial

Puedes implementar MongoDB Search y búsqueda vectorial en tu clúster de Kubernetes para construir potentes experiencias de búsqueda directamente en tus aplicaciones. Utilizando MongoDB Search y Vector Search, puedes crear tanto funciones tradicionales de búsqueda de texto como funciones de búsqueda vectorial impulsadas por IA que se sincronizan automáticamente con una base de datos MongoDB on-premises. Esto elimina la necesidad de mantener sistemas separados sincronizados, al tiempo que se ofrece funcionalidades avanzadas de búsqueda. Para obtener más información, consulte:

Para habilitar las capacidades de búsqueda, como búsqueda full-text y búsqueda semántica en implementaciones on-prem, debe desplegar el proceso MongoDB Search y búsqueda vectorial (mongot) y conéctela con su implementación de la base de datos MongoDB (mongod). La implementación de mongot es opcional y solo es necesaria si se planea utilizar las funcionalidades de búsqueda que ofrece.

Los procesos de la base de datos MongoDB (mongod) actúan como el proxy para todas las consultas de búsqueda para mongot. El mongod reenvía la query al mongot, que procesa la query. El mongot devuelve los resultados de la query al mongod, que luego te envía los resultados a ti. Nunca interactúas directamente con el mongot.

Cada proceso mongot tiene su propio volumen persistente que no se comparte ni con la base de datos ni con otros nodos de búsqueda. El almacenamiento se utiliza para mantener índices que se compilan a partir de los datos obtenidos continuamente de la base de datos. Las definiciones del índice (metadatos) se almacenan en la propia base de datos.

El mongot realiza las siguientes acciones:

  • Gestiona el índice.

    El mongot es responsable de actualizar las definiciones de índices en la base de datos.

  • Obtiene los datos de la base de datos.

    Los nodos mongot establecen conexiones permanentes con la base de datos para actualizar los índices en tiempo real.

  • Procesa consultas de búsqueda.

    Cuando mongod recibe una consulta $search, $searchMeta, o $vectorSearch, dirige la consulta a uno de los nodos mongot. El mongot que recibe la query la procesa, agrega los datos y envía los resultados a mongod, que los reenvía al usuario.

Los componentes mongot están estrechamente acoplados a un único set de réplicas de MongoDB y no pueden compartirse entre varias bases de datos o sets de réplicas. Para una implementación de set de réplicas, un grupo de nodos de búsqueda dedicados sirve al set de réplicas. Para un clúster, cada partición mantiene su propio grupo independiente de mongot nodos. Las particiones no comparten las instancias de mongot.

La conectividad de red entre mongot y mongod va en ambas direcciones:

  • mongot establece la conexión con el set de réplicas para obtener los datos que se utilizarán en la creación de índices y la ejecución de queries.

  • mongod se conecta a mongot para reenviar operaciones relacionadas con la búsqueda, como la gestión de índices y la consulta de datos.

El campo spec.replicas controla cuántas instancias de mongot implementa el operador de Kubernetes. Para una fuente de set de réplicas, spec.replicas establece el número total de pods mongot. Para una fuente de clúster, spec.replicas establece el número de pods mongot por partición.

Si configuras spec.replicas a un valor mayor que 1, debes colocar un balanceador de carga L7 entre mongod y los pods mongot. El proceso de mongod abre una sola conexión TCP de larga duración a mongot, por lo que un balanceador de carga L4 no puede distribuir consultas entre múltiples instancias de mongot; todo el tráfico fluye a través de esa única conexión. Un balanceador de carga L7 comprende HTTP/2 y gRPC, lo que le permite distribuir flujos individuales de gRPC a través de mongot pods mientras fija cada flujo a un único mongot durante la duración del cursor de la query.

No hay muchas diferencias entre la arquitectura de implementación de búsqueda con o sin el Operador de Kubernetes. El Operador de Kubernetes simplifica los pasos necesarios para implementar nodos de búsqueda totalmente funcionales, especialmente cuando la base de datos también es gestionada por el Operador de Kubernetes.

Para implementar, aplicas el recurso personalizado (CR) MongoDBSearch, que el operador de Kubernetes recoge y comienza a implementar mongot pods y solicita el almacenamiento persistente especificado en el spec. MongoDB Search y la búsqueda de vectores desplegadas a través del Operador Kubernetes pueden dirigirse a un set de réplicas de MongoDB o un clúster fragmentado desplegado por el Operador Kubernetes dentro del mismo clúster de Kubernetes, o a una implementación externa de MongoDB completamente independiente (set de réplicas o clúster fragmentado). Para aprender cómo implementar y configurar mongot para usar:

  • Un set de réplicas de MongoDB en Kubernetes, consulte Instalar y usar la Community Edition de MongoDB o Instalar y usar Búsqueda con la MongoDB Enterprise Edition

  • Un set de réplicas de MongoDB externo, consulta Instala y usa MongoDB Search y búsqueda vectorial con MongoDB Enterprise Edition.

Para utilizar la búsqueda de MongoDB y la búsqueda vectorial en tu:

  • Para una implementación de MongoDB Community, debe tener un set de réplicas MongoDB 8.2 completamente funcional o posterior, o un clúster implementado dentro de un clúster de Kubernetes utilizando el Operador de Kubernetes.

  • Implementación de MongoDB Enterprise, debe tener un set de réplicas funcional de MongoDB 8.2 o posterior, o un clúster, implementado de una de las siguientes maneras:

    • Dentro de un clúster de Kubernetes utilizando el Operador de Kubernetes

    • Fuera de un clúster de Kubernetes

  • Instancia de Cloud Manager u Ops Manager

Antes de comenzar, tenga en cuenta lo siguiente:

La siguiente tabla muestra las tareas de configuración que el Operador de Kubernetes realiza automáticamente y las acciones que debe realizar para implementar exitosamente MongoDB Search y búsqueda vectorial en Kubernetes y conectarse a un conjunto de réplicas de MongoDB o a un clúster en Kubernetes o a una implementación externa de MongoDB.

Tarea
(Inside Kubernetes)
Performed by
(External MongoDB)
Performed by

Implementa Ops Manager dentro de Kubernetes

Operador de Kubernetes

Operador de Kubernetes

Implementa Cloud Manager u Ops Manager fuera de Kubernetes

Implementar un set de réplicas o un clúster de MongoDB

Operador de Kubernetes

Crea un recurso personalizado MongoDBSearch

Proporciona una cadena de conexión a la implementación de MongoDB

Operador de Kubernetes

Crea configuración de mongot YAML

Operador de Kubernetes

Operador de Kubernetes

Configura los parámetros necesarios del set de réplicas en cada proceso mongod

Operador de Kubernetes

Crea un usuario para mongot con el searchCoordinator rol

Kubernetes operador y usted aplicando el recurso MongoDBUser

Configura el set de réplicas de MongoDB con un usuario que tenga los permisos necesarios para consultar query

Crea índices de búsqueda de MongoDB y Vector Search

Exponga los pods de búsqueda o equilibrador de carga externamente para conectarse desde cada nodo mongod

No es necesario

Exponga los pods mongod externamente para la conexión desde los nodos mongot

No es necesario

Configure el balanceador de carga gestionado (cuando spec.replicas sea mayor que 1)

Operador de Kubernetes

Operador de Kubernetes

Configurar balanceador de carga no gestionado (cuando spec.replicas es mayor que 1)

Aprovisionar certificados TLS por fragmento (clúster con TLS)

Exponer el balanceador de carga externamente (MongoDB externo + LB gestionado)

No es necesario

La siguiente imagen ilustra la configuración de seguridad para el proceso mongot. Si el servidor MongoDB está dentro del clúster de Kubernetes, el operador de Kubernetes configura automáticamente la autenticación keyfile para MongoDB Search y búsqueda vectorial. Si el servidor MongoDB es externo, debes crear un secreto de Kubernetes que contenga la credencial keyfile del set de réplicas y referenciarlo en el CR MongoDBSearch .

Diagrama que muestra la autenticación de archivos clave y la configuración de TLS para la búsqueda.
haga clic para ampliar

El proceso mongot autentica las conexiones mongod mediante mTLS. Cuando habilitas el TLS, el proceso mongot utiliza el certificado TLS del servidor MongoDB como certificado de cliente para la autenticación. Este certificado se verifica en comparación con el certificado CA con el que está configurado mongot. Para que la autenticación funcione correctamente, debes configurar tanto mongot como mongod con TLS habilitado.

Cuando se configura para indexar un recurso de MongoDB dentro del mismo clúster de Kubernetes, el operador de Kubernetes propaga automáticamente el certificado mongod CA a mongot y habilita mTLS para las conexiones de consulta de búsqueda si ambos recursos MongoDB y MongoDBSearch están configurados para TLS. Si el conjunto de réplicas de MongoDB se implementa fuera de Kubernetes, debes crear un secreto de Kubernetes que contenga el certificado de la CA del conjunto de réplicas y referenciarlo en el campo MongoDBSearch.spec.source.external.tls.ca para habilitar la autenticación mTLS para las solicitudes de búsqueda.

MongoDBSearch puede proteger los datos y las credenciales en tránsito usando TLS. Para los comandos de gestión de índices y consultas de búsqueda, establece el campo spec.security.tls y proporciona un certificado TLS. Puedes establecer este campo como un objeto vacío ({}) para activar TLS con la configuración por defecto.

Obsoleto desde la versión 1.8.0: spec.security.tls.certificateKeySecretRef está en desuso. Para las implementaciones del set de réplicas, el operador de Kubernetes aún admite certificateKeySecretRef, pero debe migrar a spec.security.tls.certsSecretPrefix. En las implementaciones de clúster fragmentado, no se puede utilizar certificateKeySecretRef porque el Operador de Kubernetes lee un secreto de certificado de servidor mongot independiente para cada partición.

spec.security.tls.certsSecretPrefix es un campo opcional. Cuando lo especificas, el Operador de Kubernetes antepone <certsSecretPrefix>- a todos los nombres de certificados secretos que lee. El operador de Kubernetes lee los siguientes secretos de certificados:

Topología de clústeres
mongot Certificado

Set de réplicas

[<certsSecretPrefix>-]<name>-search-cert

Clúster fragmentado

[<certsSecretPrefix>-]<name>-search-0-<shardName>-cert (per shard)

Si configuras spec.loadBalancer.managed, el certificado de cliente de balanceador de carga es [<certsSecretPrefix>-]<name>-search-lb-0-client-cert. La siguiente tabla muestra los certificados del servidor del balanceador de carga:

Topología de clústeres
Certificado

Set de réplicas

[<certsSecretPrefix>-]<name>-search-lb-0-cert

Clúster fragmentado

[<certsSecretPrefix>-]<name>-search-lb-0-<shardName>-cert

El certificado TLS debe ser emitido y firmado por la misma CA que emitió el certificado CA que utiliza el set de réplicas de MongoDB.

Cuando tanto MongoDBSearch como MongoDB son implementados por el Operador de Kubernetes, la configuración subyacente de mongot y mongod es gestionada en gran medida por el propio Operador de Kubernetes. Si implementa el set de réplicas de MongoDB fuera del clúster de Kubernetes:

  • .spec.source.external.tls el campo debe completarse con un Secret de Kubernetes que contenga el mismo certificado CA que usaste para configurar el mongod.

  • searchTLSMode El parámetro debe configurarse en requireTLS en la configuración de mongod.

Sin un balanceador de carga, mongod se conecta directamente a mongot usando mTLS. El mongod presenta su propio certificado de cliente, y mongot lo valida contra una CA confiable.

Si configura un balanceador de carga gestionado (spec.loadBalancer.managed), el proxy de Envoy finaliza la conexión mTLS de mongod y establece una nueva conexión mTLS con mongot. Como el balanceador de carga termina y restablece la conexión, utiliza su propio certificado de cliente al conectarse a mongot, y no el certificado original de mongod. La mongot CA debe confiar en la autoridad certificadora que emitió el certificado de cliente del balanceador de carga. El Kubernetes operador gestiona automáticamente la configuración de TLS de Envoy. Requiere los siguientes certificados:

  • Certificado de servidor para el proxy Envoy, al que se conecta mongod. El balanceador de carga utiliza este certificado para terminar la conexión entrante de mTLS.

  • Certificado cliente para el proxy Envoy, que el balanceador de carga presenta a mongot al establecer la conexión mTLS upstream.

Proporcione estos certificados como secretos de Kubernetes siguiendo la convención de nombres que define spec.security.tls.certsSecretPrefix. Consulta Configuraciones de MongoDB Search y búsqueda vectorial para el patrón completo de nomenclatura.

En esta página