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.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

Devuelva una base de datos de aplicación externa al administrador de operaciones.

Puede devolver una base de datos de la aplicación externa a la gestión interna mediante el recurso de MongoDB Ops Manager. El recurso de MongoDB Ops Manager recupera el StatefulSet de la base de datos de la aplicación existente y, a continuación, borra el recurso de MongoDB que la gestionaba. El operador de Kubernetes no mueve ni vuelve a crear sus datos, y no reinicia los pods de MongoDB Ops Manager.

El recurso de MongoDB Ops Manager comienza con una base de datos de la aplicación externa: un recurso de MongoDB con spec.role establecido en AppDB, denominado <primary-om-name>-db, que posee el StatefulSet de la base de datos de la aplicación. La migración procede de la siguiente manera:

  1. Usted remueve spec.externalApplicationDatabaseRef del recurso de MongoDB Ops Manager y añade spec.applicationDatabase.

  2. El operador de Kubernetes solicita al recurso de MongoDB que libere el StatefulSet. El recurso de MongoDB informa la fase Pending mientras espera que el recurso del administrador de operaciones lo recupere.

  3. El operador de Kubernetes recupera el StatefulSet y lo gestiona como una base de datos de la aplicación interna. Debido a que la cadena de conexión no cambia, los pods de MongoDB Ops Manager no se reinician.

  4. Eliminas el recurso de MongoDB, que ya no posee nada.

Advertencia

Elimine el recurso MongoDB solo después de que el recurso Ops Manager vuelva a administrar la base de datos de la aplicación interna. Si elimina el recurso MongoDB mientras aún posee el StatefulSet, Kubernetes eliminará la base de datos de la aplicación mediante el recolector de basura. Para recuperarse de este estado, es necesario recrear la base de datos de la aplicación a partir de las reclamaciones de volumen persistentes retenidas, lo que provoca un tiempo de inactividad y la rotación de las credenciales de la base de datos de la aplicación.

Antes de comenzar, cumpla con las siguientes tareas:

  • Instala el operador de Kubernetes y kubectl. Para aprender más, consulta Instala con Kubernetes.

  • Confirme que el recurso primario de MongoDB Ops Manager utiliza una base de datos de la aplicación externa: establece spec.externalApplicationDatabaseRef en un recurso de MongoDB denominado <primary-om-name>-db, no establece spec.applicationDatabase, y su status.applicationDatabase.phase informa Disabled.

  • Confirme que el recurso de MongoDB está en la fase Running y es propietario del StatefulSet de la base de datos de la aplicación.

Revise las siguientes consideraciones antes de migrar:

  • Establezca spec.applicationDatabase.version en la versión que la base de datos de la aplicación ya ejecuta. La reutilización de la misma versión mantiene los mismos archivos binarios y datos en su lugar. Otra versión inicia una actualización de la base de datos de la aplicación al mismo tiempo que el traspaso.

  • El operador de Kubernetes no elimina el proyecto de Ops Manager que creó para la base de datos de aplicaciones externa. Eliminar dicho proyecto hace que las métricas históricas de la base de datos de aplicaciones sean ilegibles, por lo que limpiarlo es decisión suya.

1
export K8S_CTX="<your-kube-context>"
export MDB_NS="mongodb"
export PRIMARY_OM_NAME="primary-om"
export APPDB_NAME="${PRIMARY_OM_NAME}-db"
export APPDB_VERSION="8.0.5-ent"
2
  1. Confirme que el recurso del Administrador de operaciones hace referencia a la base de datos de la aplicación externa y que informa de su base de datos de la aplicación como Disabled:

    kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='ref={.spec.externalApplicationDatabaseRef.name} appdb={.status.applicationDatabase.phase}{"\n"}'
  2. Confirme que el recurso MongoDB es propietario del StatefulSet de la base de datos de la aplicación:

    kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}'

    El comando devuelve MongoDB/${APPDB_NAME}.

3

Este parche elimina spec.externalApplicationDatabaseRef y agrega spec.applicationDatabase.

kubectl patch om "${PRIMARY_OM_NAME}" \
--context "${K8S_CTX}" -n "${MDB_NS}" \
--type merge \
-p "{\"spec\":{\"externalApplicationDatabaseRef\":null,\"applicationDatabase\":{\"members\":3,\"version\":\"${APPDB_VERSION}\"}}}"
4
  1. Confirme que el recurso MongoDB libera el StatefulSet. El recurso informa la fase Pending con un mensaje que indica que está en proceso de migración inversa al recurso Ops Manager:

    kubectl wait --for=jsonpath='{.status.phase}'=Pending \
    mdb/"${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=300s
    kubectl get mdb "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='{.status.message}{"\n"}'
  2. Espere a que el administrador de operaciones vuelva a gestionar la base de datos de la aplicación interna:

    kubectl wait --for=jsonpath='{.status.applicationDatabase.phase}'=Running \
    om/"${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1200s
    kubectl wait --for=jsonpath='{.status.opsManager.phase}'=Running \
    om/"${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" --timeout=1800s
5

Complete este paso solo después de que el paso anterior reporte applicationDatabase.phase=Running.

kubectl delete mdb "${APPDB_NAME}" \
--context "${K8S_CTX}" -n "${MDB_NS}" --wait=true --timeout=300s
6
  1. Confirme que el recurso de MongoDB Ops Manager es propietario del StatefulSet de la base de datos de la aplicación:

    kubectl get statefulset "${APPDB_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='{range .metadata.ownerReferences[*]}{.kind}/{.name}{"\n"}{end}'

    El comando devuelve MongoDBOpsManager/${PRIMARY_OM_NAME}.

  2. Confirme que el recurso Ops Manager informa que su base de datos de aplicación es Running y que el recurso MongoDB ya no existe:

    kubectl get om "${PRIMARY_OM_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" \
    -o jsonpath='{.status.applicationDatabase.phase}{"\n"}'
    kubectl get mdb --context "${K8S_CTX}" -n "${MDB_NS}"
  3. Confirme que los pods de Ops Manager no se hayan reiniciado comprobando su antigüedad y el número de reinicios:

    kubectl get pods --context "${K8S_CTX}" -n "${MDB_NS}"

Si el recurso MongoDB permanece en la fase Running y aún posee el StatefulSet, el recurso Ops Manager no ha solicitado la liberación. Confirme que su parche cambió spec.externalApplicationDatabaseRef a null y agregó spec.applicationDatabase.

Establezca spec.applicationDatabase.version a la versión que ya ejecuta la base de datos de la aplicación para que el StatefulSet recuperado mantenga los mismos binarios.

Si elimina el recurso MongoDB mientras aún posee el StatefulSet, Kubernetes elimina el StatefulSet y los secretos que comparte con el recurso Ops Manager. Para recuperarse, vuelva a crear la base de datos de la aplicación a partir de las reclamaciones de volumen persistentes conservadas. Este proceso provoca un tiempo de inactividad y rota las credenciales de la base de datos de la aplicación. Para obtener más información, consulte Recuperación ante desastres para los recursos de Ops Manager y AppDB.

Para volver a utilizar una base de datos de aplicación externa, consulte Migrar una base de datos de aplicación a una implementación externa.