GitLab 백업 및 복원 gitlab-backup-cli 사용하기

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

이 도구는 개발 중이며 궁극적으로 GitLab 백업 및 복원에 사용되는 Rake 작업을 대체할 예정입니다. 이 도구의 개발 진행 상황은 다음의 에픽에서 확인할 수 있습니다: 차세대 확장 가능한 백업 및 복원.

도구에 대한 피드백은 피드백 이슈에서 환영합니다.

백업 수행하기

현재 GitLab 설치의 백업을 수행하려면:

sudo gitlab-backup-cli backup all

오브젝트 스토리지 백업하기

Google 클라우드만 지원됩니다. 더 많은 공급자를 추가하기 위한 계획은 에픽 11577를 참조하세요.

GCP

gitlab-backup-cliGoogle Transfer Service를 사용하여 GitLab 데이터를 별도의 백업 버킷으로 복사하기 위해 작업을 생성하고 실행합니다.

사전 요구 사항:

  • 인증을 위해 Google 문서를 참조하세요.
  • 이 문서는 백업 관리용으로 전용 Google 클라우드 서비스 계정을 설정하고 사용하는 것으로 가정합니다.
  • 다른 자격 증명이 제공되지 않은 경우 Google Cloud 내에서 실행하고 있으면, 도구는 실행 중인 인프라의 액세스를 사용하려고 시도합니다. 별도의 자격 증명을 사용하여 실행하고, 애플리케이션에서 생성된 백업에 대한 액세스를 제한하는 것이 권장됩니다.

백업을 만들려면:

  1. 역할 생성:
    1. 다음 정의로 role.yaml 파일을 만듭니다:
    ---
    description: GitLab 오브젝트 스토리지 백업을 위한 역할
    includedPermissions:
       - storagetransfer.jobs.create
       - storagetransfer.jobs.get
       - storagetransfer.jobs.run
       - storagetransfer.jobs.update
       - storagetransfer.operations.get
       - storagetransfer.projects.getServiceAccount
    stage: GA
    title: GitLab 백업 역할
    
    1. 역할을 적용합니다:

      gcloud iam roles create --project=<YOUR_PROJECT_ID> <ROLE_NAME> --file=role.yaml
      
  2. 백업을 위한 서비스 계정을 만들고, 역할에 추가합니다:

    gcloud iam service-accounts create "gitlab-backup-cli" --display-name="GitLab 백업 서비스 계정"
    # 다음의 출력에서 서비스 계정 이메일을 가져옵니다
    gcloud iam service-accounts list
    # 이전에 생성한 역할에 계정을 추가합니다
    gcloud projects add-iam-policy-binding <YOUR_PROJECT_ID> --member="serviceAccount:<SERVICE_ACCOUNT_EMAIL>" --role="roles/<ROLE_NAME>"
    
  3. 서비스 계정으로 인증하기 위해 Google 문서를 참조하세요. 일반적으로 자격 증명은 파일에 저장하거나 미리 정의된 환경 변수에 저장할 수 있습니다.
  4. Google Cloud Storage에 백업할 목적지 버킷을 만듭니다. 여기의 옵션은 귀하의 요구 사항에 따라 크게 다릅니다.
  5. 백업을 실행합니다:

    sudo gitlab-backup-cli backup all --backup-bucket=<BUCKET_NAME>
    

    컨테이너 레지스트리 버킷도 백업하려면 --registry-bucket=<REGISTRY_BUCKET_NAME> 옵션을 추가합니다.

  6. 백업은 버킷의 각 오브젝트 스토리지 유형에 대해 backups/<BACKUP_ID>/<BUCKET> 하위에 백업을 생성합니다.

백업 디렉터리 구조

예시 백업 디렉터리 구조:

backups
└── 1714053314_2024_04_25_17.0.0-pre
    ├── artifacts.tar.gz
    ├── backup_information.json
    ├── builds.tar.gz
    ├── ci_secure_files.tar.gz
    ├── db
    │   ├── ci_database.sql.gz
    │   └── database.sql.gz
    ├── lfs.tar.gz
    ├── packages.tar.gz
    ├── pages.tar.gz
    ├── registry.tar.gz
    ├── repositories
    │   ├── default
    │   │   ├── @hashed
    │   │   └── @snippets
    │   └── manifests
    │       └── default
    ├── terraform_state.tar.gz
    └── uploads.tar.gz

db 디렉터리는 pg_dump를 사용하여 GitLab PostgreSQL 데이터베이스를 백업하는 데 사용되며, SQL 덤프를 생성합니다. pg_dump의 출력은 gzip을 통해 파이프 처리되어 압축된 SQL 파일을 생성합니다.

repositories 디렉터리는 GitLab 데이터베이스에서 찾을 수 있는 Git 리포지토리를 백업하는 데 사용됩니다.

백업 ID

백업 ID는 개별 백업을 식별합니다. 여러 백업이 있는 경우 GitLab을 복원할 때 백업 아카이브의 백업 ID가 필요합니다.

백업은 config/gitlab.yml 파일에 지정된 backup_path에 설정된 디렉터리에 저장됩니다.

  • 기본적으로 백업은 /var/opt/gitlab/backups에 저장됩니다.
  • 기본적으로 백업 디렉터리는 backup_id 이름으로 지정되며, 여기서 <backup-id>는 백업이 생성된 시간을 식별하고 GitLab 버전을 나타냅니다.

예를 들어, 백업 디렉터리 이름이 1714053314_2024_04_25_17.0.0-pre인 경우, 생성 시간은 1714053314_2024_04_25로 표현되며, GitLab 버전은 17.0.0-pre입니다.

백업 메타데이터 파일 (backup_information.json)

  • 메타데이터 버전 2는 GitLab 16.11에서 도입되었습니다.

backup_information.json은 백업 디렉터리에서 발견되며, 백업에 대한 메타데이터를 저장합니다. 예를 들어:

{
  "metadata_version": 2,
  "backup_id": "1714053314_2024_04_25_17.0.0-pre",
  "created_at": "2024-04-25T13:55:14Z",
  "gitlab_version": "17.0.0-pre"
}

알려진 문제들

gitlab-backup-cli를 사용할 때 다음과 같은 문제를 경험할 수 있습니다.

아키텍처 호환성

1K 아키텍처 이외의 아키텍처에서 gitlab-backup-cli 도구를 사용하면 문제가 발생할 수 있습니다. 이 도구는 1K 아키텍처에서만 지원되며, 관련 환경에서만 권장됩니다.

백업 전략

백업 중 기존 파일에 대한 변경은 GitLab 인스턴스에 문제를 일으킬 수 있습니다. 이 문제는 도구의 초기 버전이 복사 전략을 사용하지 않기 때문에 발생합니다.

이 문제의 우회 방법은 다음과 같습니다:

  • GitLab 인스턴스를 유지 관리 모드로 전환하십시오.
  • 백업 중 인스턴스 리소스를 보존하기 위해 서버로의 트래픽을 제한하십시오.

우리는 복사 전략에 대한 대안을 조사 중이며, 문제 428520을 참조하십시오.

백업되는 데이터는 무엇인가요?

  1. Git 리포지토리 데이터
  2. 데이터베이스
  3. Blob

백업되지 않는 데이터는 무엇인가요?

  1. 비밀 및 구성

  2. 일시적 및 캐시 데이터

    • Redis: 캐시
    • Redis: Sidekiq 데이터
    • 로그
    • Elasticsearch
    • 가시성 데이터 / Prometheus 메트릭