백그라운드 마이그레이션 문제 해결
GitLab v19.3Offering: GitLab Self-Managed
요약
GitLab 버전 14.2 이상으로 업데이트할 때 데이터베이스 마이그레이션이 다음과 같은 메시지와 함께 실패할 수 있습니다: 롤백하고 필요한 업그레이드 경로를 따르려면: 롤 포워드 프로세스는 다운타임이 필요한지 여부에 따라 다릅니다.
완료되지 않은 배치 백그라운드 마이그레이션으로 인한 데이터베이스 마이그레이션 실패#
GitLab 버전 14.2 이상으로 업데이트할 때 데이터베이스 마이그레이션이 다음과 같은 메시지와 함께 실패할 수 있습니다:
StandardError: An error has occurred, all later migrations canceled:
Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active':
{:job_class_name=>"CopyColumnUsingBackgroundMigrationJob",
:table_name=>"push_event_payloads",
:column_name=>"event_id",
:job_arguments=>[["event_id"],
["event_id_convert_to_bigint"]]
}
이 오류를 해결하려면:
- 14.2에 대한 버전별 업그레이드 지침을 따랐다면 배치 백그라운드 마이그레이션을 수동으로 완료합니다.
- 해당 지침을 따르지 않았다면 다음 중 하나를 수행해야 합니다:
- 14.2+로 업데이트하기 전에 필요한 버전 중 하나를 통해 롤백하고 업그레이드합니다.
- 롤 포워드하여 현재 버전을 유지하면서 배치 마이그레이션이 성공적으로 완료되도록 수동으로 확인합니다.
롤백하고 필요한 업그레이드 경로 따르기#
롤백하고 필요한 업그레이드 경로를 따르려면:
- 이전에 설치된 버전으로 롤백하고 복원합니다.
- 14.2+로 업데이트하기 전에 14.0.5 또는 14.1로 업데이트합니다.
- 배치 백그라운드 마이그레이션의 상태를 확인하고 다시 업그레이드를 시도하기 전에 모두 완료됨으로 표시되어 있는지 확인합니다. 활성 상태로 표시된 것이 남아 있으면 수동으로 완료합니다.
롤 포워드하고 업그레이드된 버전에서 마이그레이션 완료#
롤 포워드 프로세스는 다운타임이 필요한지 여부에 따라 다릅니다.
다운타임이 있는 배포의 경우#
모든 배치 백그라운드 마이그레이션을 실행하는 데 GitLab 설치 규모에 따라 상당한 시간이 걸릴 수 있습니다.
-
데이터베이스에서 배치 백그라운드 마이그레이션의 상태를 확인하고 상태 쿼리가 행을 반환하지 않을 때까지 적절한 인수로 수동으로 실행합니다.
-
모든 마이그레이션 상태가 완료로 표시되면 설치에 대한 마이그레이션을 다시 실행합니다.
-
GitLab 업그레이드에서 데이터베이스 마이그레이션을 완료합니다:
sudo gitlab-rake db:migrate -
재구성을 실행합니다:
sudo gitlab-ctl reconfigure -
설치에 대한 업그레이드를 완료합니다.
다운타임 없는 배포의 경우#
실패하는 마이그레이션은 포스트 배포 마이그레이션이므로 업그레이드된 버전의 실행 중인 인스턴스에서 계속 유지하면서 배치 백그라운드 마이그레이션이 완료될 때까지 기다릴 수 있습니다.
- 오류 메시지에서 배치 백그라운드 마이그레이션의 상태를 확인하고 완료됨으로 나열되어 있는지 확인합니다. 마이그레이션이 여전히 활성 상태인 경우:
- 완료될 때까지 기다립니다.
- 수동으로 완료합니다.
- 나머지 포스트 배포 마이그레이션이 완료될 수 있도록 설치에 대한 마이그레이션을 다시 실행합니다.
고급 검색 마이그레이션이 중단됨#
고급 검색 마이그레이션이 보류 중인 문제로 중단된 경우 중단된 마이그레이션을 다시 시도합니다.
보류 중인 고급 검색 마이그레이션이 모두 완료되기 전에 GitLab을 업그레이드하면 새 버전에서 제거된 보류 중인 마이그레이션은 실행하거나 다시 시도할 수 없습니다. 이 경우 인덱스를 처음부터 다시 생성해야 합니다.
오류: Elasticsearch version not compatible#
Elasticsearch 또는 OpenSearch 버전이 GitLab과 호환되지 않는 경우 데이터 손실을 방지하기 위해 인덱싱이 일시 중지되고 이 메시지가 elasticsearch.log에 기록됩니다.
이 문제를 해결하려면 Elasticsearch 또는 OpenSearch 버전이 GitLab과 호환되는지 확인합니다.
호환되는 버전을 사용 중이라면 인덱싱을 재개합니다.