GitLab은 생성된 백업 아카이브가 애플리케이션의 깨끗한 상태를 구현하는지 어떻게 확인합니까?

GitLab은 생성된 백업 아카이브가 애플리케이션의 깨끗한 상태를 구현하는지 어떻게 확인합니까?

실행 중인 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 -atar

문서에 대한 나의 이해에 따르면 copyGitLab 전략을 사용하면 기술적으로 손상된 아카이브를 생성하지 않으며 생성에 실패하지 않을 것입니다. 이 전략을 사용하면 생성된 아카이브를 복원할 수 있다고 가정하지만 데이터의 일관성 상태는 어떻습니까?

백업 아카이브가 GitLab 인스턴스의 일관되고 깨끗한 스냅샷 상태를 구현하는지 확인할 수 있나요?

이와 관련하여 문서에서 어떤 정보도 찾을 수 없습니다.


중단 없이 GitLab을 백업하고 싶습니다.

통합 백업 메커니즘을 사용하는 대신 GitLab을 몇 초 동안 중지하고 LVM 볼륨이나 파일 시스템의 스냅샷을 찍을 수 있다는 것을 알고 있지만 GitLab을 중단하고 싶지는 않습니다.

GitLab의 백업을 실행하여 postgresql하나를 제외한 모든 서비스를 중단할 수 있으므로 GitLab의 통합 메커니즘으로 백업하는 동안 수정이 발생할 수 없지만 여전히 일정 기간 동안 사용자에게 서비스를 중단해야 합니다.


보너스: 내 질문은 LVM 볼륨이나 파일 시스템의 스냅샷에도 적용됩니다!

답변1

Gitlab의 일관된 백업에 대해 많은 질문이 있지만 좋은 답변을 찾지 못했습니다.

몇 가지 질문:

나는 당신을 인용할 수 있습니다@SørenLøvborg님의 답변이 맞는 것 같습니다.

저장소 자체는 를 사용하여 백업되므로 git bundle안전해야 합니다. 업로드는 간단한 파일이고 한 번만 작성하면 문제가 발생하지 않습니다. 데이터베이스는 저장소 및 파일과 완벽하게 동기화되지 않을 수 있지만 데이터 손실을 유발할 수 있는 방식은 아닙니다. 전체적으로 GitLab이 실행되는 동안 백업을 수행하는 것은 원자적이지 않더라도 완전히 안전해 보입니다.


편집하다:이미 공식적인 답변을 받았습니다.Gitlab 팀.

관련 정보