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 do
MongoDBMultiCluster Recursos
em um cenário de recuperação de desastre, usando 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.
To enable this mode, use
--set multiCluster.performFailover=truein the MongoDB Helm Charts for Kubernetes. In thevalues.yamlfile in the MongoDB Helm Charts for Kubernetes directory, the environment's variable default value istrue.Como alternativa, você pode definir a variável de ambiente de sistema do MongoDB do cluster multi-Kubernetes
PERFORM_FAILOVERcomotrue, como no exemplo abreviado a seguir:spec: template: ... spec: containers: - name: mongodb-kubernetes-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.To enable this mode, use
--set multiCluster.performFailover=truein the MongoDB Helm Charts for Kubernetes, or set the multi-Kubernetes cluster MongoDB deployment environment variablePERFORM_FAILOVERtofalse, as in the following abbreviated example:spec: template: ... spec: containers: - name: mongodb-kubernetes-operator ... env: ... - name: PERFORM_FAILOVER value: "false" ...
Quando o failover automático está desabilitado, o operador remove a anotação failedClusters depois que um cluster passa nas verificações de integridade um número configurado de vezes consecutivas. Você pode configurar esse limite usando uma variável de ambiente ou um valor Helm.
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-kubernetes-operator-member-listConfigMap para seu sistema MongoDB de clusters Kubernetes múltiplos.Reequilibrar nós de hospedagem
MongoDBMultiClusterRecursosnos 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: 8.0.0 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 operador Kubernetes detecta as conexões com falha com o cluster e marca o
MongoDBMultiCluster Recursos
com a anotação failedClusters para reconciliações subsequentes. O operador remove essa anotação depois que o cluster passa na verificação de integridade um número configurado de vezes consecutivas.
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 implantação do MongoDB do cluster multi-Kubernetes usando o plugin MongoDB kubectl.
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-kubernetes-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 emCLUSTER_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: 8.0.0 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.
GitOps recovery requires manual reconfiguration of Role Based Access Control using .yaml resource files. To learn more, see Understand Kubernetes Roles and Role Bindings.