문서 메뉴
문서 홈
/
MongoDB Enterprise Kubernetes 연산자
/

재해 복구

이 페이지의 내용

  • 재해 복구 모드
  • MongoDB 플러그인을 사용하여 장애 수동 복구
  • MongoDB kubectl 플러그인 을 사용하여 다중 Kubernetes 클러스터 MongoDB 배포를 복구합니다.
  • 정상 상태인 Kubernetes cluster에서 데이터 노드의 균형을 재조정합니다.
  • GitOps 워크플로를 사용하여 장애 수동 복구

Kubernetes 연산자는 원래 Kubernetes cluster가 다운된 것으로 확인되면, Kubernetes 연산자가 MongoDB 복제본 세트 멤버를 정상 Kubernetes cluster로 복구하는 것을 조정할 수 있습니다.

Kubernetes 연산자는 다음 모드 중 하나를 사용하여 재해 복구 시나리오에서 MongoDBMultiCluster 리소스의 자동 또는 수동 수정을 조정할 수 있습니다.

  • 자동 페일오버 모드 를 사용하면 Kubernetes 연산자는 영향을 받는 MongoDB 복제본 세트 멤버를 비정상 Kubernetes cluster에서 정상 Kubernetes cluster로 이동할 수 있습니다. Kubernetes 연산자가 이 자동 문제 해결을 수행할 때, 복제본 세트 멤버를 건강한 Kubernetes cluster 전체에 균등하게 배포합니다.

    이 모드를 --set multiCluster.performFailover=true 활성화하려면 MongoDB 용 Helm Charts 에서 Kubernetes 를 사용합니다. values.yamlMongoDB Helm Charts 의 Kubernetes 파일에서 디렉토리에서 환경의 변수 기본값은 true 입니다.

    또는 다음 축약된 예제에서와 같이 다중 Kubernetes cluster MongoDB 배포 환경 변수 PERFORM_FAILOVERtrue 로 설정할 수 있습니다.

    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 MongoDB PERFORM_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 플러그인을 사용하여 장애 수동 복구를 참조하세요.

하나 이상의 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_1CLUSTER_2 에서 실행되도록 MongoDB 데이터 노드의 균형을 재조정합니다.

1
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 의 구성과 일치하도록 역할 및 서비스 계정 구성을 복제합니다.

2

변경의 영향을 받는 리소스를 편집하여 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

Argo CD 를 통해 GitOps 워크플로에서 MongoDB kubectl 플러그인 을 사용하는 예 자세한 내용 은 GitOps용 멀티 클러스터 플러그인 예시를 참조하세요.

GitOps 복구를 위해서는 역할 기반 액세스 제어 를 수동으로 재구성해야 .yaml 합니다. 리소스 파일을 사용합니다. 자세한 내용은 Kubernetes 역할 및 역할 바인딩 이해를 참조하세요.

돌아가기

Kubernetes 외부에서 멀티 cluster 리소스에 연결하기