Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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éctalo con tu despliegue de base de datos MongoDB (mongod). El despliegue de mongot es opcional y solo es necesario si planeas usar las funciones 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 vinculados a un único conjunto de réplicas de MongoDB y no se pueden compartir entre varias bases de datos o conjuntos de réplicas. En una implementación de conjunto de réplicas, un grupo de nodos de búsqueda dedicados presta servicio al conjunto de réplicas. En un clúster fragmentado, cada fragmento mantiene su propio grupo independiente de nodos mongot. Los fragmentos no comparten instancias 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 spec.replicas campo controla cuántas mongot instancias implementa el operador de Kubernetes. Para una fuente despec.replicas conjunto de réplicas, establece el número total de mongot pods. Para una fuente de clúster fragmentado, spec.replicas establece el número de mongot pods por fragmento.

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

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, se aplica el recurso personalizado (CR) MongoDBSearch, que el operador de Kubernetes detecta y comienza a implementar pods mongot y solicita el almacenamiento persistente especificado en spec. MongoDB Search y Vector Search implementados a través del operador de Kubernetes pueden apuntar a un conjunto de réplicas de MongoDB o a un clúster fragmentado implementado por el operador de Kubernetes dentro del mismo clúster de Kubernetes, o a una implementación externa de MongoDB completamente independiente (conjunto 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 con MongoDB Community Edition o Instalar y usar Buscar con 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 MongoDB Search y Vector Search en su:

  • Para el despliegue de MongoDB Community, debe tener un conjunto de réplicas o clúster fragmentado de MongoDB 8.2 o posterior completamente funcional desplegado dentro de un clúster de Kubernetes utilizando el operador de Kubernetes.

  • Para la implementación de MongoDB Enterprise, debe tener un conjunto de réplicas o un clúster fragmentado de MongoDB 8.2 o posterior completamente funcional implementado de una de las siguientes maneras:

    • Dentro de un clúster de Kubernetes usando 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 llevar a cabo para implementar correctamente MongoDB Search y Vector Search en Kubernetes y conectarse a un conjunto de réplicas de MongoDB o a un clúster fragmentado 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

Le

Le

Implementar un conjunto de réplicas de MongoDB o un clúster fragmentado.

Operador de Kubernetes

Le

Crea un recurso personalizado MongoDBSearch

Le

Le

Proporcione la cadena de conexión para la implementación de MongoDB.

Operador de Kubernetes

Le

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

Le

Crea un usuario para mongot con el searchCoordinator rol

Kubernetes operador y usted aplicando el recurso MongoDBUser

Le

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

Le

Le

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

Le

Le

Exponer externamente los pods de búsqueda o el balanceador de carga para conectarse desde cada nodo mongod

No es necesario

Le

Exponer mongod pods externamente para conectarse desde mongot nodos

No es necesario

Le

Configurar el balanceador de carga administrado (cuando spec.replicas es mayor que 1)

Operador de Kubernetes

Operador de Kubernetes

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

Le

Le

Proporcionar certificados TLS por fragmento (clústeres fragmentados con TLS)

Le

Le

Exponer el balanceador de carga externamente (MongoDB externo + Balanceador de carga administrado)

No es necesario

Le

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 del archivo de claves 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.

Al configurarse para indexar un recurso de MongoDB dentro del mismo clúster de Kubernetes, el operador de Kubernetes propaga automáticamente el certificado de CA mongod a mongot y habilita mTLS para las conexiones de consultas de búsqueda si tanto los recursos MongoDB como MongoDBSearch están configurados para TLS. Si el conjunto de réplicas de MongoDB se implementa fuera de Kubernetes, debe crear un secreto de Kubernetes que contenga el certificado de 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 consultas de búsqueda.

MongoDBSearch puede proteger los datos y las credenciales en tránsito mediante TLS. Para los comandos de administración de índices y las consultas de búsqueda, configure el spec.security.tls campo y proporcione un certificado TLS. Puede dejar este campo vacío{} () para habilitar TLS con la configuración predeterminada.

Obsoleto desde la 1.8.0 versión: spec.security.tls.certificateKeySecretRef está obsoleto. Para implementaciones de conjuntos de réplicas, el operador de Kubernetes aún certificateKeySecretRef admite, pero debe migrar spec.security.tls.certsSecretPrefix a. Para implementaciones de clústeres fragmentados, no puede usar certificateKeySecretRef porque el operador de Kubernetes lee un mongot secreto de certificado de servidor independiente para cada fragmento.

spec.security.tls.certsSecretPrefix Es un campo opcional. Al especificarlo, el operador de Kubernetes antepone <certsSecretPrefix>- a todos los nombres de secretos de certificado que lee. El operador de Kubernetes lee los siguientes secretos de certificado:

Topología del clúster
mongot Certificado

Set de réplicas

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

Clúster fragmentado

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

Si se establece spec.loadBalancer.managed, el certificado del cliente del 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 del clúster
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 de CA que utiliza el conjunto de réplicas de MongoDB.

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

  • .spec.source.external.tls El campo debe rellenarse con un secreto de Kubernetes que contenga el mismo certificado CA que utilizó para configurar el mongod.

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

Sin un balanceador de carga, mongod se conecta directamente a mongot mediante mTLS. mongod presenta su propio certificado de cliente y mongot lo valida con una CA de confianza.

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

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

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

Configure estos certificados como secretos de Kubernetes siguiendo la convención de nomenclatura spec.security.tls.certsSecretPrefix definida por. Consulte la configuración de búsqueda de MongoDB y la configuración de búsqueda vectorial para ver el patrón de nomenclatura completo.

En esta página