Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Instalar y usar MongoDB Search y búsqueda vectorial con una instancia externa de MongoDB Enterprise Edition

Puedes utilizar el operador Kubernetes para implementar la búsqueda de MongoDB y la búsqueda vectorial en un clúster de Kubernetes para ejecutarlo con un MongoDB Enterprise Edition v8.0.10 o superior servidor. Este procedimiento demuestra cómo implementar y configurar el mongot proceso en su clúster de Kubernetes para usar una nueva o existente implementación de set de réplicas externas.

Importante

El soporte para las versiones de MongoDB inferiores a 8.2 está ahora obsoleto. Actualiza a MongoDB v8.2 o una versión posterior.

Para implementar MongoDB Search y búsqueda vectorial, se debe contar con lo siguiente:

  • Un clúster de Kubernetes en ejecución con kubeconfig disponible localmente.

  • Herramienta de línea de comandos de Kubernetes, kubectl, configurada para comunicarse con su clúster.

  • Helm, el gestor de paquetes para Kubernetes, para instalar el Operador de Kubernetes.

  • Bash v5.1 o superior para ejecutar los comandos en este tutorial.

  • Un conjunto de réplicas de MongoDB Enterprise Edition que ejecuta la versión 8.0.10 o superior para almacenar datos.

    Para obtener más información sobre la implementación de MongoDB Enterprise, consulte Implementación y configuración de recursos de bases de datos MongoDB.

  • Un MongoDB Cloud Manager o Ops Manager en ejecución para gestionar tareas de MongoDB.

Antes de instalar MongoDB Search y búsqueda vectorial usando el Operador de Kubernetes, debes hacer lo siguiente:

Iniciar sesión en el Cloud Manager o en la interfaz de usuario del Ops Manager y realiza los siguientes pasos para configurar el Cloud Manager o el Ops Manager para la búsqueda de MongoDB y la búsqueda vectorial.

1
  1. Inicia sesión en MongoDB Cloud Manager u Ops Manager.

  2. Haz clic en la pestaña Deployment.

  3. Seleccione el clúster que desea modificar.

2
  1. Haz clic en el botón Modify para abrir el editor de configuración de implementación.

  2. Haz clic en Advanced Configuration Options en la sección Process Configuration.

  3. Haz clic en el botón Add Option y selecciona setParameter Startup Option del menú desplegable.

  4. Agrega los siguientes parámetros en los campos, uno por uno, haciendo clic en Add después de agregar el nombre y el valor:

    Parameter
    Valor

    mongotHost

    El hostname y puerto de búsqueda. Por ejemplo: search-node1.example.com:27017.

    searchIndexManagementHostAndPort

    El hostname y puerto de búsqueda. Por ejemplo: search-node1.example.com:27017.

    skipAuthenticationToSearchIndexManagementServer

    false

    searchTLSMode

    Tu modo de TLS configurado. Por ejemplo, preferTLS, si el proceso mongot está configurado para aceptar conexiones TLS.

3
  1. Haga clic en el botón Review & Deploy.

  2. Revise y confirme para aplicar los cambios.

    Cloud Manager u Ops Manager realiza un reinicio en secuencia de tu set de réplicas para aplicar la nueva configuración.

Debe crear un usuario con el rol. En las versiones de searchCoordinator MongoDB.8 2 y posteriores, el rol es un rol integrado. Debe crear un usuario y asignarle el rol. Para versiones de MongoDB searchCoordinator anteriores 8 2 8a.0 y..10 o posteriores, debe crear manualmente el rol y asignar los privilegios antes de crear el usuario. Seleccione la pestaña que corresponda a la versión de MongoDB que esté utilizando para crear un usuario con el searchCoordinator rol.

Completa los pasos de esta sección si utilizas versiones de MongoDB 8.2 o posteriores.

Para crear el usuario y asignarle el rol integrado, complete los siguientes pasos utilizando la searchCoordinator mongosh interfaz de usuario de Cloud Manager o Ops Manager o el:

1
  1. Inicia sesión en Cloud Manager o en la Interfaz de Usuario de Ops Manager.

  2. Vaya a la pestaña Security y haga clic en Users.

2
3
Username

Introduce search-sync-source.

Password

Establece una contraseña fuerte y segura.

Authentication Database

Elija la base de datos admin.

4

En la sección Assign Roles, seleccione el rol integrado searchCoordinator del menú desplegable para la base de datos admin.

5

mongoshEn, ejecute los siguientes comandos:

1
use admin;
2
db.createUser({
user: "search-sync-source",
pwd: "<PASSWORD>", // Replace with your actual password
roles: [
{ role: "searchCoordinator", db: "admin" }
]
});

Completa el paso en esta sección si utilizas versiones de MongoDB anteriores a la 8.2.

Para crear el usuario y asignarle el searchCoordinator rol integrado, complete los siguientes pasos mongosh utilizando:

mongoshEn, ejecute los siguientes comandos:

1
use admin;
2
db.createRole({
role: "searchCoordinator",
privileges: [
{
resource: { db: "__mdb_internal_search", collection: "" },
actions: [
"changeStream", "collStats",
"compactStructuredEncryptionData", "convertToCapped", "createCollection",
"createIndex", "dbHash", "dbStats",
"dropCollection", "dropIndex", "find", "insert",
"killCursors", "listCollections", "listIndexes",
"planCacheRead", "remove", "renameCollectionSameDB", "update"
]
},
{
resource: { cluster: true },
actions: [ "bypassDefaultMaxTimeMS" ]
}
],
roles: [
{ role: "clusterMonitor", db: "admin" },
{ role: "directShardOperations", db: "admin" },
{ role: "readAnyDatabase", db: "admin" }
]
});
3
db.createUser({
user: "search-sync-source",
pwd: "<PASSWORD>", // Replace with your actual password
roles: [
{ role: "searchCoordinator", db: "admin" }
]
});

Prepara tu entorno para ejecutar el código de muestra de este tutorial en una terminal.

1

Para configurar las variables de entorno para su uso en los pasos posteriores de este procedimiento, copie lo siguiente, establezca los valores de las variables de entorno y luego cargue las variables de entorno:

1export K8S_CTX="<your kubernetes context here>"
2
3export MDB_NS="mongodb"
4
5export MDB_VERSION="8.0.10"
6
7export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME"
8export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME"
9export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME"
10
11export MDB_SEARCH_SERVICE_NAME="mdbs-search"
12export MDB_SEARCH_HOSTNAME="mdbs-search.example.com"
13
14# External MongoDB replica set members - REPLACE THESE VALUES with your actual external MongoDB hosts
15# In production, replace with your actual external MongoDB replica set members
16export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
17export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
18export MDB_EXTERNAL_HOST_2="mdbc-rs-2.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
19
20# REPLACE with your external MongoDB keyfile secret name
21export MDB_EXTERNAL_KEYFILE_SECRET_NAME="mdbc-rs-keyfile"
22
23# REPLACE with the actual keyfile content from your external MongoDB replica set
24# For testing, this will be automatically generated by the MongoDB Community resource
25export MDB_EXTERNAL_KEYFILE_CONTENT="your-mongodb-keyfile-content-CHANGE-ME"
26
27# REPLACE with your actual external MongoDB replica set name
28export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs"
29
30export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"
31export OPERATOR_ADDITIONAL_HELM_VALUES=""
32
33export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_EXTERNAL_HOST_0}/?replicaSet=${MDB_EXTERNAL_REPLICA_SET_NAME}"
2

Helm automatiza la implementación y la gestión de instancias de MongoDB en Kubernetes. Si ya has agregado el Helm repositorio que contiene la Helm gráfica para instalar el operador de Kubernetes, omite este paso. De lo contrario, añade el repositorio Helm.

Para añadir, copiar, pegar y ejecutar el siguiente comando:

1helm repo add mongodb https://mongodb.github.io/helm-charts
2helm repo update mongodb
3helm search repo mongodb/mongodb-kubernetes
3

El Operador de Kubernetes supervisa MongoDB, MongoDBOpsManager y MongoDBSearch recursos personalizados y gestiona el ciclo de vida de las implementaciones de MongoDB. Si ya has instalado los Controladores de MongoDB para el operador de Kubernetes, omita este paso. De lo contrario, instala los Controladores de MongoDB para el Operador de Kubernetes desde el Helm repositorio que agregaste en el paso anterior.

Para instalar los controladores de MongoDB para Kubernetes operador en el namespace mongodb, copie, pegue y ejecute lo siguiente:

1helm upgrade --install --debug --kube-context "${K8S_CTX}" \
2 --create-namespace \
3 --namespace="${MDB_NS}" \
4 mongodb-kubernetes \
5 ${OPERATOR_ADDITIONAL_HELM_VALUES:+--set ${OPERATOR_ADDITIONAL_HELM_VALUES}} \
6 "${OPERATOR_HELM_CHART}"

El comando precedente instala el Kubernetes operador en el namespace mongodb, el cual se crea si aún no existe. Después de la instalación, el operador de Kubernetes supervisa los recursos personalizados MongoDBSearch y gestiona el ciclo de vida de tus implementaciones de MongoDB Search y búsqueda vectorial.

1

El proceso mongot requiere credenciales de autenticación para conectarse a tu implementación externa de MongoDB para crear índices de búsqueda y ejecutar consultas de búsqueda. Este paso crea los siguientes secretos de Kubernetes:

  • mdb-admin-user-password - credenciales para el administrador de MongoDB.

  • mdb-user-password - credenciales para el usuario autorizado a realizar consultas de búsqueda.

  • mdbc-rs-search-sync-source-password - credenciales para un usuario de búsqueda dedicado utilizado internamente por el proceso mongot para sincronizar los datos y gestionar los índices.

El operador de Kubernetes monta estos secretos en los pods de MongoDB.

Para crear los secretos, copia, pega y ejecuta lo siguiente en el namespace donde planeas implementar MongoDB Search y búsqueda vectorial:

1kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
2 create secret generic mdb-admin-user-password \
3 --from-literal=password="${MDB_ADMIN_USER_PASSWORD}"
4
5kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
6 create secret generic mdbc-rs-search-sync-source-password \
7 --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}"
8
9kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
10 create secret generic mdb-user-password \
11 --from-literal=password="${MDB_USER_PASSWORD}"
2

Para autenticar las conexiones desde su MongoDB externo, el proceso mongot utiliza el mismo archivo de claves que utilizan los miembros de su conjunto de réplicas de MongoDB externo para la autenticación interna entre los miembros del conjunto de réplicas.

Para crear un secreto de Kubernetes que contenga el contenido del archivo de clave de tu MongoDB externo, copia, pega y ejecuta el siguiente comando:

1kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
2 create secret generic "${MDB_EXTERNAL_KEYFILE_SECRET_NAME}" \
3 --from-literal=keyfile="${MDB_EXTERNAL_KEYFILE_CONTENT}"
3

Puedes implementar una instancia del nodo de búsqueda sin balanceo de carga. Para implementar, completa los siguientes pasos:

  1. Crear un recurso personalizado MongoDBSearch denominado mdbs.

    Este recurso contiene lo siguiente:

    spec.source.external.hostAndPorts

    Lista de miembros externos del set de réplicas de MongoDB.

    spec.source.external.keyfileSecretRef

    Secreto de Keyfile utilizado por los miembros externos del conjunto de réplicas.

    spec.source.username

    Usuario de sincronización de búsqueda nombre de usuario.

    spec.source.passwordSecretRef

    Contraseña de usuario de sincronización de búsqueda.

    spec.resourceRequirements

    Requisitos de recursos de CPU y memoria para el contenedor de búsqueda.

    Para aprender más sobre la configuración de este recurso personalizado, consulta MongoDB Search y búsqueda vectorial.

    1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF
    2apiVersion: mongodb.com/v1
    3kind: MongoDBSearch
    4metadata:
    5 name: mdbs
    6spec:
    7 source:
    8 external:
    9 hostAndPorts:
    10 - ${MDB_EXTERNAL_HOST_0}
    11 - ${MDB_EXTERNAL_HOST_1}
    12 - ${MDB_EXTERNAL_HOST_2}
    13 keyfileSecretRef:
    14 name: ${MDB_EXTERNAL_KEYFILE_SECRET_NAME}
    15 key: keyfile
    16 username: search-sync-source
    17 passwordSecretRef:
    18 name: ${MDB_RESOURCE_NAME}-search-sync-source-password
    19 key: password
    20 resourceRequirements:
    21 limits:
    22 cpu: "3"
    23 memory: 5Gi
    24 requests:
    25 cpu: "2"
    26 memory: 3Gi
    27EOF
  2. Espera a que se complete la implementación del recurso MongoDBSearch.

    Cuando aplicas el recurso personalizado MongoDBSearch, el operador de Kubernetes comienza a implementar los nodos de búsqueda (pods). Este paso pausa la ejecución hasta que la fase de estado del recurso mdbs sea Running, lo que indica que el StatefulSet de MongoDB Search está operativo.

    1echo "Waiting for MongoDBSearch resource to reach Running phase..."
    2kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait \
    3 --for=jsonpath='{.status.phase}'=Running mdbs/mdbs --timeout=300s
4

Para permitir que tus instancias externas de MongoDB se conecten al servicio de búsqueda, debes configurar el acceso externo tanto para MongoDB Search como para búsqueda vectorial. Puedes crear un Servicio LoadBalancer que exponga los pods de búsqueda fuera del clúster de Kubernetes.

El siguiente servicio expone el servicio MongoDBSearch en el puerto 27027 con una dirección IP externa o un hostname que se puede acceder desde fuera del clúster de Kubernetes.

1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAML
2apiVersion: v1
3kind: Service
4metadata:
5 name: ${MDB_SEARCH_SERVICE_NAME}
6spec:
7 type: LoadBalancer
8 selector:
9 app: mdbs-search-svc
10 ports:
11 - name: mongot
12 port: 27027
13 targetPort: 27027
14YAML
15
16echo "Waiting for external IP to be assigned to service ${MDB_SEARCH_SERVICE_NAME}..."
17TIMEOUT=120 # 2 minutes timeout
18ELAPSED=0
19while [ ${ELAPSED} -lt ${TIMEOUT} ]; do
20 EXTERNAL_IP=$(kubectl get service "${MDB_SEARCH_SERVICE_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null)
21 if [ -n "${EXTERNAL_IP}" ] && [ "${EXTERNAL_IP}" != "null" ]; then
22 echo "External IP assigned: ${EXTERNAL_IP}"
23 break
24 fi
25 echo "Still waiting for external IP assignment... (${ELAPSED}s/${TIMEOUT}s)"
26 sleep 5
27 ELAPSED=$((ELAPSED + 5))
28done
29
30if [ ${ELAPSED} -ge ${TIMEOUT} ]; then
31 echo "ERROR: Timeout reached (${TIMEOUT}s) while waiting for external IP assignment"
32 echo "LoadBalancer service may take longer to provision or there may be an issue"
33 exit 1
34fi
5

Visualiza todos los pods en ejecución en los pods de tu namespace para los miembros del set de réplicas MongoDB, los Controladores MongoDB para Kubernetes operador y los nodos de búsqueda.

1echo; echo "MongoDBSearch resource"
2kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdbs
3echo; echo "Search pods running in cluster ${K8S_CTX}"
4kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods -l app=mdbs-search-svc
5echo; echo "All pods in namespace ${MDB_NS}"
6kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods

Ahora que has implementado satisfactoriamente MongoDB Search y búsqueda vectorial para usar con MongoDB Enterprise Edition externa, puedes añadir datos en tu clúster de MongoDB, crear índices de búsqueda y búsqueda vectorial, y ejecutar queries sobre tus datos. Para obtener más información, consulta la Configuración de MongoDB Search y búsqueda vectorial.