Docs Menu
Docs Home
/
MongoDB Enterprise Kubernetes 연산자
/ /

복제본 세트의 과반수 손실 시 애플리케이션 데이터베이스 복구

이 페이지의 내용

  • 개요
  • 강제 재구성을 통한 애플리케이션 데이터베이스 복구

Kubernetes 멤버 클러스터에 장애가 발생하고 애플리케이션 데이터베이스가 프라이머리 노드를 선출하는 데 사용할 수 있는 복제본 세트 노드의 과반수를 손실하는 경우, Kubernetes Operator는 강제 복제본 세트 재구성을 자동으로 trigger 하지 않습니다. 강제 복제본 세트 재구성을 수동으로 시작하고 애플리케이션 데이터베이스 복제본 세트를 정상 상태로 복원해야 합니다.

특정 심각한 Kubernetes 클러스터 중단의 경우 애플리케이션 데이터베이스의 복제본 세트 배포로 인해 복제본 세트의 노드 대부분이 손실될 수 있습니다. 예를 들어 cluster 1 에 2개의 노드와 cluster 2 에 3개의 노드가 있는 애플리케이션 데이터베이스 배포서버에서 cluster 2 가 중단되면 애플리케이션 데이터베이스의 복제본 세트 배포에서 다음을 선택하는 데 필요한 노드 과반수를 잃게 됩니다. 기본 설정입니다. 프라이머리가 없으면 MongoDB Agent는 복제본 세트를 재구성할 수 없습니다.

복제본 세트의 노드 일정 변경을 활성화하려면 Kubernetes Operator가 MongoDB Agent의 자동화 구성 을 강제로 재구성하여 나머지 정상 멤버 클러스터에 복제본 세트 노드를 배포할 수 있도록 해야 합니다. 이를 달성하기 위해 Kubernetes Operator는 replicaSets[n].force 플래그를 설정합니다. 이 플래그는 복제본 세트가 현재(최신) 자동화 구성 버전 을 사용하도록 MongoDB Agent에 지시합니다. 플래그를 사용하면 Kubernetes Operator가 프라이머리 노드가 선택되지 않은 경우 복제본 세트를 재구성할 수 있습니다.

중요

애플리케이션 데이터베이스를 강제로 재구성하면 '대부분' 커밋된 쓰기가 롤백 되는 등 원치 않는 동작이 발생할 수 있으며, 이로 인해 예기치 않은 데이터 손실이 발생할 수 있습니다.

애플리케이션 데이터베이스 노드의 강제 재구성을 수행하려면 다음을 수행합니다.

  1. spec.applicationDatabase.clusterSpecList 구성 설정을 변경하여 Kubernetes 클러스터에서 애플리케이션 데이터베이스의 배포서버 를 재구성하여 복제본 세트 가 정상 노드의 과반수를 형성할 수 있도록 합니다.

  2. spec.applicationDatabase.clusterSpecList 에서 실패한 Kubernetes 클러스터를 제거하거나 실패한 Kubernetes 멤버 클러스터를 축소합니다. 이렇게 하면 복제본 세트는 해당 클러스터에 호스팅된 애플리케이션 데이터베이스의 노드를 복제본 세트의 투표 멤버로 계산하지 않습니다. 예를 들어 cluster 1 에 두 개의 정상 노드가 있고 3 노드를 포함하는 실패한 cluster 2 가 있는 경우, 총 5개의 복제본 세트 구성원(2/5 정상) 중에서 두 개의 정상 노드가 있습니다. cluster 1 에 하나의 노드를 추가하면 복제본 세트의 노드 수에 대한 정상 노드의 비율이 3/6 가 됩니다. 복제본 세트 과반수를 구성하는 방법은 다음과 같습니다.

    • cluster 1 또는 새로운 정상 Kubernetes 클러스터에 두 개 이상의 새 복제본 세트 노드를 추가합니다. 이렇게 하면 7개의 멤버로 구성된 복제본 세트에 4개의 노드가 포함되어 과반수(4/7)를 달성할 수 있습니다.

    • 실패한 Kubernetes 클러스터를 노드 0개로 축소하거나 spec.applicationDatabase.clusterSpecList 에서 클러스터를 완전히 제거하고 cluster 1 에 노드를 하나 이상 추가하여 복제본 세트의 StatefulSet에 3/3 정상 노드를 갖도록 합니다.

  3. MongoDBOpsManager 사용자 지정 리소스 의 최상위 수준에 "mongodb.com/v1.forceReconfigure": "true" 주석을 추가하고 "true" 값이 따옴표로 string 인지 확인합니다.

    이 주석을 기반으로 Kubernetes Operator는 다음 조정 프로세스에서 복제본 세트의 강제 재구성을 수행하고 변경된 배포 구성에 따라 애플리케이션 데이터베이스의 복제본 세트 노드를 확장합니다.

    Kubernetes Operator는 실패한 Kubernetes 클러스터의 노드가 정상인지 여부를 확인할 수 있는 방법이 없습니다. 따라서 Kubernetes Operator가 장애가 발생한 멤버 Kubernetes 클러스터의 API 서버에 연결할 수 없는 경우, Kubernetes Operator는 애플리케이션 데이터베이스의 복제본 세트 노드 조정 프로세스 중에 클러스터를 무시합니다.

    즉, 애플리케이션 데이터베이스 노드를 축소하면 복제본 세트 구성에서 실패한 프로세스가 제거됩니다. API 서버만 다운되었지만 복제본 세트의 노드가 실행 중인 경우, Kubernetes Operator는 실패한 Kubernetes 클러스터에서 파드를 제거하지 않습니다.

    강제 재구성을 완료했음을 나타내기 위해 Kubernetes Operator는 현재 타임스탬프를 값으로 사용하여 주석 키 "mongodb.com/v1.forceReconfigurePerformed" 을 추가합니다.

    중요

    Kubernetes Operator는 복제본 세트 의 강제 재구성을 한 번만 수행합니다. 복제본 세트 가 실행 상태 에 도달하면 Kubernetes Operator는 나중에 다시 재구성을 강제하지 않도록 "mongodb.com/v1.forceReconfigurePerformed" 주석을 추가합니다. 따라서 새로운 강제 재구성 이벤트 를 다시 트리거하려면 리소스 의 메타데이터 .annotations 에서 다음 주석 중 하나 또는 둘 다를 제거 합니다. MongoDBOpsManager 사용자 지정 리소스 의 경우 .

    • "mongodb.com/v1.forceReconfigurePerformed"

    • "mongodb.com/v1.forceReconfigure"

  4. Kubernetes Operator에서 변경된 MongoDBOpsManager 사용자 지정 리소스에 대한 구성을 다시 적용합니다.

돌아가기

실패한 클러스터 복구