지원되는 Geo 데이터 유형

Tier: Premium, Ultimate Offering: Self-Managed

Geo 데이터 유형은 하나 이상의 GitLab 기능에서 필요로 하는 특정 데이터 클래스로서 관련 정보를 저장하는 데 필요합니다.

이러한 기능에서 생성된 데이터를 Geo로 복제하기 위해 접근, 전송 및 검증을 위해 여러 전략을 사용합니다.

데이터 유형

우리는 세 가지 다른 데이터 유형을 구별합니다:

아래 디렉터리에서는 복제하는 각 기능 또는 컴포넌트, 해당 데이터 유형, 복제 및 검증 방법을 보여줍니다:

유형 기능 / 컴포넌트 복제 방법 검증 방법
데이터베이스 PostgreSQL의 애플리케이션 데이터 네이티브 네이티브
데이터베이스 Redis 적용되지 않음 (1) 적용되지 않음
데이터베이스 Elasticsearch 네이티브 네이티브
데이터베이스 SSH 공개 키 PostgreSQL 복제 PostgreSQL 복제
Git 프로젝트 리포지터리 Gitaly를 사용한 Geo Gitaly 체크섬
Git 프로젝트 위키 리포지터리 Gitaly를 사용한 Geo Gitaly 체크섬
Git 프로젝트 디자인 리포지터리 Gitaly를 사용한 Geo Gitaly 체크섬
Git 프로젝트 스니펫 Gitaly를 사용한 Geo Gitaly 체크섬
Git 개인 스니펫 Gitaly를 사용한 Geo Gitaly 체크섬
Git 그룹 위키 리포지터리 Gitaly를 사용한 Geo Gitaly 체크섬
Blobs 사용자 업로드 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs 사용자 업로드 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs LFS 객체 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs LFS 객체 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs CI 작업 아티팩트 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs CI 작업 아티팩트 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 아카이브된 CI 빌드 추적 (파일 시스템) API를 사용한 Geo 구현되지 않음
Blobs 아카이브된 CI 빌드 추적 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 컨테이너 레지스트리 (파일 시스템) API/Docker API를 사용한 Geo SHA256 체크섬
Blobs 컨테이너 레지스트리 (객체 리포지터리) API/Managed/Docker API를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 패키지 레지스트리 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs 패키지 레지스트리 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 테라폼 모듈 레지스트리 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs 테라폼 모듈 레지스트리 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 버전별 테라폼 상태 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs 버전별 테라폼 상태 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 외부 Merge Request 차이 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs 외부 Merge Request 차이 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 파이프라인 아티팩트 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs 파이프라인 아티팩트 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 페이지 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs 페이지 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs CI 보안 파일 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs CI 보안 파일 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 사고 메트릭 이미지 (파일 시스템) Geo/Managed를 사용한 API SHA256 체크섬
Blobs 사고 메트릭 이미지 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 경고 메트릭 이미지 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs 경고 메트릭 이미지 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
Blobs 의존성 프록시 이미지 (파일 시스템) API를 사용한 Geo SHA256 체크섬
Blobs 의존성 프록시 이미지 (객체 리포지터리) API/Managed를 사용한 Geo (2) SHA256 체크섬 (3)
  • (1): Redis 복제는 Redis Sentinel의 HA의 일부로 사용할 수 있습니다. 이것은 Geo 사이트 사이에서 사용되지 않습니다.
  • (2): 객체 리포지터리 복제는 Geo나 귀하의 객체 리포지터리 제공업체/장치의 네이티브 복제 기능으로 수행될 수 있습니다.
  • (3): 객체 리포지터리 검증은 16.4에 도입된 피처 플래그, geo_object_storage_verification을 사용하여 기본적으로 활성화됩니다. 이는 파일 크기의 체크섬을 사용하여 파일을 확인합니다.

Git 리포지터리

GitLab 인스턴스는 하나 이상의 리포지터리 샤드를 가질 수 있습니다. 각 샤드에는 로컬로 저장된 Git 리포지터리에 대한 액세스 및 작업을 허용하는 Gitaly 인스턴스가 있습니다. 이는 다음과 같은 머신에서 실행될 수 있습니다:

  • 단일 디스크를 사용한 경우
  • 하나의 마운트 지점으로 여러 디스크를 마운트한 경우 (예: RAID 배열 사용)
  • LVM을 사용하는 경우

GitLab은 특별한 파일 시스템이 필요하지 않으며, 마운트된 리포지터리 장치와 함께 작동할 수 있습니다. 그러나 원격 파일 시스템을 사용할 경우 성능 제한과 일관성 문제가 발생할 수 있습니다.

Geo는 Gitaly에서 쓰레기 수집을 트리거하여 Geo 보조 사이트에서 포크된 리포지터리를 중복 제거합니다.

Gitaly gRPC API는 통신을 수행하며, 동기화에는 세 가지 가능한 방법이 있습니다:

  • 특별한 인증을 사용하여 Geo 사이트 간에 정규 Git clone/fetch를 사용합니다.
  • 리포지터리 스냅숏을 사용합니다 (첫 번째 방법이 실패하거나 리포지터리가 손상된 경우).
  • 관리 영역에서 매뉴얼 트리거를 사용합니다 (위 두 방법을 결합한 것).

각 프로젝트는 최대 3개의 다른 리포지터리를 가질 수 있습니다:

  • 프로젝트 리포지터리: 소스 코드가 저장되는 곳
  • 위키 리포지터리: 위키 콘텐츠가 저장되는 곳
  • 디자인 리포지터리: 디자인 자산이 인덱싱되는 곳 (실제 자산은 LFS에 저장됨)

모든 리포지터리는 동일한 샤드에 존재하며 위키 및 디자인 리포지터리의 경우 -wiki-design 접미사가 있는 동일한 기본 이름을 공유합니다.

또한 스니펫 리포지터리도 있습니다. 이는 프로젝트 또는 특정 사용자에 연결될 수 있으며 두 유형 모두 보조 사이트로 동기화됩니다.

블롭

GitLab은 이슈 첨부 파일이나 LFS 객체와 같은 파일과 블롭을 다음 중 하나에 저장합니다.

  • 특정 위치의 파일 시스템.
  • 객체 리포지터리 솔루션. 객체 리포지터리 솔루션은 다음과 같을 수 있습니다:
    • Amazon S3나 Google Cloud Storage와 같은 클라우드 기반.
    • MinIO와 같이 사용자가 호스팅하는 경우.
    • 객체 리포지터리 호환 API를 노출하는 리포지터리 장치.

여러 노드를 사용할 때 GitLab을 실행할 때 Object Storage 대신 파일 시스템 리포지터리를 사용하는 경우 네트워크 마운트된 파일 시스템을 사용합니다.

복제 및 확인과 관련하여:

  • 우리는 내부 API 요청을 사용하여 파일과 블롭을 전송합니다.
  • 객체 리포지터리를 사용하면 다음과 같이 할 수 있습니다:
    • 클라우드 제공자 복제 기능 사용.
    • GitLab이 대신 복제하도록 지시.

데이터베이스

GitLab은 다양한 사용 사례에 대해 여러 데이터베이스에 저장된 데이터에 의존합니다. PostgreSQL은 Web 인터페이스에서 사용자 생성 콘텐츠(이슈 콘텐츠, 코멘트)뿐만 아니라 권한과 자격 증명과 같은 사용자 생성 콘텐츠의 한계점에 대한 단일 진실 지점입니다.

또한 PostgreSQL은 HTML로 렌더링된 Markdown 및 캐시된 Merge Request 차이와 같은 일부 수준의 캐시된 데이터를 보유할 수 있습니다. 이를 객체 리포지터리로 오프로드하도록 구성할 수도 있습니다.

우리는 PostgreSQL의 자체 복제 기능을 사용하여 기본(primary)에서 보조(secondary) 사이트로 데이터를 복제합니다.

Redis는 캐시 리포지터리로 사용되며 백그라운드 작업 시스템에 지속적인 데이터를 보유하는 데에도 사용됩니다. 두 사용 사례 모두 동일한 Geo 사이트에 독점적인 데이터가 있기 때문에 우리는 사이트 간에 데이터를 복제하지 않습니다.

Elasticsearch는 고급 검색을 위한 선택적 데이터베이스입니다. 이는 소스 코드 수준과 이슈, Merge Request, 토의에서 사용자 생성 콘텐츠의 검색을 개선할 수 있습니다. Elasticsearch는 Geo에서 지원되지 않습니다.

복제/확인에 대한 제한

다음 표에서는 보조 사이트에 대한 GitLab 기능과 해당 복제 및 확인 상태를 나열합니다.

이러한 누락된 요소를 구현하기 위한 진행 상황을 이슈/업무에서 추적할 수 있습니다.

피처 플래그 뒤에 숨겨진 복제된 데이터 유형

일부 데이터 유형에 대한 복제는 해당 피처 플래그 뒤에 있습니다:

  • 피처 플래그 뒤에 배포되어 있으며 기본적으로 사용 중입니다.
  • GitLab.com에서 사용 중입니다.
  • 프로젝트 단위로 사용/비사용을 설정할 수 없습니다.
  • 운영 환경에서 권장됩니다.
  • GitLab Self-Managed 인스턴스의 경우, GitLab 관리자는 이들을 비활성화할 수 있습니다.

일부 데이터 유형의 복제 활성화/비활성화

일부 데이터 유형에 대한 복제를 위한 피처 플래그가 기본적으로 사용 중인 피처 플래그 뒤에 배포되었습니다. GitLab Rails 콘솔에 액세스할 수 있는 GitLab 관리자는 인스턴스에 대해 이를 비활성화할 수 있습니다. 이러한 데이터 유형의 피처 플래그 이름은 아래 표의 참고 열에 있습니다.

예를 들어 패키지 파일 복제를 비활성화하는 경우:

Feature.disable(:geo_package_file_replication)

예를 들어 패키지 파일 복제를 활성화하는 경우:

Feature.enable(:geo_package_file_replication)
caution
이 디렉터리에 없거나 Replicated 열에 No가 있는 기능은 보조 사이트로 복제되지 않습니다. 직접 복제하지 않고 장애 조치(Failover)를 하는 경우 해당 기능의 데이터가 손실됩니다. 보조 사이트에서 해당 기능을 사용하거나 정상 failover를 실행하려면 기타 방법을 사용하여 데이터를 복제해야 합니다.
기능 복제 (GitLab 버전에서 추가) 확인됨 (GitLab 버전에서 추가) GitLab에서 관리하는 객체 리포지터리 복제 (GitLab 버전에서 추가) GitLab에서 관리하는 객체 리포지터리 확인 (GitLab 버전에서 추가) 참고
PostgreSQL의 응용 프로그램 데이터 Yes (10.2) Yes (10.2) 해당 없음 해당 없음  
프로젝트 리포지터리 Yes (10.2) Yes (10.7) Yes (16.4)3 Yes (16.4)3 16.2에서 자체 서비스 프레임워크로 이관됨. 자세한 내용은 GitLab 이슈 #367925를 참조하세요.

피처 플래그 geo_project_repository_replication 뒤에 숨겨져 있으며 (16.3)에 기본적으로 활성화됨.

모든 프로젝트, 보관된 프로젝트 포함,가 복제됩니다.
프로젝트 위키 리포지터리 Yes (10.2)2 Yes (10.7)2 Yes (16.4)3 Yes (16.4)3 15.11에 자체 서비스 프레임워크로 이관됨. 자세한 내용은 GitLab 이슈 #367925를 참조하세요. 피처 플래그 geo_project_wiki_repository_replication 뒤에 숨겨져 있으며 (15.11)에 기본적으로 활성화됨.
그룹 위키 리포지터리 Yes (13.10) Yes (16.3) Yes (16.4)3 Yes (16.4)3 피처 플래그 geo_group_wiki_repository_replication 뒤에 숨겨져 있으며 기본적으로 활성화됨.
업로드 Yes (10.2) Yes (14.6) Yes (15.1) Yes (16.4)3 복제는 피처 플래그 geo_upload_replication 뒤에 숨겨져 있으며 기본적으로 활성화됨. 확인은 피처 플래그 geo_upload_verification 뒤에 숨겨져 있었는데 14.8에서 제거됨.
LFS 객체 Yes (10.2) Yes (14.6) Yes (15.1) Yes (16.4)3 GitLab 버전 11.11.x 및 12.0.x는 새로운 LFS 객체가 복제되지 않도록 하는 버그의 영향을 받습니다. 복제는 피처 플래그 geo_lfs_object_replication 뒤에 숨겨져 있으며 기본적으로 활성화됨. 확인은 피처 플래그 geo_lfs_object_verification 뒤에 숨겨져 있었는데 14.7에서 제거됨.
개인 스니펫 Yes (10.2) Yes (10.2) Yes (16.4)3 Yes (16.4)3  
프로젝트 스니펫 Yes (10.2) Yes (10.2) Yes (16.4)3 Yes (16.4)3  
CI 작업 아티팩트 Yes (10.4) Yes (14.10) Yes (15.1) Yes (16.4)3 확인은 피처 플래그 geo_job_artifact_replication 뒤에 숨겨져 있었는데 14.10에서 기본으로 활성화됨.
CI 파이프라인 아티팩트 Yes (13.11) Yes (13.11) Yes (15.1) Yes (16.4)3 파이프라인 완료 후 추가 아티팩트를 계속 유지합니다.
CI 보안 파일 Yes (15.3) Yes (15.3) Yes (15.3) Yes (16.4)3 확인은 피처 플래그 geo_ci_secure_file_replication 뒤에 숨겨져 있었는데 15.3에서 기본으로 활성화됨.
컨테이너 레지스트리 Yes (12.3)1 Yes (15.10) Yes (12.3)1 Yes (15.10)1 컨테이너 레지스트리 복제를 설정하는 방법에 대한 지침을 확인하세요.
테라폼 모듈 레지스트리 Yes (14.0) Yes (14.0) Yes (15.1) Yes (16.4)3 피처 플래그 geo_package_file_replication 뒤에 숨겨져 있으며 기본적으로 활성화됨.
프로젝트 디자인 리포지터리 Yes (12.7) Yes (16.1) Yes (16.4)3 Yes (16.4)3 디자인은 LFS 객체와 업로드를 복제하기도 합니다.
패키지 레지스트리 Yes (13.2) Yes (13.10) Yes (15.1) Yes (16.4)3 피처 플래그 geo_package_file_replication 뒤에 숨겨져 있으며 기본