Bitbucket 데이터 센터에서 무결성 검사 실행

무결성 검사 정보

Bitbucket Data Center를 사용하면 데이터베이스와 홈 디렉터리 간의 잠재적인 불일치를 스캔하는 무결성 검사를 수행하고 필요한 경우 이를 해결하여 풀 요청과 리포지토리 상태가 서로 완전히 일치하도록 할 수 있습니다. 예를 들어 백업에서 복원한 후 데이터베이스와 홈 디렉토리에 불일치가 있을 수 있다고 의심되는 모든 상황에서 무결성 검사를 수행할 수 있습니다.

무결성 검사 실행

무결성 검사를 실행하려면 다음 줄을 ${BITBUCKET_HOME}/shared/bitbucket.properties에 추가합니다.

disaster.recovery=true

그런 다음 Bitbucket을 시작합니다. 원하는 경우 모든 클러스터 노드에서 Bitbucket을 시작할 수 있습니다.

Bitbucket은 시작한 후 클러스터 노드 하나에 대해서만 무결성 검사를 실행합니다. 무결성 검사를 완료하는 데 몇 분 정도 걸릴 수 있지만 백그라운드에서 실행됩니다. 무결성 검사가 실행되는 동안에도 사용자는 여전히 로그인하고, 시스템과 상호 작용하며, 저장소에서 호스팅 작업을 수행할 수 있습니다.

무결성 검사 실행 중지

Bitbucket을 복원한 후 무결성 검사가 실행되고 정상 작업을 다시 시작한 후에는 다음에 인스턴스를 다시 시작할때 무결성 검사가 불필요하게 실행되지 않도록 bitbucket.properties파일에서 disaster.recovery속성을 해제합니다.

disaster.recovery=false

무결성 검사가 찾는 항목

무결성 검사(discovery.recoverytrue로 설정된 경우 실행)는 인스턴스에서 데이터베이스와 홈 디렉토리 간의 불일치를 검사하며, 데이터베이스와 파일 시스템의 스냅샷이 약간 다른 시간에 생성되었을 때 발생할 수 있습니다.

무결성 검사가 필요한 이유

Bitbucket이 실행 중일 때는 데이터베이스와 홈 디렉토리를 지속적으로 수정하지만 거의 모든 상황에서 두 데이터 소스는 서로 일치합니다(UI가 느리게 실행되더라도).

그러나 데이터베이스 및 홈 디렉토리 스냅샷이 독립적으로 생성되고 두 스냅샷 간에 데이터베이스 및 홈 디렉토리에 영향을 미치는 업데이트가 발생할 경우 무결성 검사에서 불일치가 발견될 수 있습니다. 이러한 상황이 발생할 수 있는 예는 스냅샷 간에 꺼내기 요청이 병합된 경우입니다. 데이터베이스와 홈 디렉토리의 스냅샷을 충분히 가깝게 만들면 불일치가 발생할 가능성이 작습니다.

무결성 검사에서 감지할 수 없는 항목

Git의 불일치 : 무결성 검사는 데이터베이스와 홈 디렉토리 사이의 불일치만 탐지하며, 리포지토리 자체 내의 내부 불일치는 탐지하지 않는다는 점에 유의해야 합니다.

Bitbucket 인스턴스의 리포지토리가 다른 방법으로 손상되었다고 의심될 경우 개별 리포지토리를 진단하고 복원하기 위해 수동으로 git fsck를 실행해야 할 수 있습니다.

백업을 수행할 때 데이터베이스/홈 디렉토리에 없는 정보 : Integrity Checker는 데이터베이스 및 파일 시스템에서 리포지토리의 상태 또는 꺼내기 요청 간의 불일치를 감지하고 무결성을 복원하기 위해 조정할 수 있지만 백업이 수행되었을 때 데이터베이스 또는 홈 디렉토리에 없는 정보는 재구성할 수 없습니다.

즉, 백업을 매시간마다 수행할 경우 최신 백업에서 복원할 때 사용자가 최대 한 시간 동안 작업하지 못할 수 있습니다. 또한 최신 데이터베이스와 파일 시스템 스냅샷을 1분 간격으로 만든 경우 이 시간에 수행된 꺼내기 요청의 변경 내용이 손실될 수 있으며 무결성 검사기로 재구성할 수 없습니다.

백업 시 불일치가 발생하지 않도록 하는 가장 좋은 방법은 파일 시스템과 데이터베이스 스냅샷을 가능한 한 가까운 시간에 함께 작성하도록 하거나 데이터베이스 공급업체의 "시점 복구" 기능을 사용하여 데이터베이스를 파일 시스템 스냅샷이 생성된 시점으로 복원하는 것입니다.

무결성 검사 프로세스의 피드백

시스템 관리자에게 무결성 검사 프로세스의 상태/결과를 나타내는 경고 또는 정보 배너가 표시됩니다. 이 배너는 다음 네 개 상태중 하나에 있을 수 있습니다.

  • 무결성 검사가 실행 중입니다. 불일치가 발견되지 않았습니다.

  • 무결성 검사가 실행 중입니다. 하나 이상의 불일치가 발견되었습니다.

  • 무결성 검사 완료, 불일치 없음

  • 무결성 검사 완료, 불일치 발견

무결성 검사에서 불일치가 발견된 경우

무결성 검사가 데이터베이스와 홈 디렉토리 간에 불일치를 발견하면 자동으로 조정을 수행하여 둘 사이의 무결성을 복원합니다. 예를 들어, 백업 프로세스 중에 다른 사용자가 파일 시스템 스냅샷이 발생하기 전에 꺼내기 요청을 병합하면 해당 백업이 복원됩니다. 이 경우 무결성 검사에서 꺼내기 요청이 일관성이 없는 상태임을 확인하고 데이터베이스의 꺼내기 요청을 디스크의 실제 상태와 일치하도록 조정합니다. 이 경우 조정은 꺼내기 요청의 작업 탭에 표시되며, 이는 무결성 검사기 서비스 사용자 덕분입니다. 무결성 검사기에 의해 수행되는 꺼내기 요청에 대한 모든 활동은 일반적인 알림도 생성합니다.

무결성 검사기는 불일치가 발생할 때마다 응용 프로그램 로그에 메시지를 작성합니다. 무결성 검사 리포터에 대한 atlassian-bitbucket.log 필터링은 모든 관련 로그 항목을 반환합니다.   

무결성 검사 로그 항목을 읽고 불일치가 발생한 이유를 파악해야 합니다. 불일치 오류 메시지는 다음과 같습니다.

The repository PROJ/repo[1] exists but the directory /repositories/1 is missing. To restore integrity, an empty repository directory was created.

또는

또는

이유 중 하나가 될 수 있는 위치

  • 동일한 참조에 대한 공개 꺼내기 요청이 이미 있습니다.

  • 예기치 않게 없어진 commit

  • fromRef 를 확인할 수 없습니다.

 

더 많은 시간에서 많은 불일치가 발견되면 데이터베이스와 홈 디렉토리 스냅샷이 의도한 시간보다 더 멀리 떨어져 있음을 나타낼 수 있습니다. 이러한 불일치가 발생하지 않도록 하려면 재해 복구 계획을 정기적으로 테스트하고 백업 및 복원 프로세스가 데이터베이스 및 홈 디렉토리 스냅샷을 가능한 한 가까운 시간에 캡처하는지 확인하십시오.

범위 재조정 후 꺼내기 요청 업데이트

표준 Bitbucket 서버 범위 재조정 프로세스는 이러한 경우 무결성 검사 리포터가 응용 프로그램 로그에 메시지를 기록하지 않고 모든 꺼내기 요청 공동작업자에게 알림을 보내는 다수의 꺼내기 요청 불일치를 정상화시킵니다.

예제 시나리오

다음은 무결성 검사기가 감지하고 해결할 수 있는 몇 가지 시나리오입니다.

무결성 검사

파일 시스템 상태

데이터베이스 상태

결과

무결성 검사

파일 시스템 상태

데이터베이스 상태

결과

최근에 병합된 꺼내기 요청

꺼내기 요청 병합

꺼내기 요청이 '열림'으로 표시됩니다.

무결성 검사기가 꺼내기 요청을 원격으로 병합된 것으로 표시합니다.

참고: 병합 활동만 무결성 검사기 사용자의 몫이며, 병합 커밋은 원래 병합에 의해 작성된 상태로 유지됩니다.

꺼내기 요청이 병합되지 않음

꺼내기 요청이 'merged'로 표시됨

무결성 검사기가 꺼내기 요청을 다시 엽니다.

리포지토리 만들기

리포지토리 #2가 없습니다.

리포지토리 #2가 있습니다.

파일 시스템에 빈 리포지토리가 만들어집니다.