새 서버로 이전하기
GitLab 백업과 복원을 사용하여 인스턴스를 새 서버로 이전할 수 있습니다. 이 섹션에서는 단일 서버에서 실행 중인 GitLab 배포에 대한 전형적인 절차를 개요로 설명합니다. GitLab Geo를 실행 중이라면 Geo 재해 복구를 위한 계획된 장애 조치가 대안 옵션입니다.
경고: 새 서버와 예전 서버 양쪽에서 데이터 처리를 조정하지 않도록 주의하세요. 여러 서버가 동시에 연결되어 동일한 데이터를 처리할 수 있습니다. 예를 들어 수신 이메일을 사용할 때, 두 GitLab 인스턴스가 동시에 이메일을 처리하는 경우 둘 다 일부 데이터를 놓칠 수 있습니다. 이러한 문제는 패키지되지 않은 데이터베이스, 패키지되지 않은 Redis 인스턴스 또는 패키지되지 않은 Sidekiq와 같은 다른 서비스에서도 발생할 수 있습니다.
준비 사항:
- 이전에 이전한 시간이 좀 있으면 예정된 유지보수를 알릴 수 있도록 사용자에게 방송 메시지 배너를 고려하세요.
- 백업이 완료되고 최신 상태인지 확인하세요. 모든 관련 서버의 시스템 수준 백업을 만들거나, rm
과 같은 파괴적인 명령이 잘못 실행되는 경우를 대비하여 마이그레이션에 관여하는 모든 서버의 스냅숏을 찍으세요.
새 서버 준비
새 서버를 준비하려면:
- 중간자 공격 경고를 피하기 위해 SSH 호스트 키를 예전 서버에서 복사하세요. 예시 단계는 주요 사이트의 SSH 호스트 키 수동 복제를 참고하세요.
-
수신 이메일을 제외하고 GitLab을 설치하고 구성하세요:
- GitLab을 설치하세요.
- 예전 서버에서
/etc/gitlab
파일을 새 서버로 복사하고 필요에 따라 업데이트하세요. 자세한 내용은 Linux 패키지 설치 백업 및 복원 지침을 참조하세요. - 해당하는 경우 수신 이메일을 비활성화하세요.
-
백업 및 복원 후 초기 시작 시 새 CI/CD 작업을 차단하세요.
/etc/gitlab/gitlab.rb
를 편집하고 다음을 설정하세요:nginx['custom_gitlab_server_config'] = "location = /api/v4/jobs/request {\n deny all;\n return 503;\n }\n"
-
GitLab을 재구성하세요:
sudo gitlab-ctl reconfigure
-
불필요하고 의도하지 않은 데이터 처리를 피하기 위해 GitLab을 중지하세요:
sudo gitlab-ctl stop
-
새 서버에서 레디스 데이터베이스와 GitLab 백업 파일을 수신할 수 있도록 구성하세요:
sudo rm -f /var/opt/gitlab/redis/dump.rdb sudo chown <your-linux-username> /var/opt/gitlab/redis /var/opt/gitlab/backups
예전 서버에서 콘텐츠 준비 및 이전
- 예전 서버에 대한 최신 시스템 수준 백업 또는 스냅숏이 있는지 확인하세요.
- GitLab 에디션에서 지원하는 경우 유지보수 모드를 활성화하세요.
- 새 CI/CD 작업을 시작하지 못하게 차단하세요:
-
/etc/gitlab/gitlab.rb
를 편집하고 다음을 설정하세요:nginx['custom_gitlab_server_config'] = "location = /api/v4/jobs/request {\n deny all;\n return 503;\n }\n"
-
GitLab을 재구성하세요:
sudo gitlab-ctl reconfigure
-
- 주기적 백그라운드 작업을 비활성화하세요:
- 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택하세요.
- 왼쪽 사이드바에서 모니터링 > 백그라운드 작업을 선택하세요.
- Sidekiq 대시보드에서 Cron 탭을 선택한 다음 모두 비활성화를 선택하세요.
- 현재 실행 중인 CI/CD 작업이 완료될 때까지 기다리거나 완료되지 않은 작업이 손실될 수 있다고 받아 들이세요. 현재 실행 중인 작업을 보려면 왼쪽 사이드바에서 개요 > 작업을 선택한 다음 실행 중을 선택하세요.
- Sidekiq 작업이 완료될 때까지 기다리세요:
- 왼쪽 사이드바에서 모니터링 > 백그라운드 작업을 선택하세요.
- Sidekiq 대시보드에서 대기열을 선택한 다음 실시간 폴링을 선택하세요. 바쁨 및 대기 중이 0으로 줄어들 때까지 기다리세요. 이러한 대기열에는 사용자가 제출한 작업이 포함되어 있으며, 이러한 작업이 완료되기 전에 종료하면 작업이 손실될 수 있습니다. 마이그레이션 후 확인을 위해 Sidekiq 대시보드에 표시된 숫자를 메모하세요.
-
레디스 데이터베이스를 디스크에 플러시하고 마이그레이션에 필요한 서비스를 제외한 GitLab을 중지하세요:
sudo /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket save && sudo gitlab-ctl stop && sudo gitlab-ctl start postgresql && sudo gitlab-ctl start gitaly
-
GitLab 백업을 생성하세요:
sudo gitlab-backup create
-
다음 GitLab 서비스를 비활성화하고
/etc/gitlab/gitlab.rb
의 맨 아래에 다음을 추가하여 의도하지 않은 다시 시작을 방지하세요:alertmanager['enable'] = false gitlab_exporter['enable'] = false gitlab_pages['enable'] = false gitlab_workhorse['enable'] = false grafana['enable'] = false logrotate['enable'] = false gitlab_rails['incoming_email_enabled'] = false nginx['enable'] = false node_exporter['enable'] = false postgres_exporter['enable'] = false postgresql['enable'] = false prometheus['enable'] = false puma['enable'] = false redis['enable'] = false redis_exporter['enable'] = false registry['enable'] = false sidekiq['enable'] = false
-
GitLab을 재구성하세요:
sudo gitlab-ctl reconfigure
-
모든 것이 중지되었는지 확인하고 어떤 서비스도 실행 중이 아닌지 확인하세요:
sudo gitlab-ctl status
-
레디스를 중지하세요. 그리고 새 서버에서 Redis를 중지하세요. 레디스 데이터베이스 백업을 전송하기 전에:
sudo gitlab-ctl stop redis
-
레디스 데이터베이스 및 GitLab 백업을 새 서버로 전송하세요:
sudo scp /var/opt/gitlab/redis/dump.rdb <your-linux-username>@new-server:/var/opt/gitlab/redis sudo scp /var/opt/gitlab/backups/your-backup.tar <your-linux-username>@new-server:/var/opt/gitlab/backups
새 서버에서 데이터 복원
-
적절한 파일 시스템 권한을 복원하세요:
sudo chown gitlab-redis /var/opt/gitlab/redis sudo chown gitlab-redis:gitlab-redis /var/opt/gitlab/redis/dump.rdb sudo chown git:root /var/opt/gitlab/backups sudo chown git:git /var/opt/gitlab/backups/your-backup.tar
-
Redis를 시작하세요:
sudo gitlab-ctl start redis
- GitLab 백업을 복원하세요.
- Redis 데이터베이스가 올바르게 복원되었는지 확인하세요:
- 왼쪽 사이드바에서 아래쪽에 있는 관리 영역을 선택하세요.
- 왼쪽 사이드바에서 모니터링 > 백그라운드 작업을 선택하세요.
- Sidekiq 대시보드에서 숫자가 이전 서버에서 표시된 것과 일치하는지 확인하세요.
- 여전히 Sidekiq 대시보드 하에서, Cron을 선택한 후 모두 활성화를 선택하여 주기적 백그라운드 작업을 다시 활성화하세요.
- GitLab 인스턴스에서 읽기 전용 작업이 예상대로 작동하는지 테스트하세요. 예를 들어, 프로젝트 저장소 파일, 병합 요청, 이슈를 찾아보세요.
- 이전에 활성화된 경우 유지 보수 모드를 비활성화하세요.
- GitLab 인스턴스가 예상대로 작동하는지 테스트하세요.
- 해당되는 경우 수신 이메일을 다시 활성화하고 예상대로 작동하는지 확인하세요.
- DNS 또는 로드 밸런서를 새 서버를 가리키도록 업데이트하세요.
-
이전에 추가한 사용자 정의 NGINX 구성을 제거하여 새 CI/CD 작업이 시작되지 않도록 차단을 해제하세요:
# 다음 줄이 제거되어야 합니다 nginx['custom_gitlab_server_config'] = "location = /api/v4/jobs/request {\n deny all;\n return 503;\n }\n"
-
GitLab을 다시 구성하세요:
sudo gitlab-ctl reconfigure
- 스케줄된 유지 관리 브로드캐스트 메시지 배너를 제거하세요.