
실행 중인 GitLab 인스턴스에 다음 명령을 사용하여 전체 백업 아카이브를 생성하도록 요청하는 경우 gitlab-rake gitlab:backup:create
:
- GitLab은 애플리케이션 상태를 고정하기 위해 어떤 작업을 수행합니까?
- 일관되지 않은 상태를 구현하는 기술적으로 작동하는 백업을 생성할 위험이 있습니까?
상세히:
- 백업이 생성되는 동안 새 커밋이 푸시되면 어떻게 되나요?
- 일반적으로 백업 중에 수정이 시작되면 어떤 일이 발생할 수 있습니까?
- 데이터베이스에 적용하거나 파일/저장소에 쓰기 위해 변경 사항을 대기열에 넣는 캐시가 있습니까?
수정 중인 저장소를 보관할 때나 트랜잭션을 실행하는 데이터베이스에서 백업이 수행될 때 어떤 일이 발생하는지 현재로서는 알 수 없습니다.
오늘 GitLab의 백업코드를 쭉 읽었습니다gitlab.com/gitlab-org/gitlab-ce/tree/master/lib/backup하지만 내 질문에 대한 힌트를 찾을 수 없습니다.저는 Ruby로 코딩하지 않아서 도움이 되지 않습니다...
GitLab은 tar
백업할 파일에 대해 명령을 실행하기만 하면 됩니다.
GitLab 문서에서docs.gitlab.com/ee/raketasks/backup_restore.html#backup-strategy-option다음과 같이 명시되어 있습니다.
tar가 데이터를 읽는 동안 데이터가 변경되면 읽는 동안 파일이 변경되어 오류 파일이 발생할 수 있으며 이로 인해 백업 프로세스가 실패하게 됩니다. 이 문제를 해결하기 위해 8.17에는 복사라는 새로운 백업 전략이 도입되었습니다. 이 전략은 tar 및 gzip을 호출하기 전에 데이터 파일을 임시 위치에 복사하여 오류를 방지합니다.
인수 STRATEGY=copy
는 를 사용하여 아카이브를 생성하기 전에 모든 파일을 복사하는 명령을 gitlab-rake gitlab:backup:create
실행 합니다 .rsync -a
tar
문서에 대한 나의 이해에 따르면 copy
GitLab 전략을 사용하면 기술적으로 손상된 아카이브를 생성하지 않으며 생성에 실패하지 않을 것입니다. 이 전략을 사용하면 생성된 아카이브를 복원할 수 있다고 가정하지만 데이터의 일관성 상태는 어떻습니까?
백업 아카이브가 GitLab 인스턴스의 일관되고 깨끗한 스냅샷 상태를 구현하는지 확인할 수 있나요?
이와 관련하여 문서에서 어떤 정보도 찾을 수 없습니다.
중단 없이 GitLab을 백업하고 싶습니다.
통합 백업 메커니즘을 사용하는 대신 GitLab을 몇 초 동안 중지하고 LVM 볼륨이나 파일 시스템의 스냅샷을 찍을 수 있다는 것을 알고 있지만 GitLab을 중단하고 싶지는 않습니다.
GitLab의 백업을 실행하여 postgresql
하나를 제외한 모든 서비스를 중단할 수 있으므로 GitLab의 통합 메커니즘으로 백업하는 동안 수정이 발생할 수 없지만 여전히 일정 기간 동안 사용자에게 서비스를 중단해야 합니다.
보너스: 내 질문은 LVM 볼륨이나 파일 시스템의 스냅샷에도 적용됩니다!
답변1
Gitlab의 일관된 백업에 대해 많은 질문이 있지만 좋은 답변을 찾지 못했습니다.
몇 가지 질문:
- https://stackoverflow.com/questions/24066283/how-to-make-a-condependent-gitlab-backup
- https://stackoverflow.com/questions/15825735/gitlab-is-the-backup-rake-task-atomic
나는 당신을 인용할 수 있습니다@SørenLøvborg님의 답변이 맞는 것 같습니다.
저장소 자체는 를 사용하여 백업되므로
git bundle
안전해야 합니다. 업로드는 간단한 파일이고 한 번만 작성하면 문제가 발생하지 않습니다. 데이터베이스는 저장소 및 파일과 완벽하게 동기화되지 않을 수 있지만 데이터 손실을 유발할 수 있는 방식은 아닙니다. 전체적으로 GitLab이 실행되는 동안 백업을 수행하는 것은 원자적이지 않더라도 완전히 안전해 보입니다.
편집하다:이미 공식적인 답변을 받았습니다.Gitlab 팀.