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

Tier: Premium, Ultimate Offering: Self-managed

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

Linux 패키지가 제공하는 PostgreSQL 버전 중 하나를 사용하여, Geo 사이트를 다시 구축해야 하는 경우에 버전 불일치를 피하십시오. (requirements-for-running-geo)

note
GitLab Geo를 사용하는 경우, Linux 패키지를 사용하여 인스턴스를 설치하거나 검증된 클라우드 관리형 인스턴스 를 사용하는 것을 강력히 권장합니다. 왜냐하면 우리는 이를 기반으로 적극적으로 개발 및 테스트하기 때문입니다. 다른 외부 데이터베이스와의 호환성을 보장할 수 없습니다.

Primary 사이트

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

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

    ##
    ## Geo Primary role
    ## - configure dependent flags automatically to enable 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. 정의된 사이트를 primary 사이트로 지정하려면 Rails 노드에서 아래 명령을 실행하세요:

    gitlab-ctl set-geo-primary-node
    

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

외부 데이터베이스를 복제하도록 설정하세요

외부 데이터베이스를 설정하기 위해, 다음 중 하나를 수행할 수 있습니다:

  • 본인이 스트리밍 복제를 설정 (예: Amazon RDS 또는 Linux 패키지로 관리되지 않는 베어메탈).
  • Linux 패키지 설치의 구성을 매뉴얼으로 수행하세요.

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

예를 들어 AWS EC2에 기본 사이트가 설정되어 있고 RDS를 사용하고 있다고 가정해봅시다. 다른 지역에 읽기 전용 레플리카를 만들고 복제 프로세스는 AWS에서 관리합니다. 보안 그룹, 서브넷 및 네트워크 ACL을 필요에 따라 설정하여, 별도의 지역에서 해당 데이터베이스에 접근할 수 있도록 하십시오.

다음 지침은 각 클라우드 제공업체에 대한 읽기 전용 레플리카를 만드는 방법을 상세히 설명합니다:

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

caution
예를 들어 온프레미스 주 데이터베이스에서 RDS 보조 데이터베이스로 복제하는 경우와 같이, AWS Database Migration Service나 Google Cloud Database Migration Service와 같은 논리적 복제 방법의 사용은 지원되지 않습니다.

주 데이터베이스를 매뉴얼으로 구성하세요

geo_primary_roleprimary 노드의 데이터베이스를 pg_hba.confpostgresql.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 # secondary 인스턴스 수
hot_standby = on

Secondary 사이트

매뉴얼으로 레플리카 데이터베이스 구성

외부 레플리카 데이터베이스의 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

Secondary 사이트를 외부 읽기 전용 레플리카 사용하도록 구성하세요

Linux 패키지 설치에서, geo_secondary_role 에는 세 가지 주요 기능이 있습니다:

  1. 레플리카 데이터베이스 구성.
  2. 추적 데이터베이스 구성.
  3. Geo Log Cursor 활성화 (이 섹션에서 다루지 않음).

외부 읽기 전용 레플리카 데이터베이스에 연결하고 로그 커서를 활성화하려면:

  1. Secondary 사이트의 각 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']
       
    # 두 데이터베이스 모두에 공유되는 것임에 유의하십시오. 두 곳에서 동일한 암호를 정의해야 합니다.
    gitlab_rails['db_password'] = '<your_password_here>'
       
    gitlab_rails['db_username'] = 'gitlab'
    gitlab_rails['db_host'] = '<database_read_replica_host>'
       
    # 번들된 Omnibus PostgreSQL을 비활성화하십시오. 외부 PostgreSQL을 사용하므로
    postgresql['enable'] = false
    
  3. 파일을 저장하고 GitLab을 다시 구성하십시오.

추적 데이터베이스 구성

Secondary 사이트는 복제 상태를 추적하고 잠재적인 복제 문제로부터 자동으로 복구하기 위해 별도의 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 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로 로그인하여 루트로 전환합니다:

    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 배포를 위한 위의 단계에서 reconfigure이 이 단계를 자동으로 처리해야합니다.

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

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

    sudo gitlab-rake db:migrate:geo