자동 배경 검증

Tier: Premium, Ultimate Offering: Self-Managed

자동 배경 검증은 전송된 데이터가 계산된 체크섬과 일치하는지를 확인합니다. 사이트에서의 데이터의 체크섬이 보조 사이트에서의 데이터의 체크섬과 일치하면 데이터가 성공적으로 전송됩니다. 계획된 장애 조치 후에 데이터가 손상된 경우, 손상 정도에 따라 일부 데이터가 손실될 수 있습니다.

사이트에서 검증에 실패하면 Geo가 손상된 객체를 복제 중이라는 것을 나타냅니다. 해당 문제를 해결하려면 백업에서 복원하거나 사이트에서 해당 객체를 제거할 수 있습니다.

사이트에서 검증에 성공하지만 보조 사이트에서는 검증에 실패하면, 이는 객체가 복제 프로세스 중에 손상되었음을 나타냅니다. Geo는 검증 실패를 수정하려고 하며 백오프 기간으로 리포지터리를 다시 동기화하도록 표시합니다. 이러한 실패에 대해 검증을 재설정하려면 이 지침을 따르세요.

검증이 복제보다 크게 뒤처지는 경우, 계획된 장애 조치를 예약하기 전에 사이트에 더 많은 시간을 부여하는 것을 고려하세요.

리포지터리 검증

사이트에서:

  1. 왼쪽 사이드바에서 아래쪽으로 이동하여 관리 영역(Admin Area)을 선택합니다.
  2. Geo > 사이트(Sites)를 선택합니다.
  3. 해당 사이트의 검증 정보(Verification information) 탭을 확장하여 리포지터리 및 위키에 대한 자동 체크섬 상태를 확인합니다. 성공은 녹색으로, 보류 중인 작업은 회색으로, 실패는 빨간색으로 표시됩니다.

    검증 상태

보조 사이트에서:

  1. 왼쪽 사이드바에서 아래쪽으로 이동하여 관리 영역(Admin Area)을 선택합니다.
  2. Geo > 사이트(Sites)를 선택합니다.
  3. 해당 사이트의 검증 정보(Verification information) 탭을 확장하여 리포지터리 및 위키에 대한 자동 체크섬 상태를 확인합니다. 성공은 녹색으로, 보류 중인 작업은 회색으로, 실패는 빨간색으로 표시됩니다.

    검증 상태

Geo 사이트 비교에 체크섬 사용하기

Geo 보조 사이트의 건강 상태를 확인하기 위해 Git 참조 및 해당 값에 대한 체크섬을 사용합니다. 이 체크섬에는 HEAD, heads, tags, notes, GitLab 특정 참조가 포함되어 진정한 일관성을 보장합니다. 두 사이트의 체크섬이 동일하면 확실히 동일한 참조를 보유하고 있습니다. 모든 사이트에 대해 업데이트 후 체크섬을 계산하여 모든 사이트가 동기화되어 있는지 확인합니다.

리포지터리 재검증

버그나 일시적인 인프라 장애로 인해 Git 리포지터리가 예상치 못하게 변경되어 검증되지 않을 수 있습니다. Geo는 데이터의 무결성을 보장하기 위해 리포지터리를 지속적으로 재검증합니다. 기본적으로 권장되는 재검증 간격은 7일이지만 1일로 설정할 수도 있습니다. 간격이 짧을수록 위험이 감소하지만 부하가 증가하며 그 반대도 마찬가지입니다.

사이트에서:

  1. 왼쪽 사이드바에서 아래쪽으로 이동하여 관리 영역(Admin Area)을 선택합니다.
  2. Geo > 사이트(Sites)를 선택합니다.
  3. 사이트의 편집(Edit)을 선택하여 최소한의 재검증 간격을 사용자 정의합니다:

    재검증 간격

검증이 실패한 프로젝트의 검증 재설정

Geo는 검증에 실패한 프로젝트를 백오프 기간 없이 다시 동기화하려고 노력합니다. 매뉴얼으로 재설정하려면 다음 Rake 작업을 실행하여 검증에 실패하거나 체크섬이 일치하지 않는 프로젝트를 다시 동기화하도록 표시합니다:

보조의 Rails 노드에서 해당 명령을 실행하세요.

리포지터리의 경우:

sudo gitlab-rake geo:verification:repository:reset

위키의 경우:

sudo gitlab-rake geo:verification:wiki:reset

체크섬 불일치로 인한 차이점 조정

사이트와 보조 사이트가 체크섬 검증이 일치하지 않는 경우, 그 원인이 명확하지 않을 수 있습니다. 체크섬 불일치의 원인을 찾으려면 다음을 수행하세요:

  1. 사이트에서:
    1. 왼쪽 사이드바에서 아래쪽으로 이동하여 관리 영역(Admin Area)을 선택합니다.
    2. 왼쪽 사이드바에서 개요(Overview) > 프로젝트(Projects)를 선택합니다.
    3. 확인하려는 프로젝트를 찾아 해당 이름을 선택합니다.
    4. 프로젝트 관리 페이지에서 리포지터리 이름(Storage name)상대 경로(Relative path) 필드의 값을 얻습니다.
  2. 사이트의 Gitaly 노드보조 사이트의 Gitaly 노드에서 프로젝트 리포지터리 디렉터리로 이동합니다. Gitaly 클러스터를 사용하는 경우, 이 명령을 실행하기 전에 클러스터가 정상 상태인지 확인합니다.

    기본 경로는 /var/opt/gitlab/git-data/repositories입니다. 사용자 정의된 git_data_dirs를 사용하는 경우 서버의 디렉터리 레이아웃을 확인하세요:

    cd /var/opt/gitlab/git-data/repositories
    
    1. 사이트에서 다음 명령을 실행하고 출력을 파일로 리디렉션합니다:

      git show-ref --head | grep -E "HEAD|(refs/(heads|tags|keep-around|merge-requests|environments|notes)/)" > primary-site-refs
      
    2. 보조 사이트에서 다음 명령을 실행하고 출력을 파일로 리디렉션합니다:

      git show-ref --head | grep -E "HEAD|(refs/(heads|tags|keep-around|merge-requests|environments|notes)/)" > secondary-site-refs
      
    3. 이전 단계의 파일을 동일한 시스템에서 복사하고 내용을 비교합니다:

      diff primary-site-refs secondary-site-refs
      

현재 제한 사항

복제 및 검증 방법에 대한 자세한 정보는 지원되는 Geo 데이터 유형을 참조하세요.