다른 PostgreSQL 인스턴스로 GitLab 데이터베이스 이동하기

Tier: Free, Premium, Ultimate Offering: Self-managed

가끔은 데이터베이스를 한 PostgreSQL 인스턴스에서 다른 인스턴스로 이동해야 할 필요가 있습니다. 예를 들어, AWS Aurora를 사용하고 있고 데이터베이스 로드 밸런싱을 준비 중이라면 데이터베이스를 RDS for PostgreSQL로 이동해야 합니다.

다른 인스턴스로 데이터베이스를 이동하려면:

  1. 소스 및 대상 PostgreSQL 엔드포인트 정보를 수집합니다:

    SRC_PGHOST=<소스 postgresql 호스트>
    SRC_PGUSER=<소스 postgresql 사용자>
    
    DST_PGHOST=<대상 postgresql 호스트>
    DST_PGUSER=<대상 postgresql 사용자>
    
  2. GitLab을 중지합니다:

    sudo gitlab-ctl stop
    
  3. 소스에서 데이터베이스를 덤프합니다:

    /opt/gitlab/embedded/bin/pg_dump -h $SRC_PGHOST -U $SRC_PGUSER -c -C -f gitlabhq_production.sql gitlabhq_production
    /opt/gitlab/embedded/bin/pg_dump -h $SRC_PGHOST -U $SRC_PGUSER -c -C -f praefect_production.sql praefect_production
    

    참고: 드물게, pg_dump를 실행한 후에 데이터베이스 성능 문제가 발생할 수 있습니다. 이는 pg_dump에 쿼리 계획 결정에 사용되는 통계가 포함되지 않기 때문입니다. 복원 후에 성능이 저하되면 문제가 되는 쿼리를 찾고, 해당 쿼리에서 사용하는 테이블에 대해 ANALYZE를 실행하여 문제를 해결하십시오.

  4. 대상으로 데이터베이스를 복원합니다 (동일한 이름을 가진 기존 데이터베이스를 덮어씁니다):

    /opt/gitlab/embedded/bin/psql -h $DST_PGHOST -U $DST_PGUSER -f praefect_production.sql postgres
    /opt/gitlab/embedded/bin/psql -h $DST_PGHOST -U $DST_PGUSER -f gitlabhq_production.sql postgres
    
  5. 선택 사항: PgBouncer를 사용하지 않는 데이터베이스에서 PgBouncer를 사용하는 데이터베이스로 마이그레이션 하는 경우, 응용 프로그램 데이터베이스(보통 gitlabhq_production)에 수동으로 pg_shadow_lookup 함수를 추가해야 합니다.
  6. /etc/gitlab/gitlab.rb 파일에서 대상 PostgreSQL 인스턴스의 적절한 연결 세부 정보로 GitLab 응용 프로그램 서버를 구성합니다:

    gitlab_rails['db_host'] = '<대상 postgresql 호스트>'
    

    GitLab 다중 노드 설정에 대한 자세한 정보는 참조 아키텍처를 참조하세요.

  7. 변경 사항이 적용되려면 재구성합니다:

    sudo gitlab-ctl reconfigure
    
  8. GitLab을 다시 시작합니다:

    sudo gitlab-ctl start