재해 복구(Geo) 프로모션 실행 매뉴얼

Tier: Premium, Ultimate Offering: Self-managed
Status: Experiment

재해 복구(Geo) 프로모션 실행 매뉴얼.

caution
이 실행 매뉴얼은 실험입니다. 전체 생산 준비 문서는
재해 복구 문서를 참조하세요.

다중 노드 구성의 Geo 계획된 장애 조치

구성 요소 구성
PostgreSQL Linux 패키지로 관리됨
Geo 사이트 다중 노드
세컨더리 하나

이 실행 매뉴얼은 하나의 세컨더리가 있는 다중 노드 Geo 사이트의 계획된 장애 조치를 안내합니다.

다음 40 RPS / 2,000 사용자 참조 아키텍처가 가정됩니다:

graph TD subgraph main[Geo 배포] subgraph Primary[주 사이트, 다중 노드] Node_1[Rails 노드 1] Node_2[Rails 노드 2] Node_3[PostgreSQL 노드] Node_4[Gitaly 노드] Node_5[Redis 노드] Node_6[모니터링 노드] end subgraph Secondary[세컨더리 사이트, 다중 노드] Node_7[Rails 노드 1] Node_8[Rails 노드 2] Node_9[PostgreSQL 노드] Node_10[Gitaly 노드] Node_11[Redis 노드] Node_12[모니터링 노드] end end

로드 밸런서 노드와 선택적 NFS 서버는 명확성을 위해 생략되었습니다.

이 가이드는 다음과 같은 결과를 가져옵니다:

  1. 오프라인 상태의 주.
  2. 새로운 주가 된 승격된 세컨더리.

다루지 않는 내용:

  1. 이전 를 세컨더리로 다시 추가하기.
  2. 새로운 세컨더리 추가하기.

준비

note
단계에 따라 진행하기 전에 세컨더리에 승격할 수 있는 root 액세스가 있는지 확인하세요.
Geo 복제본을 승격하고 장애 조치를 수행하는 자동화된 방법이 제공되지 않기 때문입니다.

세컨더리 사이트에서:

  1. 왼쪽 사이드바에서 아래로 스크롤하여 Admin를 선택합니다.
  2. Geo > Sites를 선택하여 상태를 확인합니다.
    복제된 객체(초록색으로 표시)는 100%에 가까워야 하며,
    실패가 없어야 합니다(빨간색으로 표시됨).
    많은 비율의 객체가 복제되지 않으면(회색으로 표시됨), 사이트가 완료되는 데 더 많은 시간을 주어야 합니다.

    복제 상태

복제에 실패하는 객체가 있는 경우, 유지 관리 창을 예약하기 전에 이를 조사해야 합니다.
계획된 장애 조치 후 복제에 실패한 모든 것은 손실됩니다.

복제 실패의 일반적인 원인은 사이트에 데이터가 누락된 경우입니다.
이러한 실패는 백업에서 데이터를 복원하거나 누락된 데이터에 대한 참조를 제거하여 해결할 수 있습니다.

유지 관리 창은 Geo 복제 및 검증이 완료될 때까지 끝나지 않습니다.
가능한 한 짧게 유지 관리 창을 유지하려면 활동 중에 이러한 프로세스가 100%에 가깝도록 해야 합니다.

세컨더리 사이트가 여전히 사이트에서 데이터를 복제하고 있다면,
불필요한 데이터 손실을 방지하기 위해 다음 단계를 따르세요:

  1. 사이트에서 유지 관리 모드를 활성화하고,
    모든 백그라운드 작업을 중지합니다.
  2. 모든 데이터를 복제하고 검증을 완료합니다:

    caution
    모든 데이터가 자동으로 복제되지는 않습니다.
    제외되는 사항에 대해 더 읽어보세요.
    1. 수동으로 복제 중인
      Geo에 의해 관리되지 않는 데이터가 있는 경우,
      지금 최종 복제 프로세스를 트리거하십시오.
    2. 사이트에서:
      1. 왼쪽 사이드바에서 아래로 스크롤하여 Admin을 선택합니다.
      2. 왼쪽 사이드바에서 모니터링 > 백그라운드 작업을 선택합니다.
      3. Sidekiq 대시보드에서 를 선택하고,
        geo라는 이름이 없는 모든 큐가 0으로 떨어질 때까지 기다립니다.
        이러한 큐에는 사용자에 의해 제출된 작업이 포함되어 있으며,
        완료되기 전에 장애 조치를 수행하면 작업이 손실됩니다.
      4. 왼쪽 사이드바에서 Geo > Sites를 선택하고,
        세컨더리 사이트가 다음 조건을 만족할 때까지 기다립니다:

        • 모든 복제 미터가 100% 복제됨, 0% 실패.
        • 모든 검증 미터가 100% 검증됨, 0% 실패.
        • 데이터베이스 복제 지연은 0ms입니다.
        • Geo 로그 커서가 최신 상태입니다(이벤트가 0개 뒤처짐).
    3. 세컨더리 사이트에서:
      1. 왼쪽 사이드바에서 아래로 스크롤하여 Admin을 선택합니다.
      2. 왼쪽 사이드바에서 모니터링 > 백그라운드 작업을 선택합니다.
      3. Sidekiq 대시보드에서 를 선택하고,
        모든 geo 큐가 대기 0개 및 실행 중인 작업 0개로 떨어질 때까지 기다립니다.
      4. 무결성 검사 실행을 통해 CI 아티팩트, LFS 객체 및 파일 저장소의 업로드 무결성을 검증합니다.

    이 시점에서 세컨더리 사이트는 사이트에 있는 모든 것의 최신 복사본을 포함하므로
    장애 조치 시 손실되는 데이터가 없습니다.

  3. 마지막 단계에서, 사이트를 영구적으로 비활성화해야 합니다.

    caution
    사이트가 오프라인 상태가 되면, 그곳에 복제되지 않은 데이터가
    사이트에 저장되어 있을 수 있습니다.
    이 데이터는 진행할 경우 손실된 것으로 간주해야 합니다.
    note
    도메인 DNS 레코드를 업데이트할 계획이 있다면,
    전파 속도를 높이기 위해 지금 TTL을 낮추는 것이 좋습니다.

    장애 조치를 수행할 때, 두 개의 다른 GitLab 인스턴스에서 작성을 방지하기 위해
    스플릿 브레인 상황을 피하려고 합니다.
    따라서 장애 조치를 준비하기 위해 사이트를 비활성화해야 합니다:

    • 사이트에 대한 SSH 액세스가 있는 경우, GitLab을 중지하고 비활성화합니다:

      sudo gitlab-ctl stop
      

      서버가 예기치 않게 재부팅되는 경우 GitLab이 다시 시작되는 것을 방지합니다:

      sudo systemctl disable gitlab-runsvdir
      
      note
      (CentOS 전용) CentOS 6 또는 이전 버전에서는
      기계가 재부팅될 때 GitLab이 시작되지 않도록 하는 것이 어렵습니다
      (자세한 내용은 문제 3058 참조).
      가장 안전한 방법은 GitLab 패키지를 완전히 제거하는 것입니다
      sudo yum remove gitlab-ee를 사용하여.
      note
      (Ubuntu 14.04 LTS) 이전 버전의 Ubuntu를 사용 중이거나
      Upstart init 시스템에 기반한 다른 배포판을 사용하는 경우,
      기계가 root로 재부팅될 때 GitLab이 시작되는 것을 방지할 수 있습니다
      initctl stop gitlab-runsvvdir && echo 'manual' > /etc/init/gitlab-runsvdir.override && initctl reload-configuration를 사용하여.
    • 사이트에 대한 SSH 액세스가 없는 경우, 기계를 오프라인 상태로 만들고
      재부팅을 방지해야 합니다. 이를 수행하는 방법은 여러 가지가 있으므로
      단일 권장 사항을 피합니다. 다음을 수행해야 할 수 있습니다:

      • 로드 밸런서를 재구성하십시오.
      • DNS 레코드를 변경합니다 (예: DNS 레코드를 세컨더리 사이트로
        포인팅하여 사이트의 사용을 중지합니다).
      • 가상 서버를 중지하십시오.
      • 방화벽을 통해 트래픽을 차단하십시오.
      • 사이트의 오브젝트 스토리지 권한을 취소하십시오.
      • 물리적으로 기계를 분리하십시오.

보조 사이트 프로모션

  1. 보조 사이트의 모든 Sidekiq, PostgreSQL, Gitaly 노드에 SSH로 접속하여 다음 명령 중 하나를 실행합니다:

    • 보조 사이트를 주 사이트로 프로모션하려면:

      sudo gitlab-ctl geo promote
      
    • 추가적인 확인 없이 보조 사이트를 주 사이트로 프로모션하려면:

      sudo gitlab-ctl geo promote --force
      
  2. 보조 사이트의 각 Rails 노드에 SSH로 접속하여 다음 명령 중 하나를 실행합니다:

    • 보조 사이트를 주 사이트로 프로모션하려면:

      sudo gitlab-ctl geo promote
      
    • 추가적인 확인 없이 보조 사이트를 주 사이트로 프로모션하려면:

      sudo gitlab-ctl geo promote --force
      
  3. 새롭게 프로모션된 사이트에 이전에 보조 사이트에 사용했던 URL을 사용하여 연결할 수 있는지 확인합니다.

  4. 성공하면, 보조 사이트가 이제 사이트로 프로모션되었습니다.

다음 단계

지리적 중복성을 가능한 빠르게 회복하기 위해, 보조 사이트를 추가해야 합니다. 이를 위해 이전 사이트를 새 보조 사이트로 다시 추가하고 온라인으로 복원할 수 있습니다.