InfoGrab DocsInfoGrab Docs

지원되는 Geo 데이터 유형

요약

Geo 데이터 유형은 하나 이상의 GitLab 기능이 관련 정보를 저장하는 데 필요로 하는 특정 데이터 부류입니다. Geo로 이러한 기능이 생성한 데이터를 복제하기 위해, 데이터에 접근하고 전송하고 확인하는 여러 전략을 사용합니다.

Geo 데이터 유형은 하나 이상의 GitLab 기능이 관련 정보를 저장하는 데 필요로 하는 특정 데이터 부류입니다.

Geo로 이러한 기능이 생성한 데이터를 복제하기 위해, 데이터에 접근하고 전송하고 확인하는 여러 전략을 사용합니다.

데이터 유형#

다음 데이터 유형을 구분합니다.

복제 대상인 각 기능 또는 컴포넌트와 그에 해당하는 데이터 유형, 복제 방법, 확인 방법은 아래 목록을 참고합니다.

유형 기능 / 컴포넌트 복제 방법 확인 방법
Database PostgreSQL의 애플리케이션 데이터 Native Native
Database Redis 해당 없음 1 해당 없음
Database 고급 검색(Elasticsearch 또는 OpenSearch) Native Native
Database 정확한 코드 검색(Zoekt) Native Native
Database SSH 공개 키 PostgreSQL Replication PostgreSQL Replication
Git 프로젝트 리포지터리 Geo with Gitaly Gitaly Checksum
Git 프로젝트 위키 리포지터리 Geo with Gitaly Gitaly Checksum
Git 프로젝트 디자인 리포지터리 Geo with Gitaly Gitaly Checksum
Git 프로젝트 스니펫 Geo with Gitaly Gitaly Checksum
Git 개인 스니펫 Geo with Gitaly Gitaly Checksum
Git 그룹 위키 리포지터리 Geo with Gitaly Gitaly Checksum
Blob 사용자 업로드 (파일 시스템) Geo with API SHA256 checksum
Blob 사용자 업로드 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob LFS 오브젝트 (파일 시스템) Geo with API SHA256 checksum
Blob LFS 오브젝트 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob CI job 아티팩트 (파일 시스템) Geo with API SHA256 checksum
Blob CI job 아티팩트 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 보관된 CI 빌드 추적 (파일 시스템) Geo with API 구현되지 않음
Blob 보관된 CI 빌드 추적 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 컨테이너 레지스트리 (파일 시스템) Geo with API/Docker API SHA256 checksum
Blob 컨테이너 레지스트리 (오브젝트 스토리지) Geo with API/Managed/Docker API 2 SHA256 checksum 3
Blob 패키지 레지스트리 (파일 시스템) Geo with API SHA256 checksum
Blob 패키지 레지스트리 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 패키지 Helm 메타데이터 캐시 (파일 시스템) Geo with API SHA256 checksum
Blob 패키지 Helm 메타데이터 캐시 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob Terraform 모듈 레지스트리 (파일 시스템) Geo with API SHA256 checksum
Blob Terraform 모듈 레지스트리 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 버전 관리 Terraform 상태 (파일 시스템) Geo with API SHA256 checksum
Blob 버전 관리 Terraform 상태 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 외부 머지 리퀘스트 diff (파일 시스템) Geo with API SHA256 checksum
Blob 외부 머지 리퀘스트 diff (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 파이프라인 아티팩트 (파일 시스템) Geo with API SHA256 checksum
Blob 파이프라인 아티팩트 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob Pages (파일 시스템) Geo with API SHA256 checksum
Blob Pages (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob CI Secure Files (파일 시스템) Geo with API SHA256 checksum
Blob CI Secure Files (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 인시던트 메트릭 이미지 (파일 시스템) Geo with API/Managed SHA256 checksum
Blob 인시던트 메트릭 이미지 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 알림 메트릭 이미지 (파일 시스템) Geo with API SHA256 checksum
Blob 알림 메트릭 이미지 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 의존성 프록시 이미지 (파일 시스템) Geo with API SHA256 checksum
Blob 의존성 프록시 이미지 (오브젝트 스토리지) Geo with API/managed 2 SHA256 checksum 3
Blob 패키지 nuget 심볼 (파일 시스템) Geo with API SHA256 checksum
Blob 패키지 nuget 심볼 (오브젝트 스토리지) Geo with API/Docker API SHA256 checksum 3
Container Repository 컨테이너 레지스트리 (파일 시스템) Geo with API/Docker API SHA256 checksum
Container Repository 컨테이너 레지스트리 (오브젝트 스토리지) Geo with API/Managed/Docker API 2 SHA256 checksum 3

각주:

  1. Redis 복제는 Redis 센티널을 사용하는 HA 구성의 일부로 쓸 수 있습니다. Geo 사이트 간에는 사용하지 않습니다.
  2. 오브젝트 스토리지 복제는 Geo가 수행하거나, 오브젝트 스토리지 공급자·어플라이언스의 네이티브 복제 기능이 수행할 수 있습니다.
  3. 오브젝트 스토리지 확인은 GitLab 16.4에서 geo_object_storage_verification이라는 기능 플래그와 함께 도입되었습니다. 기본값으로 활성화되어 있습니다.

Git 리포지터리#

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

  • 디스크가 하나인 머신
  • RAID 어레이처럼 여러 디스크를 단일 마운트 포인트로 마운트한 머신
  • LVM을 사용하는 머신

GitLab은 특별한 파일 시스템을 요구하지 않으며 마운트된 스토리지 어플라이언스에서도 동작합니다. 다만 원격 파일 시스템을 사용하면 성능 제약과 일관성 문제가 생길 수 있습니다.

Geo는 Geo 보조 사이트에서 포크된 리포지터리를 중복 제거하도록 Gitaly에서 가비지 컬렉션을 트리거합니다.

통신은 Gitaly gRPC API가 담당하며, 동기화 방식은 다음 세 가지입니다.

  • 한 Geo 사이트에서 다른 사이트로 일반 Git clone/fetch를 사용합니다(별도 인증 포함).
  • 리포지터리 스냅샷을 사용합니다(첫 번째 방식이 실패하거나 리포지터리가 손상된 경우).
  • Admin 영역에서 수동으로 트리거합니다(나열된 다른 방식을 조합합니다).

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

  • 소스 코드를 저장하는 프로젝트 리포지터리
  • 위키 콘텐츠를 저장하는 위키 리포지터리
  • 디자인 아티팩트를 인덱싱하는 디자인 리포지터리(자산은 실제로 LFS에 있습니다)

세 리포지터리는 모두 같은 샤드에 있고 같은 기본 이름을 공유하며, 위키와 디자인 리포지터리에는 각각 -wiki와 -design 접미사가 붙습니다.

그 밖에 스니펫 리포지터리가 있습니다. 스니펫 리포지터리는 프로젝트나 특정 사용자에 연결할 수 있습니다. 두 유형 모두 보조 사이트로 동기화됩니다.

컨테이너 리포지터리#

컨테이너 리포지터리는 컨테이너 레지스트리에 저장됩니다. 컨테이너 리포지터리는 컨테이너 레지스트리를 데이터 저장소로 삼아 구축한 GitLab 고유 개념입니다.

블롭#

GitLab은 이슈 첨부 파일이나 LFS 오브젝트 같은 파일과 블롭을 다음 중 한 곳에 저장합니다.

  • 특정 위치의 파일 시스템
  • 오브젝트 스토리지 솔루션. 오브젝트 스토리지 솔루션은 다음과 같습니다.
    • Amazon S3나 Google Cloud Storage 같은 클라우드 기반 스토리지
    • 자체 호스팅 S3 호환 오브젝트 스토리지
    • 오브젝트 스토리지 호환 API를 노출하는 스토리지 어플라이언스

오브젝트 스토리지 대신 파일 시스템 저장소를 사용하고 노드를 둘 이상 사용한다면, 네트워크 마운트 파일 시스템으로 GitLab을 실행합니다.

복제와 확인 측면에서는 다음과 같습니다.

  • 파일과 블롭은 내부 API 요청으로 전송합니다.
  • 오브젝트 스토리지에서는 다음 중 하나를 선택할 수 있습니다.
    • 클라우드 공급자의 복제 기능을 사용합니다.
    • GitLab이 대신 복제하도록 합니다.

데이터베이스#

GitLab은 사용 사례별로 여러 데이터베이스에 저장된 데이터에 의존합니다. PostgreSQL은 이슈 콘텐츠와 댓글은 물론 권한과 자격 증명까지, 웹 인터페이스에서 생성되는 사용자 콘텐츠의 단일 진실 공급원입니다.

PostgreSQL은 HTML로 렌더링한 Markdown이나 캐시된 머지 리퀘스트 diff 같은 캐시 데이터도 일부 보관할 수 있습니다. 이 데이터는 오브젝트 스토리지로 오프로드하도록 구성할 수도 있습니다.

기본 사이트에서 보조 사이트로 데이터를 복제할 때는 PostgreSQL 자체 복제 기능을 사용합니다.

Redis는 캐시 저장소로도, 백그라운드 job 시스템의 영속 데이터 보관용으로도 사용합니다. 두 사용 사례 모두 같은 Geo 사이트에만 해당하는 데이터를 다루므로 사이트 간에 복제하지 않습니다.

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

복제되는 데이터 유형#

기능 플래그 뒤의 복제되는 데이터 유형#

히스토리
  • 기본값으로 활성화된 기능 플래그 뒤에 배포됩니다.
  • GitLab.com에서 활성화되어 있습니다.
  • 프로젝트별로 활성화하거나 비활성화할 수 없습니다.
  • 프로덕션 사용을 권장합니다.
  • GitLab Self-Managed 인스턴스에서는 GitLab 관리자가 비활성화를 선택할 수 있습니다.
Feature flag

이 기능의 가용성은 기능 플래그로 제어합니다. 자세한 내용은 히스토리를 참고합니다.

복제 활성화 또는 비활성화(일부 데이터 유형)#

일부 데이터 유형의 복제는 기본값으로 활성화된 기능 플래그 뒤에서 릴리스됩니다. GitLab Rails 콘솔에 접근할 수 있는 GitLab 관리자는 인스턴스에서 이를 비활성화할 수 있습니다. 각 데이터 유형의 기능 플래그 이름은 아래 표의 비고 칼럼에서 확인할 수 있습니다.

패키지 파일 복제를 예로 들면, 비활성화는 다음과 같습니다.

Feature.disable(:geo_package_file_replication)

패키지 파일 복제를 예로 들면, 활성화는 다음과 같습니다.

Feature.enable(:geo_package_file_replication)

geo_<replicable>_replication 플래그를 비활성화하면 보조 사이트의 복제와 확인이 중단됩니다. 기본 사이트에서는 그에 대응하는 geo_<replicable>_force_primary_checksumming 플래그가 활성화되어 있는 동안(기본값) 체크섬 계산이 계속됩니다. 기본 사이트의 체크섬 계산도 중단하려면 두 플래그를 모두 비활성화합니다.

Feature.disable(:geo_package_file_replication)
Feature.disable(:geo_package_file_force_primary_checksumming)
Warning

이 목록에 없거나 Replicated 칼럼이 No 인 기능은 보조 사이트로 복제되지 않습니다. 해당 기능의 데이터를 수동으로 복제하지 않고 페일오버하면 데이터가 손실됩니다. 보조 사이트에서 해당 기능을 사용하거나 페일오버를 성공적으로 수행하려면 다른 방법으로 데이터를 복제해야 합니다.

기능 복제됨(추가된 GitLab 버전) 확인됨(추가된 GitLab 버전) GitLab 관리 오브젝트 스토리지 복제(추가된 GitLab 버전) GitLab 관리 오브젝트 스토리지 확인(추가된 GitLab 버전) 비고
PostgreSQL의 애플리케이션 데이터 ✅ ✅ 해당 없음 해당 없음 없음
프로젝트 리포지터리 ✅ ✅ 해당 없음 해당 없음 복제는 기능 플래그 geo_project_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.

보관된 프로젝트를 포함한 모든 프로젝트가 복제됩니다.
프로젝트 위키 리포지터리 ✅ 2 ✅ 2 해당 없음 해당 없음 복제는 기능 플래그 geo_project_wiki_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
그룹 위키 리포지터리 ✅ ✅ 해당 없음 해당 없음 복제는 기능 플래그 geo_group_wiki_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
사용자 업로드 ✅ ✅ ✅ ✅ 3 복제는 기능 플래그 geo_upload_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
LFS 오브젝트 ✅ ✅ ✅ ✅ 3 복제는 기능 플래그 geo_lfs_object_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
개인 스니펫 ✅ ✅ 해당 없음 해당 없음 없음
프로젝트 스니펫 ✅ ✅ 해당 없음 해당 없음 없음
CI job 아티팩트 ✅ ✅ ✅ ✅ 3 확인은 기능 플래그 geo_job_artifact_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 기본 사이트에서는 geo_job_artifact_force_primary_checksumming도 함께 비활성화하지 않는 한 체크섬 계산이 계속됩니다. 복제 활성화 또는 비활성화를 참고합니다.
파이프라인 아티팩트 ✅ ✅ ✅ ✅ 3 파이프라인이 완료된 뒤 추가 아티팩트를 보존합니다.
CI Secure Files ✅ (15.3) ✅ (15.3) ✅ (15.3) ✅ (16.4)3 확인은 기능 플래그 geo_ci_secure_file_replication 뒤에 있으며 15.3부터 기본값으로 활성화되어 있습니다.
컨테이너 레지스트리 ✅ (12.3)1 ✅ (15.10) ✅ (12.3)1 ✅ (15.10) 컨테이너 레지스트리 복제를 설정하려면 안내를 참고합니다.
Terraform 모듈 레지스트리 ✅ (14.0) ✅ (14.0) ✅ (15.1) ✅ (16.4)3 기능 플래그 geo_package_file_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
프로젝트 디자인 리포지터리 ✅ (12.7) ✅ (16.1) ✅ (16.4)3 ✅ (16.4)3 디자인에는 LFS 오브젝트와 업로드의 복제도 필요합니다.
패키지 레지스트리 ✅ (13.2) ✅ (13.10) ✅ (15.1) ✅ (16.4)3 기능 플래그 geo_package_file_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
패키지 Helm 메타데이터 캐시 ✅ (18.10) ✅ (18.10) ✅ (18.10) ✅ (18.10) 기능 플래그 geo_packages_helm_metadata_cache_replication 뒤에 있으며 18.10부터 기본값으로 활성화되어 있습니다.
버전 관리 Terraform 상태 ✅ (13.5) ✅ (13.12) ✅ (15.1) ✅ (16.4)3 복제는 기능 플래그 geo_terraform_state_version_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 확인은 기능 플래그 geo_terraform_state_version_verification 뒤에 있었으나 14.0에서 제거되었습니다.
외부 머지 리퀘스트 diff ✅ (13.5) ✅ (14.6) ✅ (15.1) ✅ (16.4)3 복제는 기능 플래그 geo_merge_request_diff_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 확인은 기능 플래그 geo_merge_request_diff_verification 뒤에 있었으나 14.7에서 제거되었습니다.
버전 관리 스니펫 ✅ (13.7) ✅ (14.2) ✅ (16.4)3 ✅ (16.4)3 확인은 13.11에서 기능 플래그 geo_snippet_repository_verification 뒤에 구현되었고, 이 기능 플래그는 14.2에서 제거되었습니다.
Pages ✅ (14.3) ✅ (14.6) ✅ (15.1) ✅ (16.4)3 기능 플래그 geo_pages_deployment_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 확인은 기능 플래그 geo_pages_deployment_verification 뒤에 있었으나 14.7에서 제거되었습니다.
프로젝트 수준 CI Secure Files ✅ (15.3) ✅ (15.3) ✅ (15.3) ✅ (16.4)3
인시던트 메트릭 이미지 ✅ (15.5) ✅ (15.5) ✅ (15.5) ✅ (16.4)3 복제와 확인은 업로드 데이터 유형을 통해 처리됩니다.
알림 메트릭 이미지 ✅ (15.5) ✅ (15.5) ✅ (15.5) ✅ (16.4)3 복제와 확인은 업로드 데이터 유형을 통해 처리됩니다.
서버 측 Git 훅 계획 없음 ❌ 해당 없음 해당 없음 현재 구현 복잡도, 낮은 고객 수요, 훅을 대체할 수단의 존재를 이유로 계획이 없습니다.
Elasticsearch 계획 없음 ❌ ❌ ❌ 추가 제품 검토가 필요하고 Elasticsearch(ES) 클러스터는 재구축할 수 있으므로 계획이 없습니다. 보조 사이트는 기본 사이트와 같은 ES 클러스터를 사용합니다.
의존성 프록시 이미지 ✅ (15.7) ✅ (15.7) ✅ (15.7) ✅ (16.4)3
패키지 NuGet 심볼 ✅ (18.10) ✅ (18.10) ✅ (15.7) ✅ (16.4)3 기능 플래그 geo_packages_nuget_symbol_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
취약점 내보내기 계획 없음 ❌ ❌ ❌ 일시적이고 민감한 정보이므로 계획이 없습니다. 필요할 때 다시 생성할 수 있습니다.
패키지 NPM 메타데이터 캐시 계획 없음 ❌ ❌ ❌ 재해 복구 역량이나 보조 사이트의 응답 시간을 크게 개선하지 못하므로 계획이 없습니다.
패키지 Debian GroupComponentFile 계획 없음 ❌ ❌ ❌
패키지 Debian ProjectComponentFile ✅ (19.1) ✅ (19.1) ✅ (19.1) ✅ (19.1) 기능 플래그 geo_packages_debian_project_component_file_replication 뒤에 있으며 기본값으로 비활성화되어 있습니다.
패키지 Debian GroupDistribution 계획 없음 ❌ ❌ ❌
패키지 Debian ProjectDistribution 계획 없음 ❌ ❌ ❌
패키지 RPM RepositoryFile 계획 없음 ❌ ❌ ❌
VirtualRegistries Maven Cache Entry 계획 없음 ❌ ❌ ❌
SBOM 취약점 스캔 데이터 계획 없음 ❌ ❌ ❌ 데이터가 임시이고 수명이 짧아 보조 사이트의 재해 복구 역량에 미치는 영향이 제한적이므로 계획이 없습니다.

각주:

  1. 15.5에서 셀프 서비스 프레임워크로 이전되었습니다. 자세한 내용은 GitLab 이슈 #337436을 참고합니다.
  2. 15.11에서 셀프 서비스 프레임워크로 이전되었습니다. 기능 플래그 geo_project_wiki_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 자세한 내용은 GitLab 이슈 #367925를 참고합니다.
  3. 오브젝트 스토리지 확인은 GitLab 16.4에서 geo_object_storage_verification이라는 기능 플래그와 함께 도입되었습니다. 기본값으로 활성화되어 있습니다.

지원되는 Geo 데이터 유형

GitLab v19.4
Tier: Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기

요약

Geo 데이터 유형은 하나 이상의 GitLab 기능이 관련 정보를 저장하는 데 필요로 하는 특정 데이터 부류입니다. Geo로 이러한 기능이 생성한 데이터를 복제하기 위해, 데이터에 접근하고 전송하고 확인하는 여러 전략을 사용합니다.

Geo 데이터 유형은 하나 이상의 GitLab 기능이 관련 정보를 저장하는 데 필요로 하는 특정 데이터 부류입니다.

Geo로 이러한 기능이 생성한 데이터를 복제하기 위해, 데이터에 접근하고 전송하고 확인하는 여러 전략을 사용합니다.

데이터 유형#

다음 데이터 유형을 구분합니다.

복제 대상인 각 기능 또는 컴포넌트와 그에 해당하는 데이터 유형, 복제 방법, 확인 방법은 아래 목록을 참고합니다.

유형 기능 / 컴포넌트 복제 방법 확인 방법
Database PostgreSQL의 애플리케이션 데이터 Native Native
Database Redis 해당 없음 1 해당 없음
Database 고급 검색(Elasticsearch 또는 OpenSearch) Native Native
Database 정확한 코드 검색(Zoekt) Native Native
Database SSH 공개 키 PostgreSQL Replication PostgreSQL Replication
Git 프로젝트 리포지터리 Geo with Gitaly Gitaly Checksum
Git 프로젝트 위키 리포지터리 Geo with Gitaly Gitaly Checksum
Git 프로젝트 디자인 리포지터리 Geo with Gitaly Gitaly Checksum
Git 프로젝트 스니펫 Geo with Gitaly Gitaly Checksum
Git 개인 스니펫 Geo with Gitaly Gitaly Checksum
Git 그룹 위키 리포지터리 Geo with Gitaly Gitaly Checksum
Blob 사용자 업로드 (파일 시스템) Geo with API SHA256 checksum
Blob 사용자 업로드 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob LFS 오브젝트 (파일 시스템) Geo with API SHA256 checksum
Blob LFS 오브젝트 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob CI job 아티팩트 (파일 시스템) Geo with API SHA256 checksum
Blob CI job 아티팩트 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 보관된 CI 빌드 추적 (파일 시스템) Geo with API 구현되지 않음
Blob 보관된 CI 빌드 추적 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 컨테이너 레지스트리 (파일 시스템) Geo with API/Docker API SHA256 checksum
Blob 컨테이너 레지스트리 (오브젝트 스토리지) Geo with API/Managed/Docker API 2 SHA256 checksum 3
Blob 패키지 레지스트리 (파일 시스템) Geo with API SHA256 checksum
Blob 패키지 레지스트리 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 패키지 Helm 메타데이터 캐시 (파일 시스템) Geo with API SHA256 checksum
Blob 패키지 Helm 메타데이터 캐시 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob Terraform 모듈 레지스트리 (파일 시스템) Geo with API SHA256 checksum
Blob Terraform 모듈 레지스트리 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 버전 관리 Terraform 상태 (파일 시스템) Geo with API SHA256 checksum
Blob 버전 관리 Terraform 상태 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 외부 머지 리퀘스트 diff (파일 시스템) Geo with API SHA256 checksum
Blob 외부 머지 리퀘스트 diff (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 파이프라인 아티팩트 (파일 시스템) Geo with API SHA256 checksum
Blob 파이프라인 아티팩트 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob Pages (파일 시스템) Geo with API SHA256 checksum
Blob Pages (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob CI Secure Files (파일 시스템) Geo with API SHA256 checksum
Blob CI Secure Files (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 인시던트 메트릭 이미지 (파일 시스템) Geo with API/Managed SHA256 checksum
Blob 인시던트 메트릭 이미지 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 알림 메트릭 이미지 (파일 시스템) Geo with API SHA256 checksum
Blob 알림 메트릭 이미지 (오브젝트 스토리지) Geo with API/Managed 2 SHA256 checksum 3
Blob 의존성 프록시 이미지 (파일 시스템) Geo with API SHA256 checksum
Blob 의존성 프록시 이미지 (오브젝트 스토리지) Geo with API/managed 2 SHA256 checksum 3
Blob 패키지 nuget 심볼 (파일 시스템) Geo with API SHA256 checksum
Blob 패키지 nuget 심볼 (오브젝트 스토리지) Geo with API/Docker API SHA256 checksum 3
Container Repository 컨테이너 레지스트리 (파일 시스템) Geo with API/Docker API SHA256 checksum
Container Repository 컨테이너 레지스트리 (오브젝트 스토리지) Geo with API/Managed/Docker API 2 SHA256 checksum 3

각주:

  1. Redis 복제는 Redis 센티널을 사용하는 HA 구성의 일부로 쓸 수 있습니다. Geo 사이트 간에는 사용하지 않습니다.
  2. 오브젝트 스토리지 복제는 Geo가 수행하거나, 오브젝트 스토리지 공급자·어플라이언스의 네이티브 복제 기능이 수행할 수 있습니다.
  3. 오브젝트 스토리지 확인은 GitLab 16.4에서 geo_object_storage_verification이라는 기능 플래그와 함께 도입되었습니다. 기본값으로 활성화되어 있습니다.

Git 리포지터리#

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

  • 디스크가 하나인 머신
  • RAID 어레이처럼 여러 디스크를 단일 마운트 포인트로 마운트한 머신
  • LVM을 사용하는 머신

GitLab은 특별한 파일 시스템을 요구하지 않으며 마운트된 스토리지 어플라이언스에서도 동작합니다. 다만 원격 파일 시스템을 사용하면 성능 제약과 일관성 문제가 생길 수 있습니다.

Geo는 Geo 보조 사이트에서 포크된 리포지터리를 중복 제거하도록 Gitaly에서 가비지 컬렉션을 트리거합니다.

통신은 Gitaly gRPC API가 담당하며, 동기화 방식은 다음 세 가지입니다.

  • 한 Geo 사이트에서 다른 사이트로 일반 Git clone/fetch를 사용합니다(별도 인증 포함).
  • 리포지터리 스냅샷을 사용합니다(첫 번째 방식이 실패하거나 리포지터리가 손상된 경우).
  • Admin 영역에서 수동으로 트리거합니다(나열된 다른 방식을 조합합니다).

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

  • 소스 코드를 저장하는 프로젝트 리포지터리
  • 위키 콘텐츠를 저장하는 위키 리포지터리
  • 디자인 아티팩트를 인덱싱하는 디자인 리포지터리(자산은 실제로 LFS에 있습니다)

세 리포지터리는 모두 같은 샤드에 있고 같은 기본 이름을 공유하며, 위키와 디자인 리포지터리에는 각각 -wiki와 -design 접미사가 붙습니다.

그 밖에 스니펫 리포지터리가 있습니다. 스니펫 리포지터리는 프로젝트나 특정 사용자에 연결할 수 있습니다. 두 유형 모두 보조 사이트로 동기화됩니다.

컨테이너 리포지터리#

컨테이너 리포지터리는 컨테이너 레지스트리에 저장됩니다. 컨테이너 리포지터리는 컨테이너 레지스트리를 데이터 저장소로 삼아 구축한 GitLab 고유 개념입니다.

블롭#

GitLab은 이슈 첨부 파일이나 LFS 오브젝트 같은 파일과 블롭을 다음 중 한 곳에 저장합니다.

  • 특정 위치의 파일 시스템
  • 오브젝트 스토리지 솔루션. 오브젝트 스토리지 솔루션은 다음과 같습니다.
    • Amazon S3나 Google Cloud Storage 같은 클라우드 기반 스토리지
    • 자체 호스팅 S3 호환 오브젝트 스토리지
    • 오브젝트 스토리지 호환 API를 노출하는 스토리지 어플라이언스

오브젝트 스토리지 대신 파일 시스템 저장소를 사용하고 노드를 둘 이상 사용한다면, 네트워크 마운트 파일 시스템으로 GitLab을 실행합니다.

복제와 확인 측면에서는 다음과 같습니다.

  • 파일과 블롭은 내부 API 요청으로 전송합니다.
  • 오브젝트 스토리지에서는 다음 중 하나를 선택할 수 있습니다.
    • 클라우드 공급자의 복제 기능을 사용합니다.
    • GitLab이 대신 복제하도록 합니다.

데이터베이스#

GitLab은 사용 사례별로 여러 데이터베이스에 저장된 데이터에 의존합니다. PostgreSQL은 이슈 콘텐츠와 댓글은 물론 권한과 자격 증명까지, 웹 인터페이스에서 생성되는 사용자 콘텐츠의 단일 진실 공급원입니다.

PostgreSQL은 HTML로 렌더링한 Markdown이나 캐시된 머지 리퀘스트 diff 같은 캐시 데이터도 일부 보관할 수 있습니다. 이 데이터는 오브젝트 스토리지로 오프로드하도록 구성할 수도 있습니다.

기본 사이트에서 보조 사이트로 데이터를 복제할 때는 PostgreSQL 자체 복제 기능을 사용합니다.

Redis는 캐시 저장소로도, 백그라운드 job 시스템의 영속 데이터 보관용으로도 사용합니다. 두 사용 사례 모두 같은 Geo 사이트에만 해당하는 데이터를 다루므로 사이트 간에 복제하지 않습니다.

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

복제되는 데이터 유형#

기능 플래그 뒤의 복제되는 데이터 유형#

히스토리
  • 기본값으로 활성화된 기능 플래그 뒤에 배포됩니다.
  • GitLab.com에서 활성화되어 있습니다.
  • 프로젝트별로 활성화하거나 비활성화할 수 없습니다.
  • 프로덕션 사용을 권장합니다.
  • GitLab Self-Managed 인스턴스에서는 GitLab 관리자가 비활성화를 선택할 수 있습니다.
Feature flag

이 기능의 가용성은 기능 플래그로 제어합니다. 자세한 내용은 히스토리를 참고합니다.

복제 활성화 또는 비활성화(일부 데이터 유형)#

일부 데이터 유형의 복제는 기본값으로 활성화된 기능 플래그 뒤에서 릴리스됩니다. GitLab Rails 콘솔에 접근할 수 있는 GitLab 관리자는 인스턴스에서 이를 비활성화할 수 있습니다. 각 데이터 유형의 기능 플래그 이름은 아래 표의 비고 칼럼에서 확인할 수 있습니다.

패키지 파일 복제를 예로 들면, 비활성화는 다음과 같습니다.

Feature.disable(:geo_package_file_replication)

패키지 파일 복제를 예로 들면, 활성화는 다음과 같습니다.

Feature.enable(:geo_package_file_replication)

geo_<replicable>_replication 플래그를 비활성화하면 보조 사이트의 복제와 확인이 중단됩니다. 기본 사이트에서는 그에 대응하는 geo_<replicable>_force_primary_checksumming 플래그가 활성화되어 있는 동안(기본값) 체크섬 계산이 계속됩니다. 기본 사이트의 체크섬 계산도 중단하려면 두 플래그를 모두 비활성화합니다.

Feature.disable(:geo_package_file_replication)
Feature.disable(:geo_package_file_force_primary_checksumming)
Warning

이 목록에 없거나 Replicated 칼럼이 No 인 기능은 보조 사이트로 복제되지 않습니다. 해당 기능의 데이터를 수동으로 복제하지 않고 페일오버하면 데이터가 손실됩니다. 보조 사이트에서 해당 기능을 사용하거나 페일오버를 성공적으로 수행하려면 다른 방법으로 데이터를 복제해야 합니다.

기능 복제됨(추가된 GitLab 버전) 확인됨(추가된 GitLab 버전) GitLab 관리 오브젝트 스토리지 복제(추가된 GitLab 버전) GitLab 관리 오브젝트 스토리지 확인(추가된 GitLab 버전) 비고
PostgreSQL의 애플리케이션 데이터 ✅ ✅ 해당 없음 해당 없음 없음
프로젝트 리포지터리 ✅ ✅ 해당 없음 해당 없음 복제는 기능 플래그 geo_project_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.

보관된 프로젝트를 포함한 모든 프로젝트가 복제됩니다.
프로젝트 위키 리포지터리 ✅ 2 ✅ 2 해당 없음 해당 없음 복제는 기능 플래그 geo_project_wiki_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
그룹 위키 리포지터리 ✅ ✅ 해당 없음 해당 없음 복제는 기능 플래그 geo_group_wiki_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
사용자 업로드 ✅ ✅ ✅ ✅ 3 복제는 기능 플래그 geo_upload_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
LFS 오브젝트 ✅ ✅ ✅ ✅ 3 복제는 기능 플래그 geo_lfs_object_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
개인 스니펫 ✅ ✅ 해당 없음 해당 없음 없음
프로젝트 스니펫 ✅ ✅ 해당 없음 해당 없음 없음
CI job 아티팩트 ✅ ✅ ✅ ✅ 3 확인은 기능 플래그 geo_job_artifact_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 기본 사이트에서는 geo_job_artifact_force_primary_checksumming도 함께 비활성화하지 않는 한 체크섬 계산이 계속됩니다. 복제 활성화 또는 비활성화를 참고합니다.
파이프라인 아티팩트 ✅ ✅ ✅ ✅ 3 파이프라인이 완료된 뒤 추가 아티팩트를 보존합니다.
CI Secure Files ✅ (15.3) ✅ (15.3) ✅ (15.3) ✅ (16.4)3 확인은 기능 플래그 geo_ci_secure_file_replication 뒤에 있으며 15.3부터 기본값으로 활성화되어 있습니다.
컨테이너 레지스트리 ✅ (12.3)1 ✅ (15.10) ✅ (12.3)1 ✅ (15.10) 컨테이너 레지스트리 복제를 설정하려면 안내를 참고합니다.
Terraform 모듈 레지스트리 ✅ (14.0) ✅ (14.0) ✅ (15.1) ✅ (16.4)3 기능 플래그 geo_package_file_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
프로젝트 디자인 리포지터리 ✅ (12.7) ✅ (16.1) ✅ (16.4)3 ✅ (16.4)3 디자인에는 LFS 오브젝트와 업로드의 복제도 필요합니다.
패키지 레지스트리 ✅ (13.2) ✅ (13.10) ✅ (15.1) ✅ (16.4)3 기능 플래그 geo_package_file_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
패키지 Helm 메타데이터 캐시 ✅ (18.10) ✅ (18.10) ✅ (18.10) ✅ (18.10) 기능 플래그 geo_packages_helm_metadata_cache_replication 뒤에 있으며 18.10부터 기본값으로 활성화되어 있습니다.
버전 관리 Terraform 상태 ✅ (13.5) ✅ (13.12) ✅ (15.1) ✅ (16.4)3 복제는 기능 플래그 geo_terraform_state_version_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 확인은 기능 플래그 geo_terraform_state_version_verification 뒤에 있었으나 14.0에서 제거되었습니다.
외부 머지 리퀘스트 diff ✅ (13.5) ✅ (14.6) ✅ (15.1) ✅ (16.4)3 복제는 기능 플래그 geo_merge_request_diff_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 확인은 기능 플래그 geo_merge_request_diff_verification 뒤에 있었으나 14.7에서 제거되었습니다.
버전 관리 스니펫 ✅ (13.7) ✅ (14.2) ✅ (16.4)3 ✅ (16.4)3 확인은 13.11에서 기능 플래그 geo_snippet_repository_verification 뒤에 구현되었고, 이 기능 플래그는 14.2에서 제거되었습니다.
Pages ✅ (14.3) ✅ (14.6) ✅ (15.1) ✅ (16.4)3 기능 플래그 geo_pages_deployment_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 확인은 기능 플래그 geo_pages_deployment_verification 뒤에 있었으나 14.7에서 제거되었습니다.
프로젝트 수준 CI Secure Files ✅ (15.3) ✅ (15.3) ✅ (15.3) ✅ (16.4)3
인시던트 메트릭 이미지 ✅ (15.5) ✅ (15.5) ✅ (15.5) ✅ (16.4)3 복제와 확인은 업로드 데이터 유형을 통해 처리됩니다.
알림 메트릭 이미지 ✅ (15.5) ✅ (15.5) ✅ (15.5) ✅ (16.4)3 복제와 확인은 업로드 데이터 유형을 통해 처리됩니다.
서버 측 Git 훅 계획 없음 ❌ 해당 없음 해당 없음 현재 구현 복잡도, 낮은 고객 수요, 훅을 대체할 수단의 존재를 이유로 계획이 없습니다.
Elasticsearch 계획 없음 ❌ ❌ ❌ 추가 제품 검토가 필요하고 Elasticsearch(ES) 클러스터는 재구축할 수 있으므로 계획이 없습니다. 보조 사이트는 기본 사이트와 같은 ES 클러스터를 사용합니다.
의존성 프록시 이미지 ✅ (15.7) ✅ (15.7) ✅ (15.7) ✅ (16.4)3
패키지 NuGet 심볼 ✅ (18.10) ✅ (18.10) ✅ (15.7) ✅ (16.4)3 기능 플래그 geo_packages_nuget_symbol_replication 뒤에 있으며 기본값으로 활성화되어 있습니다.
취약점 내보내기 계획 없음 ❌ ❌ ❌ 일시적이고 민감한 정보이므로 계획이 없습니다. 필요할 때 다시 생성할 수 있습니다.
패키지 NPM 메타데이터 캐시 계획 없음 ❌ ❌ ❌ 재해 복구 역량이나 보조 사이트의 응답 시간을 크게 개선하지 못하므로 계획이 없습니다.
패키지 Debian GroupComponentFile 계획 없음 ❌ ❌ ❌
패키지 Debian ProjectComponentFile ✅ (19.1) ✅ (19.1) ✅ (19.1) ✅ (19.1) 기능 플래그 geo_packages_debian_project_component_file_replication 뒤에 있으며 기본값으로 비활성화되어 있습니다.
패키지 Debian GroupDistribution 계획 없음 ❌ ❌ ❌
패키지 Debian ProjectDistribution 계획 없음 ❌ ❌ ❌
패키지 RPM RepositoryFile 계획 없음 ❌ ❌ ❌
VirtualRegistries Maven Cache Entry 계획 없음 ❌ ❌ ❌
SBOM 취약점 스캔 데이터 계획 없음 ❌ ❌ ❌ 데이터가 임시이고 수명이 짧아 보조 사이트의 재해 복구 역량에 미치는 영향이 제한적이므로 계획이 없습니다.

각주:

  1. 15.5에서 셀프 서비스 프레임워크로 이전되었습니다. 자세한 내용은 GitLab 이슈 #337436을 참고합니다.
  2. 15.11에서 셀프 서비스 프레임워크로 이전되었습니다. 기능 플래그 geo_project_wiki_repository_replication 뒤에 있으며 기본값으로 활성화되어 있습니다. 자세한 내용은 GitLab 이슈 #367925를 참고합니다.
  3. 오브젝트 스토리지 확인은 GitLab 16.4에서 geo_object_storage_verification이라는 기능 플래그와 함께 도입되었습니다. 기본값으로 활성화되어 있습니다.