외부 PostgreSQL 인스턴스를 사용한 Geo

Tier: Premium, Ultimate Offering: Self-Managed

이 문서는 Linux 패키지로 관리되지 않는 PostgreSQL 인스턴스를 사용하는 경우에 관련됩니다. 이는 클라우드 관리형 인스턴스, 또는 매뉴얼으로 설치하고 구성한 PostgreSQL 인스턴스를 포함합니다.

Geo 사이트를 다시 구축해야 할 경우 버전 불일치를 피하기 위하여 Linux 패키지가 제공하는 PostgreSQL 버전 중 하나를 사용하는지 확인하세요.

note
GitLab Geo를 사용하는 경우 Linux 패키지를 사용하거나 확인된 클라우드 관리형 인스턴스를 사용하는 것을 강력히 권장합니다. 우리는 다른 외부 데이터베이스와의 호환성을 보장할 수 없습니다.

기본 사이트

  1. 기본 사이트의 Rails 노드에 SSH로 root로 로그인하세요:

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

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

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

    gitlab-ctl set-geo-primary-node
    

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

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

외부 데이터베이스를 설정하는 방법은 다음 중 하나를 선택할 수 있습니다:

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

클라우드 제공 업체의 도구를 활용하여 기본 데이터베이스를 복제하세요

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

다음 지침은 일반적인 클라우드 공급 업체의 읽기 전용 레플리카를 만드는 방법에 대해 설명합니다:

읽기 전용 레플리카가 설정되면 보조 사이트를 구성할 수 있습니다.

caution
예를 들어 온프레미스 기본 데이터베이스에서 RDS 보조 데이터베이스로 복제하는 등의 논리적 복제 방법을 사용하는 것은 지원되지 않습니다.

기본 데이터베이스를 매뉴얼으로 구성

geo_primary_role기본 노드의 데이터베이스를 pg_hba.confpostgresql.conf를 변경하여 복제하도록 설정합니다. 외부 데이터베이스 구성을 위해 다음 구성을 매뉴얼으로 변경하고 이후에 PostgreSQL을 다시 시작하여 변경 사항이 적용되도록하세요:

##
## Geo 기본 역할
## - pg_hba.conf
##
host    all         all               <신뢰할 수 있는 기본 IP>/32       md5
host    replication gitlab_replicator <신뢰할 수 있는 기본 IP>/32       md5
host    all         all               <신뢰할 수 있는 보조 IP>/32     md5
host    replication gitlab_replicator <신뢰할 수 있는 보조 IP>/32     md5
##
## Geo 기본 역할
## - 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 보조 역할
## - pg_hba.conf
##
host    all         all               <신뢰할 수 있는 보조 IP>/32     md5
host    replication gitlab_replicator <신뢰할 수 있는 보조 IP>/32     md5
host    all         all               <신뢰할 수 있는 기본 IP>/24       md5
##
## Geo 보조 역할
## - 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하여 root로 로그인하세요:

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

    ##
    ## Geo 보조 역할
    ## - 종속 플래그를 자동으로 구성하여 Geo를 활성화합니다.
    ##
    roles ['geo_secondary_role']
       
    # 이것은 두 데이터베이스 간에 공유됩니다.
    # 두 데이터베이스에 동일한 암호를 정의하세요.
    gitlab_rails['db_password'] = '<여기_기본_데이터베이스_암호_입력하세요>'
       
    gitlab_rails['db_username'] = 'gitlab'
    gitlab_rails['db_host'] = '<데이터베이스_읽기_레플리카_호스트>'
       
    # 번들된 Omnibus PostgreSQL은 비활성화합니다.
    # 외부 PostgreSQL을 사용하기 때문입니다.
    postgresql['enable'] = false
    
  3. 파일을 저장하고 GitLab을 다시 구성합니다

트래킹 데이터베이스 구성

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

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

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

이것은 설치 및 업그레이드 중에 확장을 설치하는 것과 관련이 있습니다. 대안으로, 확장을 매뉴얼으로 설치하고 나중에 GitLab 업그레이드 중에 나타날 수 있는 문제에 대해 알아보세요.

note
Amazon RDS를 트래킹 데이터베이스로 사용하려면 보조 데이터베이스에 액세스할 수 있도록 설정하세요. 불행히도 동일한 보안 그룹을 할당하는 것만으로는 충분하지 않으며 외부 규칙이 RDS PostgreSQL 데이터베이스에 적용되지 않습니다. 따라서 5432 포트에서 트래킹 데이터베이스로부터의 모든 TCP 트래픽을 허용하는 보조 데이터베이스의 보안 그룹에 명시적으로 수신 규칙을 추가해야 합니다.

추적 데이터베이스 생성

귀하의 PostgreSQL 인스턴스에 추적 데이터베이스를 생성하고 구성하세요:

  1. 데이터베이스 요구 사항 문서에 따라 PostgreSQL을 설정합니다.
  2. gitlab_geo 사용자를 설정하고 패스워드를 선택하여 gitlabhq_geo_production 데이터베이스를 만들고, 해당 사용자를 데이터베이스의 소유자로 지정하세요. 이 설정에 대한 예시는 자체 컴파일 설치 문서에서 확인할 수 있습니다.
  3. 클라우드 관리형 PostgreSQL 데이터베이스를 사용하지 않는 경우, 보조 사이트가 추적 데이터베이스와 매뉴얼으로 통신할 수 있도록 pg_hba.conf를 변경하세요. 변경 사항이 적용되려면 PostgreSQL을 재시작해야 합니다:

    ##
    ## Geo 추적 데이터베이스 역할
    ## - pg_hba.conf
    ##
    host    all         all               <trusted tracking IP>/32      md5
    host    all         all               <trusted secondary IP>/32     md5
    

GitLab 구성

GitLab을 이 데이터베이스를 사용하도록 구성하세요. 이 단계는 리눅스 패키지 및 도커 배포용입니다.

  1. GitLab 보조 서버에 SSH로 로그인하세요.

    sudo -i
    
  2. PostgreSQL 인스턴스가 있는 컴퓨터 연결 매개변수와 자격 증명을 /etc/gitlab/gitlab.rb 파일에서 편집하세요.

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

데이터베이스 스키마 설정

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

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

    sudo gitlab-rake db:create:geo
    
  2. Rails 데이터베이스 마이그레이션(스키마 및 데이터 업데이트)은 재구성에 의해 수행됩니다. geo_secondary['auto_migrate'] = false로 설정되어 있거나 스키마가 매뉴얼으로 생성된 경우, 이 단계가 필요합니다:

    sudo gitlab-rake db:migrate:geo