외부 PostgreSQL 인스턴스를 사용하는 Geo

Tier: 프리미엄, 얼티밋 Offering: Self-Managed

이 문서는 Linux 패키지로 관리되지 않는 PostgreSQL 인스턴스를 사용하는 경우 관련이 있습니다. 이에는 클라우드 관리형 인스턴스나 수동으로 설치하고 구성한 PostgreSQL 인스턴스가 포함됩니다.

Linux 패키지가 제공하는 PostgreSQL 버전 중 하나를 사용하여 버전 불일치를 피하십시오 경우 Geo 사이트를 다시 구축해야 하는 경우를 대비합니다.

참고: GitLab Geo를 사용하는 경우, Linux 패키지를 사용하거나 검증된 클라우드 관리형 인스턴스를 사용하는 것을 강력히 추천합니다. 우리는 활발하게 이들을 기반으로 개발 및 테스트하고 있으며, 다른 외부 데이터베이스와의 호환성을 보장할 수 없습니다.

주(primary) 사이트

  1. Primary 사이트에서 Rails 노드에 SSH로 로그인하고 루트로 전환하세요:

    sudo -i
    
  2. /etc/gitlab/gitlab.rb 파일을 편집하고 다음을 추가하세요:

    ##
    ## Geo Primary 역할
    ## - Geo를 활성화하기 위해 종속 플래그를 자동으로 설정합니다.
    ##
    roles ['geo_primary_role']
    
    ##
    ## Geo 사이트의 고유 식별자. 자세한 내용은
    ## https://docs.gitlab.com/ee/administration/geo_sites.html#common-settings를 참조하세요.
    ##
    gitlab_rails['geo_node_name'] = '<site_name_here>'
    
  3. 변경 사항이 적용되도록 Rails 노드를 다시 구성하세요:

    gitlab-ctl reconfigure
    
  4. Rails 노드에서 아래 명령을 실행하여 사이트를 primary 사이트로 정의하세요:

    gitlab-ctl set-geo-primary-node
    

    이 명령은 /etc/gitlab/gitlab.rb에서 정의한 external_url을 사용합니다.

외부 데이터베이스를 복제하도록 구성

외부 데이터베이스를 설정하려면 다음 중 하나를 수행할 수 있습니다:

  • 직접 스트리밍 복제를 설정합니다(예: Amazon RDS 또는 Linux 패키지로 관리되지 않는 베어 메탈).
  • 리눅스 패키지 설치를 수동으로 구성합니다.

클라우드 공급자의 도구를 활용하여 주 데이터베이스를 복제합니다

AWS EC2에서 RDS를 사용하는 주 사이트가 설정되어 있다고 가정합니다. 이제 다른 지역에 읽기 전용 레플리카를 만들고 복제 프로세스가 AWS에서 관리되도록 할 수 있습니다. 보안 목록, 서브넷 및 보안 그룹을 필요에 따라 설정하여 보조 Rails 노드가 데이터베이스에 액세스할 수 있도록 하십시오.

다음 안내에 따라 일반 클라우드 공급자용 읽기 전용 레플리카를 만드는 방법을 상세히 설명하고 있습니다:

읽기 전용 레플리카가 설정되면 보조 사이트를 구성하는 단계로 넘어갈 수 있습니다.

경고: 예를 들어 온프레미스 주 데이터베이스에서 RDS 보조 데이터베이스로 복제하도록 AWS Database Migration ServiceGoogle Cloud Database Migration Service와 같은 논리적 복제 방법 사용은 지원되지 않습니다.

주 데이터베이스를 수동으로 복제로 구성합니다

geo_primary_role`는 주(primary) 노드의 데이터베이스를 ‘pg_hba.conf’와 ‘postgresql.conf’를 수정하여 복제하도록 구성합니다. 외부 데이터베이스 구성을 수동으로 다음과 같이 변경하고, PostgreSQL을 재시작하여 변경 사항이 적용되도록 하십시오:

##
## Geo Primary Role
## - pg_hba.conf
##
host    all         all               <trusted primary IP>/32       md5
host    replication gitlab_replicator <trusted primary IP>/32       md5
host    all         all               <trusted secondary IP>/32     md5
host    replication gitlab_replicator <trusted secondary IP>/32     md5
##
## Geo Primary Role
## - postgresql.conf
##
wal_level = hot_standby
max_wal_senders = 10
wal_keep_segments = 50
max_replication_slots = 1 # 이중화된 인스턴스 수
hot_standby = on

보조 사이트

복제 데이터베이스 수동 구성

외부 복제 데이터베이스의 pg_hba.confpostgresql.conf를 수동으로 다음과 같이 구성한 후 변경 사항이 적용되도록 하려면 PostgreSQL을 다시 시작하십시오.

##
## Geo Secondary Role
## - pg_hba.conf
##
host    all         all               <trusted secondary IP>/32     md5
host    replication gitlab_replicator <trusted secondary IP>/32     md5
host    all         all               <trusted primary IP>/24       md5
##
## Geo Secondary Role
## - postgresql.conf
##
wal_level = hot_standby
max_wal_senders = 10
wal_keep_segments = 10
hot_standby = on

보조 사이트에서 외부 읽기 전용 복제본 사용하도록 구성

Linux 패키지 설치를 통해 geo_secondary_role은 다음과 같은 세 가지 주요 기능을 합니다.

  1. 복제 데이터베이스 구성
  2. 추적 데이터베이스 구성
  3. Geo Log Cursor를 활성화합니다 (이 섹션에서 다루지 않음).

외부 읽기 전용 복제본 데이터베이스에 연결하고 로그 커서를 활성화하려면:

  1. 보조 사이트의 각 Rails, Sidekiq 및 Geo Log Cursor 노드로 SSH로 로그인한 후 루트로 전환하십시오:

    sudo -i
    
  2. /etc/gitlab/gitlab.rb을 편집하고 다음을 추가하십시오.

    ##
    ## Geo Secondary role
    ## - configure dependent flags automatically to enable Geo
    ##
    roles ['geo_secondary_role']
    
    # note this is shared between both databases,
    # make sure you define the same password in both
    gitlab_rails['db_password'] = '<your_password_here>'
    
    gitlab_rails['db_username'] = 'gitlab'
    gitlab_rails['db_host'] = '<database_read_replica_host>'
    
    # 외부 PostgreSQL을 사용하기 때문에 번들된 Omnibus PostgreSQL은 비활성화합니다
    postgresql['enable'] = false
    
  3. 파일을 저장하고 GitLab을 다시 구성합니다.

추적 데이터베이스 구성

보조 사이트는 복제 상태를 추적하고 잠재적인 복제 문제에서 자동으로 복구하기 위해 별도의 PostgreSQL 설치를 사용합니다. Linux 패키지는 roles ['geo_secondary_role']이 설정되면 추적 데이터베이스를 자동으로 구성합니다. Linux 패키지 설치와 관련하여 외부에서 이 데이터베이스를 실행하려면 다음 지침을 사용하십시오.

클라우드 관리형 데이터베이스 서비스

추적 데이터베이스에 클라우드 관리형 서비스를 사용하는 경우, 추적 데이터베이스 사용자(기본값으로 gitlab_geo)에게 추가 역할을 부여해야할 수 있습니다.

이것은 설치 및 업그레이드 중에 확장 기능을 설치하거나 향후 GitLab 업그레이드 중에 발생할 수 있는 문제에 대해 자동으로 확장을 설치하고 문제를 읽는 대신의 대안입니다.

참고: Amazon RDS를 추적 데이터베이스로 사용하려면 보조 데이터베이스에 액세스할 수 있도록하십시오. PostgreSQL 데이터베이스에서는 보내기 규칙이 적용되지 않기 때문에 동일한 보안 그룹을 할당하는 것만으로는 충분하지 않습니다. 따라서 5432번 포트에서 추적 데이터베이스로부터의 모든 TCP 트래픽을 허용하는 입력 규칙을 명시적으로 추가해야합니다.

추적 데이터베이스 생성

PostgreSQL 인스턴스에서 추적 데이터베이스를 생성하고 구성합니다.

  1. 데이터베이스 요구 사항 문서에 따라 PostgreSQL을 설정하십시오.
  2. 원하는 패스워드로 gitlab_geo 사용자를 설정하고, gitlabhq_geo_production 데이터베이스를 생성하고 사용자를 데이터베이스 소유자로 설정하십시오. 이러한 설정 예시는 자체 컴파일 설치 문서에서 확인할 수 있습니다.
  3. 지정된 PostgreSQL과 트래킹 데이터베이스와 통신하도록 보조 사이트가 수동으로 pg_hba.conf를 변경한 것을 확인하십시오. 변경 사항이 적용되도록 PostgreSQL을 다시 시작하십시오.

    ##
    ## Geo Tracking Database Role
    ## - pg_hba.conf
    ##
    host    all         all               <trusted tracking IP>/32      md5
    host    all         all               <trusted secondary IP>/32     md5
    

GitLab 구성

이 데이터베이스를 사용하도록 GitLab을 구성합니다. 이 단계는 Linux 패키지 및 Docker 배포용입니다.

  1. GitLab secondary 서버에 SSH로 접속하고 root로 로그인합니다:

    sudo -i
    
  2. PostgreSQL 인스턴스가 있는 기계의 연결 매개변수 및 자격 증명을 /etc/gitlab/gitlab.rb 파일을 편집합니다:

    geo_secondary['db_username'] = 'gitlab_geo'
    geo_secondary['db_password'] = '<your_password_here>'
    
    geo_secondary['db_host'] = '<tracking_database_host>'
    geo_secondary['db_port'] = <tracking_database_port>      # 올바른 포트로 변경
    geo_postgresql['enable'] = false     # 내부 관리형 인스턴스를 사용하지 않음
    
  3. 파일을 저장하고 GitLab 다시 구성을 수행합니다.

데이터베이스 스키마 설정

Linux 패키지 및 Docker 배포용으로 위의 단계에서의 구성은 이러한 단계를 자동으로 처리해야 합니다.

  1. 이 작업은 데이터베이스 스키마를 만듭니다. 데이터베이스 사용자가 슈퍼유저여야 합니다.

    sudo gitlab-rake db:create:geo
    
  2. Rails 데이터베이스 마이그레이션 (스키마 및 데이터 업데이트)은 다시 구성에서도 수행됩니다. geo_secondary['auto_migrate'] = false로 설정된 경우 또는 스키마가 수동으로 생성된 경우 이 단계가 필요합니다.

    sudo gitlab-rake db:migrate:geo