재해 복구
이 페이지의 내용
Kubernetes 연산자는 원래 Kubernetes cluster가 다운된 것으로 확인되면, Kubernetes 연산자가 MongoDB 복제본 세트 멤버를 정상 Kubernetes cluster로 복구하는 것을 조정할 수 있습니다.
재해 복구 모드
Kubernetes 연산자는 다음 모드 중 하나를 사용하여 재해 복구 시나리오에서 MongoDBMultiCluster
리소스의 자동 또는 수동 수정을 조정할 수 있습니다.
자동 페일오버 모드 를 사용하면 Kubernetes 연산자는 영향을 받는 MongoDB 복제본 세트 멤버를 비정상 Kubernetes cluster에서 정상 Kubernetes cluster로 이동할 수 있습니다. Kubernetes 연산자가 이 자동 문제 해결을 수행할 때, 복제본 세트 멤버를 건강한 Kubernetes cluster 전체에 균등하게 배포합니다.
이 모드 를 활성화 하려면 Kubernetes 용 MongoDB Helm Charts 에서
--set multiCluster.performFailover=true
를 사용합니다.values.yaml
MongoDB Helm Charts for Kubernetes 디렉토리 의 파일 에서 환경의 변수 기본값 은true
입니다.또는 다음 축약된 예제에서와 같이 다중 Kubernetes cluster MongoDB 배포 환경 변수
PERFORM_FAILOVER
을true
로 설정할 수 있습니다.spec: template: ... spec: containers: - name: mongodb-enterprise-operator ... env: ... - name: PERFORM_FAILOVER value: "true" ... 수동(플러그인 기반) 페일오버 모드 를 사용하면 MongoDB kubectl 플러그인 을 사용하여 새로운 정상 Kubernetes 클러스터를 사용하도록 Kubernetes Operator를 재구성할 수 있습니다. 이 모드 에서는 구성에 따라
MongoDBMultiCluster
리소스 를 구성하여 새로운 정상 클러스터 전체에 복제본 세트 멤버를 배포합니다.이 모드를 활성화하려면
--set multiCluster.performFailover=true
MongoDB 용 Charts KubernetesHelmKubernetes MongoDBPERFORM_FAILOVER
에서 을(를)false
사용하세요. 또는 다음 축약된 예제와 같이 다중 클러스터 배포 환경 변수 를 로 설정합니다.spec: template: ... spec: containers: - name: mongodb-enterprise-operator ... env: ... - name: PERFORM_FAILOVER value: "false" ...
참고
하나 이상의 Kubernetes Operator 인스턴스를 호스팅하는 Kubernetes 클러스터가 다운되거나 복제본 세트 멤버가 이를 관리하는 Kubernetes와 동일한 장애가 발생한 Kubernetes 클러스터에 있는 경우 자동 또는 수동 페일오버 모드 에 의존할 수 없습니다.
이러한 경우, 손실된 Kubernetes 클러스터에서 나머지 정상 Kubernetes 클러스터로 복제본 세트 멤버를 복원하려면 먼저 다중 Kubernetes 클러스터 MongoDB 배포를 관리하는 Kubernetes Operator 인스턴스를 복원하거나 나머지 Kubernetes 클러스터 중 하나에 Kubernetes Operator를 재배포해야 합니다. kubectl mongodb
플러그인을 다시 실행합니다. 자세한 내용 은 MongoDB 플러그인을 사용하여 장애 수동 복구를 참조하세요.
MongoDB 플러그인을 사용하여 장애 수동 복구
하나 이상의 Kubernetes Operator 인스턴스를 호스팅하는 Kubernetes 클러스터가 다운되거나 복제본 세트 멤버가 이를 관리하는 Kubernetes와 동일한 장애가 발생한 Kubernetes 클러스터에 있는 경우, 자동 또는 수동 페일오버 모드 에 의존할 수 없으며 다음을 사용해야 합니다. 절차를 통해 실패한 Kubernetes 클러스터에서 수동으로 복구할 수 있습니다.
다음 절차에서는 MongoDB kubectl 플러그인 을 사용하여 다음을 수행합니다.
새로운 정상 Kubernetes cluster를 구성합니다.
이러한 Kubernetes 클러스터를 다중 Kubernetes 클러스터 MongoDB 배포를 위한
mongodb-enterprise-operator-member-list
ConfigMap에 새 멤버 클러스터로 추가합니다.정상 상태인 Kubernetes cluster의 노드에서
MongoDBMultiCluster
리소스를 호스팅하는 노드의 균형을 재조정합니다.
수동 재해 복구에 대한 다음 튜토리얼에서는 사용자가 다음 작업을 수행한다고 가정합니다.
Multi-Kubernetes-Cluster Quick Start(멀티 Kubernetes 클러스터 빠른 시작)에 따라 1개의 중앙 클러스터와 3개의 멤버 클러스터를 배포합니다. 이 경우, Kubernetes 연산자는
--set multiCluster.performFailover=false
으)로 자동 페일오버를 비활성화한 상태로 설치됩니다.다음과 같이
MongoDBMultiCluster
리소스를 배포합니다.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
Kubernetes Operator는 해당 서버의 /healthz
엔드포인트를 핑하여 다중 Kubernetes cluster MongoDB 배포에서 cluster에 대한 연결을 주기적으로 확인합니다. 에 대해 자세히 /healthz
알아보려면 Kubernetes API 상태 엔드포인트 를 참조하세요. .
이 예시에서 CLUSTER_3
을 사용할 수 없게 되는 경우, Kubernetes 연산자는 cluster에 대한 연결 실패를 감지하고 후속 조정을 위해 MongoDBMultiCluster
리소스에 failedClusters
주석을 표시합니다.
다음 절차에 따라 수동 복구 단계를 실행할 때까지 이 cluster에 배포된 데이터 노드가 있는 리소스 조정에 실패합니다.
모든 워크로드가 CLUSTER_1
및 CLUSTER_2
에서 실행되도록 MongoDB 데이터 노드의 균형을 재조정합니다.
MongoDB kubectl 플러그인을 사용하여 다중 Kubernetes 클러스터 MongoDB deployment 를 복구합니다.
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}"
이 명령은 다음을 수행합니다.
두 개의 정상 Kubernetes cluster에서 워크로드를 managed하도록 Kubernetes 연산자를 재구성합니다. (이 목록에는 새로운 Kubernetes cluster도 포함될 수 있습니다).
새 Kubernetes 클러스터의 노드 노드 구성에 대한 구성 소스로
CLUSTER_1
를 표시합니다.CLUSTER_1
의 구성과 일치하도록 역할 및 서비스 계정 구성을 복제합니다.
정상 상태인 Kubernetes cluster에서 데이터 노드의 균형을 재조정합니다.
변경의 영향을 받는 리소스를 편집하여 MongoDBMultiCluster
리소스를 재구성하여 정상 Kubernetes 클러스터에서 데이터 노드의 균형을 재조정합니다.
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
GitOps 워크플로를 사용하여 장애 수동 복구
Argo CD 를 통해 GitOps 워크플로에서 MongoDB kubectl 플러그인 을 사용하는 예시 자세한 내용 은 GitOps용 멀티 클러스터 플러그인 예시를 참조하세요.
GitOps 복구를 위해서는 역할 기반 액세스 제어 를 수동으로 재구성해야 .yaml
합니다. 리소스 파일을 사용합니다. 자세한 내용은 Kubernetes 역할 및 역할 바인딩 이해를 참조하세요.