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.

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 searchCoordinator. En las versiones de MongoDB 8.2 y posteriores, el searchCoordinator es una funcionalidad incorporada. Debe crear un usuario y asignarle el rol correspondiente. Para las versiones anteriores a 8.2 y 8.0.10 de MongoDB, 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á ejecutando para crear un usuario con el rol searchCoordinator.

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

Para crear el usuario y asignarle el searchCoordinator rol integrado, complete los siguientes pasos utilizando la interfaz de usuario de Cloud Manager o Ops Manager o mongosh 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

In mongosh, run the following commands:

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 utilizando la interfaz de usuario de Cloud Manager o Ops Manager o mongosh el:

Para crear el rol de searchCoordinator con los privilegios y luego agregar un usuario con el rol de searchCoordinator, complete los siguientes pasos en la interfaz de usuario de Cloud Manager o MongoDB Ops Manager:

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

  2. Haz clic en la pestaña Security y luego en la subpestaña Roles.

  3. Haga clic en Add New Custom Role.

2
3

En la sección Role Inheritance, agrega los siguientes tres roles de la base de datos admin:

  • clusterMonitor

  • directShardOperations

  • readAnyDatabase

4
  1. En la sección Privileges, haga clic en Add Privilege.

  2. Para Resource, ingresa __mdb_internal_search para la base de datos.

    No introduzcas nada en el campo de colección.

  3. Bajo Actions, agregue las siguientes acciones.

    • changeStream

    • cleanupStructuredEncryptionData, compactStructuredEncryptionData

    • collStats

    • convertToCapped

    • createCollection, dropCollection, listCollections, renameCollectionSameDB

    • createIndex, dropIndex, listIndexes

    • createSearchIndexes, dropSearchIndex, listSearchIndexes, updateSearchIndex

    • dbHash, dbStats

    • find, insert, remove, update

    • killCursors

    • planCacheRead

5
  1. Haga clic en Add Privilege.

  2. Para Resource, active el tipo de recurso en cluster.

  3. Para Action, seleccione bypassDefaultMaxTimeMS.

6
7

Go a la pestaña Security y haz clic en Users.

8
9
Username

Introduce search-sync-source.

Password

Establece una contraseña fuerte y segura.

Authentication Database

Elija la base de datos admin.

10

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

In mongosh, run the following commands:

1
use admin;
2
db.createRole({
role: "searchCoordinator",
privileges: [
{
resource: { db: "__mdb_internal_search", collection: "" },
actions: [
"changeStream", "cleanupStructuredEncryptionData", "collStats",
"compactStructuredEncryptionData", "convertToCapped", "createCollection",
"createIndex", "createSearchIndexes", "dbHash", "dbStats",
"dropCollection", "dropIndex", "dropSearchIndex", "find", "insert",
"killCursors", "listCollections", "listIndexes", "listSearchIndexes",
"planCacheRead", "remove", "renameCollectionSameDB", "update", "updateSearchIndex"
]
},
{
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_HOSTNAME="mdbs-search"
12
13# External MongoDB replica set members - REPLACE THESE VALUES with your actual external MongoDB hosts
14# In production, replace with your actual external MongoDB replica set members
15export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
16export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
17export MDB_EXTERNAL_HOST_2="mdbc-rs-2.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
18
19# REPLACE with your external MongoDB keyfile secret name
20export MDB_EXTERNAL_KEYFILE_SECRET_NAME="mdbc-rs-keyfile"
21
22# REPLACE with the actual keyfile content from your external MongoDB replica set
23# For testing, this will be automatically generated by the MongoDB Community resource
24export MDB_EXTERNAL_KEYFILE_CONTENT="your-mongodb-keyfile-content-CHANGE-ME"
25
26# REPLACE with your actual external MongoDB replica set name
27export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs"
28
29export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"
30export OPERATOR_ADDITIONAL_HELM_VALUES=""
31
32export 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: mdbc-rs-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_HOSTNAME}
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_HOSTNAME}..."
17TIMEOUT=120 # 2 minutes timeout
18ELAPSED=0
19while [ ${ELAPSED} -lt ${TIMEOUT} ]; do
20 EXTERNAL_IP=$(kubectl get service "${MDB_SEARCH_HOSTNAME}" --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.