지원되는 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 체크섬
블롭 사용자 업로드 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 사용자 업로드 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 LFS 객체 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 LFS 객체 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 CI 작업 아티팩트 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 CI 작업 아티팩트 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 아카이브된 CI 빌드 추적 (파일 시스템) API와 함께 Geo 구현되지 않음
블롭 아카이브된 CI 빌드 추적 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 컨테이너 레지스트리 (파일 시스템) API/Docker API와 함께 Geo SHA256 체크섬
블롭 컨테이너 레지스트리 (객체 리포지터리) API/Managed/Docker API와 함께 Geo (2) SHA256 체크섬 (3)
블롭 패키지 레지스트리 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 패키지 레지스트리 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 Terraform 모듈 레지스트리 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 Terraform 모듈 레지스트리 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 버전이 있는 Terraform 상태 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 버전이 있는 Terraform 상태 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 외부 Merge Request 차이 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 외부 Merge Request 차이 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 파이프라인 아티팩트 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 파이프라인 아티팩트 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 페이지 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 페이지 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 CI 보안 파일 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 CI 보안 파일 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 사건 메트릭 이미지 (파일 시스템) API와 함께 Geo/Managed SHA256 체크섬
블롭 사건 메트릭 이미지 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 경보 메트릭 이미지 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 경보 메트릭 이미지 (객체 리포지터리) API/Managed와 함께 Geo (2) SHA256 체크섬 (3)
블롭 의존성 프록시 이미지 (파일 시스템) API와 함께 Geo SHA256 체크섬
블롭 의존성 프록시 이미지 (객체 리포지터리) API/managed와 함께 Geo (2) SHA256 체크섬 (3)
  • (1): Redis 복제는 Redis 센티널을 사용한 HA의 일부로 사용할 수 있습니다. 이는 Geo 사이트 사이에서는 사용되지 않습니다.
  • (2): 객체 리포지터리 복제는 Geo 또는 객체 리포지터리 공급 업체/장치의 기본 복제 기능으로 수행될 수 있습니다.
  • (3): 객체 리포지터리 확인은 피처 플래그 geo_object_storage_verification를 통해 제공되며, 16.4에서 소개되었으며 기본적으로 활성화됩니다. 파일 크기의 체크섬을 사용하여 파일을 확인합니다.
### Git 리포지터리

GitLab 인스턴스에는 하나 이상의 리포지터리 샤드가 있을 수 있습니다. 각 샤드에는 지탈리(Gitaly) 인스턴스가 있어 로컬에 저장된 Git 리포지터리에 대한 액세스 및 작업을 담당합니다. 이것은 다음과 같은 머신에서 실행할 수 있습니다.

- 단일 디스크로.
- 하나의 마운트 포인트로 연결된 여러 디스크로(예: RAID 배열과 같이).
- LVM을 사용하여.

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

Geo는 Geo 보조 사이트에서 forked 리포지터리의 중복을 제거하기 위해 Gitaly의 가비지 수집을 트리거합니다. [fork된 리포지터리를 중복으로 제거하는 기능](../../../development/git_object_deduplication.md#git-object-deduplication-and-gitlab-geo)입니다.

Gitaly gRPC API는 통신을 담당하며 동기화하는 방법은 다음과 같습니다.

- Geo 사이트에서 다른 Geo 사이트로 일반적인 Git clone/fetch를 사용하여(특별한 인증을 사용).
- 리포지터리 스냅샷을 사용합니다(첫 번째 방법이 실패하거나 리포지터리가 손상된 경우).
- 관리 영역에서 매뉴얼 트리거(위의 두 가지의 조합).

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

- 프로젝트 리포지터리, 소스 코드가 저장되는 곳.
- 위키 리포지터리, 위키 콘텐츠가 저장되는 곳.
- 디자인 리포지터리, 디자인 자산이 색인화되는 곳(실제로 자산은 LFS에 저장됩니다).

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

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

### 블롭

GitLab은 파일 및 블롭(예: 이슈 첨부 파일 또는 LFS 객체)을 다음 중 하나로 저장합니다.

- 특정 위치(파일 시스템 내).
- [오브젝트 스토리지](../../object_storage.md) 솔루션. 객체 리포지터리 솔루션은 다음과 같습니다.
  - 클라우드 기반(예: Amazon S3 및 Google Cloud Storage).
  - 사용자가 호스팅하는 것(예: MinIO).
  - 오브젝트 스토리지과 호환되는 API를 노출하는 스토리지 앱.

오브젝트 스토리지을 사용할 때, 하나 이상의 노드를 사용할 때 GitLab을 실행하는 데 네트워크 마운트된 파일 시스템을 사용해야 합니다.

복제 및 확인에 관해서:

- 내부 API 요청을 사용하여 파일과 블롭을 전송합니다.
- 오브젝트 스토리지을 사용할 때, 다음 중 하나를 사용할 수 있습니다.
  - 클라우드 공급업체의 복제 기능을 사용합니다.
  - GitLab이 대신 복제하도록 할 수 있습니다.

### 데이터베이스

GitLab은 여러 데이터베이스에 저장된 데이터에 의존합니다.
PostgreSQL은 사용자가 웹 인터페이스에서 생성한 콘텐츠(이슈 콘텐츠, 코멘트 및 권한과 자격)에 대한 단일 진실의 지점입니다.

PostgreSQL은 HTML로 렌더링된 Markdown 및 캐시된 머지 요청의 몇 가지 수준의 캐시된 데이터를 보유할 수도 있습니다. 이것 또한 오브젝트 스토리지으로 오프로드하도록 설정할 수 있습니다.

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

우리는 Redis를 캐시 스토어로 사용하며 백그라운드 작업 시스템의 지속 데이터를 보관합니다. 두 사용 사례 모두 동일한 Geo 사이트에 대한 배타적인 데이터를 가지고 있기 때문에 우리는 사이트 간에 복제하지 않습니다.

Elasticsearch는 고급 검색을 위한 선택 사항 데이터베이스입니다. 이것은 소스 코드 수준 및 이슈, 머지 요청, 토론에 대한 사용자 생성 콘텐츠의 검색을 개선할 수 있습니다.
Elasticsearch는 Geo에서 지원되지 않습니다.

## 복제/확인에 대한 제한

다음 표는 **보조** 사이트에서 GitLab 기능과 그들의 복제 및 확인 상태를 보여줍니다.

실현되지 않은 항목들을 구현하기 위한 진척 상황은 다음 에픽/이슈를 통해 추적할 수 있습니다.

- [Geo: 자체 서비스 Geo 복제 프레임워크 개선](https://gitlab.com/groups/gitlab-org/-/epics/3761)
- [Geo: 기존 블롭을 프레임워크로 이동](https://gitlab.com/groups/gitlab-org/-/epics/3588)

### 피처 플래그 뒤에 있는 복제

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

> - 피처 플래그 뒤에 배포되어 있으며 기본적으로 활성화됩니다.
> - GitLab.com에서 활성화됩니다.
> - 프로젝트 당으로 활성화 또는 비활성화할 수 없습니다.
> - 프로덕션 환경에서 권장됩니다.
> - Self-managed GitLab 인스턴스에서 GitLab 관리자는 [비활성화](#일부-데이터-유형에-대한-복제를-활성화-또는-비활성화)할 수 있습니다.

#### 일부 데이터 유형에 대한 복제를 활성화 또는 비활성화

일부 데이터 유형의 복제는 피처 플래그 뒤에 배포되어 있고 **기본적으로 활성화**되어 있습니다. [GitLab Rails 콘솔에 액세스할 수 있는 GitLab 관리자](../../feature_flags.md)는 인스턴스에 대해 비활성화할 수 있습니다. 해당 데이터 유형의 피처 플래그 이름을 아래 표의 노트 열에서 찾을 수 있습니다.

예를 들어, 패키지 파일 복제에 대해 비활성화하려면:

```ruby
Feature.disable(:geo_package_file_replication)

패키지 파일 복제를 활성화하려면:

Feature.enable(:geo_package_file_replication)
caution
이 디렉터리에 없거나 아니요 열에 있는 기능은 보조 사이트로 복제되지 않습니다. 이러한 데이터를 매뉴얼으로 복제하지 않고 페일오버를 실행하면 데이터가 손실됩니다. 보조 사이트에서 이러한 기능을 사용하거나 이를 실행하려면 다른 수단을 사용하여 데이터를 복제해야 합니다.
기능 복제됨(추가된 GitLab 버전) 확인됨(추가된 GitLab 버전) GitLab에서 관리하는 객체 리포지터리 복제(추가된 GitLab 버전) GitLab에서 관리하는 객체 리포지터리 확인(추가된 GitLab 버전) 노트
PostgreSQL의 애플리케이션 데이터 (10.2) (10.2) 해당 없음 해당 없음  
프로젝트 리포지터리 (10.2) (10.7) (16.4)3 (16.4)3 16.2에서 자체 서비스 프레임워크로 이관됨. 세부 사항은 GitLab 이슈 #367925 참조.

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

모든 프로젝트, 보관된 프로젝트를 포함하여 복제됨.
프로젝트 위키 리포지터리 (10.2)2 (10.7)2 (16.4)3 (16.4)3 15.11에서 자체 서비스 프레임워크로 이관됨. 세부 사항은 GitLab 이슈 #367925 참조.

피처 플래그 geo_project_wiki_repository_replication 뒤에 있으며, 기본적으로 (15.11)에서 활성화됨.
그룹 위키 리포지터리 (13.10) (16.3) (16.4)3 (16.4)3 피처 플래그 geo_group_wiki_repository_replication 뒤에 있으며, 기본적으로 활성화됨.
업로드 (10.2) (14.6) (15.1) (16.4)3 복제가 피처 플래그 geo_upload_replication 뒤에 있으며, 기본적으로 (14.8)에서 제거됨.
LFS 객체 (10.2) (14.6) (15.1) (16.4)3 GitLab 버전 11.11.x 및 12.0.x이 새로운 LFS 객체를 전파하는 데 지장을 초래하는 버그에 영향을 받습니다.

복제가 피처 플래그 geo_lfs_object_replication 뒤에 있으며, 기본적으로 활성화됨. 확인은 피처 플래그 geo_lfs_object_verification 뒤에 있으며, 기본적으로 (14.7)에서 제거됨.
개인 스니펫 (10.2) (10.2) (16.4)3 (16.4)3  
프로젝트 스니펫 (10.2) (10.2) (16.4)3 (16.4)3  
CI 작업 아티팩트 (10.4) (14.10) (15.1) (16.4)3 검증은 피처 플래그 geo_job_artifact_replication 뒤에 있으며, 기본적으로 (14.10)에서 활성화됨.
CI 파이프라인 아티팩트 (13.11) (13.11) (15.1) (16.4)3 파이프라인이 완료된 후 추가적인 아티팩트를 유지함.
CI Secure 파일 (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