Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Retornar um banco de dados de aplicativo externo ao Ops Manager

Você pode retornar um banco de dados de aplicativos externo para gerenciamento interno pelo recurso Ops Manager. O recurso Ops Manager recupera o banco de dados de aplicativo StatefulSet existente e, em seguida, você exclui o recurso MongoDB que o gerenciou. O Operador Kubernetes não move nem recria seus dados e não reinicia os pods do Ops Manager.

O recurso Ops Manager começa com um aplicativo de banco de dados externo: um recurso do MongoDB com spec.role definido como AppDB, chamado <primary-om-name>-db, que possui o aplicativo de banco de dados StatefulSet. A migração prossegue da seguinte forma:

  1. Você remove spec.externalApplicationDatabaseRef do recurso Ops Manager e adiciona spec.applicationDatabase.

  2. O Operador Kubernetes solicita ao recurso MongoDB para liberar o StatefulSet. O recurso MongoDB relata a fase Pending enquanto aguarda que o recurso Ops Manager o recupere.

  3. O Operador Kubernetes recupera o StatefulSet e o gerencia como um aplicativo de banco de dados interno. Como a string de conexão não muda, os pods do Ops Manager não são reiniciados.

  4. Você exclui o recurso MongoDB , que não possui mais nada.

Aviso

Exclua o recurso MongoDB somente depois que o recurso do Ops Manager gerenciar o banco de dados interno de aplicativos novamente. Se você excluir o recurso MongoDB enquanto ele ainda possui o StatefulSet, o Kubernetes coletará o aplicativo de banco de dados. A recuperação desse estado requer a recriação do Banco de Dados a partir das Declarações de Volume Persistentes retidas, o que causa tempo de inatividade e gira as credenciais do Banco de Dados de Aplicativo.

Antes de começar, conclua as seguintes tarefas:

  • Instale o Operador Kubernetes e kubectl. Para saber mais,consulte Instalar com Kubernetes.

  • Confirme que o recurso principal do Ops Manager usa um banco de dados de aplicativos externo: ele define spec.externalApplicationDatabaseRef como um recurso do MongoDB chamado <primary-om-name>-db, não define spec.applicationDatabase e seu status.applicationDatabase.phase reporta Disabled.

  • Confirme que o recurso MongoDB está na fase Running e possui o StatefulSet do banco de dados de aplicativos.

Revise as seguintes considerações antes de migrar:

  • Defina spec.applicationDatabase.version para a versão que o banco de dados do aplicativo já executa. Reutilizar a mesma versão mantém os mesmos binários e dados no lugar. Uma versão diferente inicia uma atualização do banco de dados do aplicativo ao mesmo tempo que a transferência.

  • O Kubernetes Operator não exclui o projeto do Ops Manager que ele criou para o aplicativo de banco de dados externo. A remoção desse projeto torna as métricas históricas do banco de dados de aplicativos ilegíveis, portanto, a limpeza é uma decisão sua.

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 o recurso do Ops Manager faz referência ao banco de dados de aplicativos externo e relata seu banco de dados de aplicativos 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 o recurso MongoDB possui o Banco de Dados do Aplicativo StatefulSet:

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

    O comando retorna MongoDB/${APPDB_NAME}.

3

Este patch remove spec.externalApplicationDatabaseRef e adiciona 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 o recurso MongoDB libera o StatefulSet. O recurso relata a fase Pending com uma mensagem de que está sob migração reversa para o 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. Aguarde o recurso do Ops Manager gerenciar o banco de dados de aplicativos interno novamente:

    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

Conclua esta etapa somente após a etapa anterior informar applicationDatabase.phase=Running.

kubectl delete mdb "${APPDB_NAME}" \
--context "${K8S_CTX}" -n "${MDB_NS}" --wait=true --timeout=300s
6
  1. Confirme que o recurso Ops Manager possui o banco de dados do aplicativo StatefulSet:

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

    O comando retorna MongoDBOpsManager/${PRIMARY_OM_NAME}.

  2. Confirme que o recurso Ops Manager relata seu Banco de Dados de Aplicativo como Running e que o recurso MongoDB não existe mais:

    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 os pods do Ops Manager não foram reiniciados verificando a idade e as contagens de reinicialização:

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

Se o recurso MongoDB permanecer na fase Running e ainda possuir o StatefulSet, o recurso Ops Manager não solicitou a versão. Confirme que seu patch definiu spec.externalApplicationDatabaseRef como null e adicionou spec.applicationDatabase.

Defina spec.applicationDatabase.version como a versão que o banco de dados do aplicativo já executa para que o StatefulSet recuperado mantenha os mesmos binários.

Se você excluir o recurso MongoDB enquanto ele ainda possui o StatefulSet, o lixo do Kubernetes coletará o StatefulSet e os segredos que ele compartilhará com o recurso Ops Manager. Para recuperar, recrie o Banco de Dados do Aplicativo a partir das Declarações de Volume Persistentes retidas. Esse caminho causa tempo de inatividade e gira as credenciais do banco de dados do aplicativo. Para saber mais, consulte Recuperação de desastres para Ops Manager e Recursos do AppDB.

Para usar um aplicativo de banco de dados externo novamente, consulte Migrar um aplicativo de banco de dados para um sistema externo.