- GitLab 백업
- GitLab 복원
- 새 서버로 마이그레이션
- 추가 참고 사항
- GitLab 백업 아카이브 생성 프로세스
- 백업 ID
- 백업 스테이징 디렉터리
backup_information.yml
파일- 데이터베이스 백업
- 리포지터리 백업
- 파일 백업
- 관련 기능
markdown # GitLab 백업 및 복원
귀하의 소프트웨어 또는 조직은 GitLab 인스턴스의 데이터에 의존합니다. 귀하는 다음과 같은 역행 사건으로부터 데이터가 안전하게 보호되어야 합니다:
- 손상된 데이터
- 데이터의 실수로 삭제
- 랜섬웨어 공격
- 예기치 않은 클라우드 제공 업무 중단
이러한 모든 위험을 백업을 포함한 재해 복구 계획으로 완화할 수 있습니다.
GitLab 백업
GitLab의 백업에 대한 자세한 정보는 GitLab 백업을 참조하십시오.
GitLab 복원
GitLab의 복원에 대한 자세한 정보는 GitLab 복원을 참조하십시오.
새 서버로 마이그레이션
백업과 복원을 사용하여 새 서버로 마이그레이션하는 자세한 정보는 새 서버로 마이그레이션을 참조하십시오.
추가 참고 사항
이 문서는 GitLab Community 및 Enterprise Edition을 위한 것입니다. 우리는 GitLab.com을 백업하고 데이터를 안전하게 보호합니다. 그러나 이러한 방법을 사용하여 GitLab.com에서 직접 데이터를 내보내거나 백업할 수는 없습니다.
이슈는 데이터베이스에 저장되며 Git 자체에 저장할 수 없습니다.
GitLab 백업 아카이브 생성 프로세스
GitLab 백업을 처리할 때, GitLab이 어떻게 백업 아카이브를 만드는지에 대해 알아야 할 수 있습니다. 백업 아카이브를 생성하기 위해 GitLab은 다음과 같은 작업을 수행합니다:
- 증분 백업을 생성하는 경우 이전 백업 아카이브를 추출하고 그
backup_information.yml
파일을 읽습니다. -
backup_information.yml
파일을 업데이트하거나 생성합니다. - 모든 백업 하위 작업을 실행합니다:
-
db
는 GitLab PostgreSQL 데이터베이스(비 Gitaly 클러스터)의 백업을 수행합니다. -
repositories
는 Git 리포지터리를 백업합니다. -
uploads
는 첨부 파일을 백업합니다. -
builds
는 CI 작업 출력 로그를 백업합니다. -
artifacts
는 CI 작업 아티팩트를 백업합니다. -
pages
는 페이지 콘텐츠를 백업합니다. -
lfs
는 LFS 객체를 백업합니다. -
terraform_state
는 Terraform 상태를 백업합니다. -
registry
는 컨테이너 레지스트리 이미지를 백업합니다. -
packages
는 패키지를 백업합니다. -
ci_secure_files
는 프로젝트 수준의 안전 파일을 백업합니다.
-
- 백업 스테이징 영역을 tar 파일로 아카이브합니다.
- 선택 사항. 새로운 백업 아카이브를 객체 스토리지에 업로드합니다.
- 이제 아카이브된 백업 스테이징 디렉터리 파일을 정리합니다.
백업 ID
백업 ID는 개별 백업 아카이브를 식별합니다. GitLab을 복원해야 하는 경우 여러 백업 아카이브가 있는 경우 백업 아카이브의 백업 ID가 필요합니다.
백업 아카이브는 backup_path
에 설정된 디렉터리에 저장되며, 이는 config/gitlab.yml
파일에서 지정됩니다.
- 기본적으로 백업 아카이브는
/var/opt/gitlab/backups
에 저장됩니다. - 기본적으로 백업 아카이브 파일 이름은
<backup-id>_gitlab_backup.tar
이며, 여기서<backup-id>
는 백업 아카이브가 생성된 시간, GitLab 버전 및 GitLab 에디션을 식별합니다.
예를 들어, 아카이브 파일 이름이 1493107454_2018_04_25_10.6.4-ce_gitlab_backup.tar
인 경우, 백업 ID는 1493107454_2018_04_25_10.6.4-ce
입니다.
백업 스테이징 디렉터리
백업 스테이징 디렉터리는 GitLab 백업 아카이브가 생성되기 전에 임시로 다음을 수행하는 장소입니다:
- GitLab 백업 아카이브가 생성되기 전에 디스크에 백업 아티팩트를 저장합니다.
- 백업을 풀어낸 후 복원하거나 증분 백업을 만드는데 사용합니다.
이 디렉터리는 완료된 GitLab 백업 아카이브가 생성되는 동일한 디렉터리입니다. tar 압축 해제된 백업을 만들 때, 백업 아티팩트는 이 디렉터리에 남게 되며 아카이브는 만들어지지 않습니다.
tar 압축을 푼 백업 스테이징 디렉터리의 예시:
backups/
├── 1701728344_2023_12_04_16.7.0-pre_gitlab_backup.tar
├── 1701728447_2023_12_04_16.7.0-pre_gitlab_backup.tar
├── artifacts.tar.gz
├── backup_information.yml
├── 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
├── repositories
│ ├── manifests/
│ ├── @hashed/
│ └── @snippets/
├── terraform_state.tar.gz
└── uploads.tar.gz
backup_information.yml
파일
backup_information.yml
파일은 백업 스테이징 디렉터리에 저장되어 있는 백업 자체에 포함되지 않은 모든 백업 입력을 저장합니다. 백업이 생성된 시간, 백업을 생성한 GitLab 버전, 건너뛴 하위 작업과 같은 정보를 포함합니다.
이 정보는 일부 하위 작업에서 복원하는 방법 및 외부 서비스(예: 서버 측 리포지터리 백업)에 있는 데이터와 연결하는 방법을 결정하는 데 사용됩니다. 이 파일은 백업 스테이징 디렉터리에 저장됩니다.
데이터베이스 백업
데이터베이스 백업은 GitLab 백업 하위 작업인 db
에 의해 만들어지고 복원됩니다. 데이터베이스 하위 작업은 pg_dump
를 사용하여 SQL 덤프를 작성합니다. pg_dump
의 출력물은 압축된 SQL 파일을 만들기 위해 gzip
를 통해 파이핑됩니다. 이 파일은 백업 스테이징 디렉터리에 저장됩니다.
리포지터리 백업
리포지터리 백업은 GitLab 백업 하위 작업인 repositories
에 의해 만들어지고 복원됩니다. 리포지터리 하위 작업은 Gitaly 명령인 gitaly-backup
을 사용하여 Git 리포지터리 백업을 만듭니다:
- GitLab은
gitaly-backup
에게 백업해야 하는 리포지터리 디렉터리을 알려줍니다. - 그 후
gitaly-backup
은 각 리포지터리의 백업 데이터를 수집하기 위해 Gitaly에 일련의 RPC를 호출합니다. 이 데이터는 GitLab 백업 스테이징 디렉터리의 디렉터리 구조로 스트리밍되어집니다.
Gitaly 클러스터에 구성된 리포지터리는 독립적인 Gitaly와 동일한 방식으로 백업됩니다. Gitaly 클러스터가 gitaly-backup
에서 RPC 호출을 받으면, 자체 데이터베이스를 다시 빌드하는 책임이 있습니다. 즉, Gitaly 클러스터 데이터베이스를 별도로 백업할 필요가 없습니다. 백업은 RPC를 통해 작동하기 때문에 복제 요인에 관계없이 각 리포지터리는 한 번만 백업됩니다.
서버 측 리포지터리 백업
서버 측 리포지터리 백업을 리포지터리 백업으로 구성할 수 있습니다. 지정된 경우, gitaly-backup
은 각 리포지터리에 대해 백업을 만들기 위해 단일 RPC 호출을 수행합니다. 이 RPC는 리포지터리 데이터를 전송하지 않습니다. 대신, RPC는 해당 물리적 리포지터리를 저장하는 Gitaly 노드를 트리거하여 백업 데이터를 객제 스토리지에 직접 업로드합니다. RPC를 통해 데이터를 더 이상 Gitaly에서 전송하지 않기 때문에 서버 측 백업은 훨씬 더 적은 네트워크 전송을 필요로 하며 백업 Rake 작업을 실행하는 머신에 디스크 저장 공간을 필요로 하지 않습니다. 객체 스토리지에 저장된 백업은 백업 ID에 의해 만들어진 백업 아카이브와 연결됩니다.
```
All the sentences and the table under DETAILS section are not translated.
파일 백업
다음은 GitLab 백업 하위 작업이 파일을 백업합니다:
uploads
builds
artifacts
pages
lfs
terraform_state
registry
packages
ci_secure_files
이 파일 하위 작업은 작업에 특정한 디렉터리 내의 파일 집합을 결정합니다. 그런 다음, 이 파일 집합은 아카이브를 만들기 위해 tar
에 전달됩니다. 이 아카이브는 백업 스테이징 디렉터리에 압축된 tar 파일을 저장하기 위해 gzip
를 통해 파이프됩니다(디스크에 저장되지는 않음).
백업은 라이브 인스턴스에서 생성되기 때문에, tar가 아카이브를 만들려는 파일은 백업을 생성하는 동안 가끔 수정될 수 있습니다. 이 경우 대안 “복사” 전략을 사용할 수 있습니다. 이 전략을 사용하는 경우, rsync
를 먼저 사용하여 백업할 파일의 사본을 만듭니다. 그런 다음, 이러한 사본들은 일반적으로 tar
에 전달됩니다. 이 경우, 백업 Rake 작업을 실행하는 기계는 복사된 파일과 압축된 아카이브에 충분한 저장 공간을 가지고 있어야 합니다.