O Operador Kubernetes pode orquestrar a recuperação dos membros do conjunto de réplicas do MongoDB para um cluster Kubernetes íntegro quando o Operador Kubernetes identifica que o cluster Kubernetes original está inativo.
Modos de recuperação após desastres
O Operador Kubernetes pode orquestrar uma correção automática ou manual dos recursos do MongoDBMultiCluster em um cenário de recuperação de desastres, utilizando um dos seguintes modos:
- O Modo de Failover Automático permite que o Operador do Kubernetes desloque os membros do conjunto de réplicas do MongoDB afetado de um cluster do Kubernetes não íntegro para clusters do Kubernetes íntegros. Quando o Operador Kubernetes executa essa correção automática, ele distribui uniformemente os membros do conjunto de réplicas entre os clusters Kubernetes íntegros. - Para habilitar este modo , utilize - --set multiCluster.performFailover=truenos Charts MongoDB Helm para Kubernetes. No arquivo- values.yamlno diretório MongoDB Helm Charts for Kubernetes, o valor padrão da variável do ambiente é- true.- Como alternativa, você pode definir a variável de ambiente de sistema do MongoDB do cluster multi-Kubernetes - PERFORM_FAILOVERcomo- true, como no exemplo abreviado a seguir:- spec: - template: - ... - spec: - containers: - - name: mongodb-enterprise-operator - ... - env: - ... - - name: PERFORM_FAILOVER - value: "true" - ... 
- O modo de failover manual (baseado em plug-ins) permite que você use o plug- in MongoDB Kubectl para reconfigurar o Kubernetes Operator para usar novos clusters de Kubernetes íntegros. Neste modo, você distribui membros do conjunto de réplicas entre os novos clusters íntegros configurando o recurso - MongoDBMultiClustercom base em sua configuração.- Para habilitar esse modo, use - --set multiCluster.performFailover=truenos MongoDB Helm Charts for Kubernetes ou defina a variável de ambiente de sistema do MongoDB do cluster multi-Kubernetes- PERFORM_FAILOVERa- false, como no exemplo abreviado a seguir:- spec: - template: - ... - spec: - containers: - - name: mongodb-enterprise-operator - ... - env: - ... - - name: PERFORM_FAILOVER - value: "false" - ... 
Observação
Você não pode confiar nos modos de failover automático ou manual quando um cluster Kubernetes que hospeda uma ou mais instâncias do Operador Kubernetes fica inativo ou o membro do conjunto de réplicas reside no mesmo cluster Kubernetes com falha que o Kubernetes que o gerencia.
Nesses casos, para restaurar os membros do conjunto de réplicas de clusters Kubernetes perdidos para os clusters Kubernetes íntegros restantes, você deve primeiro restaurar a instância do Kubernetes Operator que gerencia seus sistemas MongoDB do cluster multi-Kubernetes ou reimplantar o Kubernetes Operator em um dos clusters Kubernetes restantes e execute novamente o plug-in kubectl mongodb . Para saber mais, consulte Recuperar manualmente de uma falha usando o plug-in do MongoDB.
Recuperar manualmente de uma falha usando o plug-in MongoDB
Quando um cluster Kubernetes que hospeda uma ou mais instâncias do Kubernetes Operator é desativado ou o membro do conjunto de réplicas reside no mesmo cluster Kubernetes com falha que o Kubernetes que o gerencia, você não pode confiar nos modos de failover automático ou manual e deve usar o seguinte procedimento para recuperar manualmente de um cluster Kubernetes com falha.
O procedimento a seguir usa o plug- in MongoDB Kubectl para:
- Configure novos clusters Kubernetes íntegros. 
- Adicione estes clusters Kubernetes como novos clusters membros ao - mongodb-enterprise-operator-member-listConfigMap para seu sistema MongoDB de clusters Kubernetes múltiplos.
- Reequilibre os nós que hospedam recursos do - MongoDBMultiClusternos nós nos clusters Kubernetes íntegros.
O tutorial a seguir sobre recuperação manual de desastres pressupõe que você:
- Distribuiu um cluster de operadores e três clusters de membros, seguindo o Início Rápido de Multi-Kubernetes-Cluster. Nesse caso, o Kubernetes Operator é instalado com o failover automatizado desabilitado com - --set multiCluster.performFailover=false.
- Implantou um recurso - MongoDBMultiClusterda seguinte forma:- kubectl apply -n mongodb -f - <<EOF - apiVersion: mongodb.com/v1 - kind: MongoDBMultiCluster - metadata: - name: multi-replica-set - spec: - version: 6.0.5-ent - type: ReplicaSet - persistent: false - duplicateServiceObjects: true - credentials: my-credentials - opsManager: - configMapRef: - name: my-project - security: - tls: - ca: custom-ca - clusterSpecList: - - clusterName: ${MDB_CLUSTER_1_FULL_NAME} - members: 3 - - clusterName: ${MDB_CLUSTER_2_FULL_NAME} - members: 2 - - clusterName: ${MDB_CLUSTER_3_FULL_NAME} - members: 3 - EOF 
O Operador Kubernetes verifica periodicamente a conectividade com os clusters no sistema MongoDB de clusters multi-Kubernetes fazendo ping nos endpoints /readyz dos servidores correspondentes. Para saber mais sobre /readyz, consulte os endpoints de integridade da API Kubernetes.
Caso CLUSTER_3 em nosso exemplo fique indisponível, o Kubernetes Operator detecta as conexões com falha com o cluster e marca os recursos MongoDBMultiCluster com a anotação failedClusters para reconciliações subsequentes.
Os recursos com nós de dados distribuídos nesse cluster falham na reconciliação até que você execute as etapas manuais de recuperação, como no procedimento a seguir.
Para reequilibrar os nós de dados do MongoDB para que todos os volumes de trabalho sejam executados em CLUSTER_1 e CLUSTER_2:
Recupere a implementação do MongoDB do cluster multi-Kubernetes usando o plug- in MongoDB kubectl.plugin
kubectl mongodb multicluster recover \   --central-cluster="MDB_CENTRAL_CLUSTER_FULL_NAME" \   --member-clusters="${MDB_CLUSTER_1_FULL_NAME},${MDB_CLUSTER_2_FULL_NAME}" \   --member-cluster-namespace="mongodb" \   --central-cluster-namespace="mongodb" \   --operator-name=mongodb-enterprise-operator-multi-cluster \   --source-cluster="${MDB_CLUSTER_1_FULL_NAME}" 
Este comando:
- Reconfigura o Operador Kubernetes para gerenciar volumes de trabalho nos dois clusters Kubernetes íntegros. (Esta lista também pode incluir novos clusters Kubernetes). 
- Marca - CLUSTER_1como a origem da configuração do nó do membro para novos clusters do Kubernetes. Replica a configuração de role e conta de serviço para corresponder à configuração em- CLUSTER_1.
Reequilibrar os nós de dados nos clusters Kubernetes íntegros.
Reconfigure o recurso MongoDBMultiCluster para reequilibrar os nós de dados nos clusters Kubernetes íntegros editando os recursos afetados pela alteração:
kubectl apply -n mongodb -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata:   name: multi-replica-set spec:   version: 6.0.0-ent   type: ReplicaSet   persistent: false   duplicateServiceObjects: true   credentials: my-credentials   opsManager:     configMapRef:       name: my-project  security:    tls:      ca: custom-ca  clusterSpecList:    - clusterName: ${MDB_CLUSTER_1_FULL_NAME}      members: 4    - clusterName: ${MDB_CLUSTER_2_FULL_NAME}      members: 3  EOF 
Recuperar-se manualmente de uma falha usando fluxos de trabalho do GitOps
Para obter um exemplo de uso do plugin-in kubectl do MongoDB em um fluxo de trabalho GitOps com o Agos CD, consulte exemplo de plugin-in de vários clusters para GitOps.
A recuperação do GitOps requer reconfiguração manual do Controle de Acesso Baseado em Função usando arquivos de recursos .yaml. Para saber mais, consulte Noções básicas sobre funções e vinculações de funções do Kubernetes.