InfoGrab Docs

외부 PostgreSQL 인스턴스가 있는 Geo

요약

이 문서는 Linux 패키지에서 관리하지 않는 PostgreSQL 인스턴스를 사용하는 경우에 관련이 있습니다. Geo 사이트를 재구축해야 하는 경우 버전 불일치를 방지하기 위해 Linux 패키지가 제공하는 PostgreSQL 버전 중 하나를 사용하고 있는지 확인하세요.

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

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

Note

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

기본 사이트#

  1. 기본 사이트의 Rails 노드에 SSH로 접속하고 루트로 로그인합니다:

    sudo -i
    
  2. /etc/gitlab/gitlab.rb를 편집하고 다음을 추가합니다:

    ##
    ## Geo Primary role
    ## - configure dependent flags automatically to enable Geo
    ##
    roles ['geo_primary_role']
    
    ##
    ## The unique identifier for the Geo site. See
    ## https://docs.gitlab.com/administration/geo_sites/#common-settings
    ##
    gitlab_rails['geo_node_name'] = '<site_name_here>'
    
  3. 변경 사항을 적용하기 위해 Rails 노드를 재구성합니다:

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

    gitlab-ctl set-geo-primary-node
    

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

복제할 외부 데이터베이스 구성#

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

  • 스트리밍 복제를 직접 설정합니다(예: Amazon RDS, 또는 Linux 패키지에서 관리하지 않는 베어 메탈).
  • Linux 패키지 설치의 구성을 수동으로 다음과 같이 수행합니다.

클라우드 공급자의 도구를 활용하여 기본 데이터베이스 복제#

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

다음 지침은 일반 클라우드 공급자에 대한 읽기 전용 복제본 생성 방법을 자세히 설명합니다:

읽기 전용 복제본이 설정되면 보조 사이트를 외부 읽기 복제본을 사용하도록 구성으로 건너뛸 수 있습니다.

Warning

예를 들어 온-프레미스 기본 데이터베이스에서 RDS 보조로 복제하기 위해 AWS Database Migration Service 또는 Google Cloud Database Migration Service와 같은 논리 복제 방법의 사용은 지원되지 않습니다.

복제를 위한 기본 데이터베이스 수동 구성#

geo_primary_rolepg_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 # number of secondary instances
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 로그 커서를 활성화합니다(이 섹션에서는 다루지 않음).

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

  1. 보조 사이트의 각 Rails, Sidekiq 및 Geo 로그 커서 노드에 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_primary_db_password_here>'
    
    gitlab_rails['db_username'] = 'gitlab'
    gitlab_rails['db_host'] = '<database_read_replica_host>'
    
    # Disable the bundled Omnibus PostgreSQL because we are
    # using an external PostgreSQL
    postgresql['enable'] = false
    
  3. 파일을 저장하고 GitLab 재구성합니다.

추적 데이터베이스 구성#

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

내부 및 외부 추적 데이터베이스 이해#

추적 데이터베이스를 다음 중 하나로 구성할 수 있습니다:

  • 내부(geo_postgresql['enable'] = true): 추적 데이터베이스가 Rails 애플리케이션과 동일한 서버에서 관리되는 PostgreSQL 인스턴스로 실행됩니다. 이것이 기본값입니다.
  • 외부(geo_postgresql['enable'] = false): 추적 데이터베이스가 별도의 서버 또는 클라우드 관리 서비스로 실행됩니다.

다중 노드 보조 사이트 설정에서 하나의 Rails 노드에서 추적 데이터베이스를 활성화하면 사이트의 다른 모든 Rails 노드에 대해 "외부"가 됩니다. 다른 모든 Rails 노드는 geo_postgresql['enable'] = false를 설정하고 해당 추적 데이터베이스에 연결하기 위한 연결 세부 정보를 지정해야 합니다.

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

추적 데이터베이스에 클라우드 관리 서비스를 사용하는 경우 추적 데이터베이스 사용자(기본적으로 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
    # In multi-node setups, add entries for all Rails nodes that will connect
    

GitLab 구성#

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

  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>      # change to the correct port
    geo_postgresql['enable'] = false     # don't use internal managed instance
    

    다중 노드 설정에서 외부 추적 데이터베이스에 연결해야 하는 각 Rails 노드에 이 구성을 적용합니다.

  3. 파일을 저장하고 GitLab 재구성합니다.

데이터베이스 스키마 설정#

Linux 패키지 및 Docker 배포의 이전에 나열된 단계의 재구성 명령이 이러한 단계를 자동으로 처리합니다.

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

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

    sudo gitlab-rake db:migrate:geo
    

외부 PostgreSQL 인스턴스가 있는 Geo

Tier: Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기
요약

이 문서는 Linux 패키지에서 관리하지 않는 PostgreSQL 인스턴스를 사용하는 경우에 관련이 있습니다. Geo 사이트를 재구축해야 하는 경우 버전 불일치를 방지하기 위해 Linux 패키지가 제공하는 PostgreSQL 버전 중 하나를 사용하고 있는지 확인하세요.

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

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

Note

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

기본 사이트#

  1. 기본 사이트의 Rails 노드에 SSH로 접속하고 루트로 로그인합니다:

    sudo -i
    
  2. /etc/gitlab/gitlab.rb를 편집하고 다음을 추가합니다:

    ##
    ## Geo Primary role
    ## - configure dependent flags automatically to enable Geo
    ##
    roles ['geo_primary_role']
    
    ##
    ## The unique identifier for the Geo site. See
    ## https://docs.gitlab.com/administration/geo_sites/#common-settings
    ##
    gitlab_rails['geo_node_name'] = '<site_name_here>'
    
  3. 변경 사항을 적용하기 위해 Rails 노드를 재구성합니다:

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

    gitlab-ctl set-geo-primary-node
    

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

복제할 외부 데이터베이스 구성#

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

  • 스트리밍 복제를 직접 설정합니다(예: Amazon RDS, 또는 Linux 패키지에서 관리하지 않는 베어 메탈).
  • Linux 패키지 설치의 구성을 수동으로 다음과 같이 수행합니다.

클라우드 공급자의 도구를 활용하여 기본 데이터베이스 복제#

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

다음 지침은 일반 클라우드 공급자에 대한 읽기 전용 복제본 생성 방법을 자세히 설명합니다:

읽기 전용 복제본이 설정되면 보조 사이트를 외부 읽기 복제본을 사용하도록 구성으로 건너뛸 수 있습니다.

Warning

예를 들어 온-프레미스 기본 데이터베이스에서 RDS 보조로 복제하기 위해 AWS Database Migration Service 또는 Google Cloud Database Migration Service와 같은 논리 복제 방법의 사용은 지원되지 않습니다.

복제를 위한 기본 데이터베이스 수동 구성#

geo_primary_rolepg_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 # number of secondary instances
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 로그 커서를 활성화합니다(이 섹션에서는 다루지 않음).

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

  1. 보조 사이트의 각 Rails, Sidekiq 및 Geo 로그 커서 노드에 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_primary_db_password_here>'
    
    gitlab_rails['db_username'] = 'gitlab'
    gitlab_rails['db_host'] = '<database_read_replica_host>'
    
    # Disable the bundled Omnibus PostgreSQL because we are
    # using an external PostgreSQL
    postgresql['enable'] = false
    
  3. 파일을 저장하고 GitLab 재구성합니다.

추적 데이터베이스 구성#

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

내부 및 외부 추적 데이터베이스 이해#

추적 데이터베이스를 다음 중 하나로 구성할 수 있습니다:

  • 내부(geo_postgresql['enable'] = true): 추적 데이터베이스가 Rails 애플리케이션과 동일한 서버에서 관리되는 PostgreSQL 인스턴스로 실행됩니다. 이것이 기본값입니다.
  • 외부(geo_postgresql['enable'] = false): 추적 데이터베이스가 별도의 서버 또는 클라우드 관리 서비스로 실행됩니다.

다중 노드 보조 사이트 설정에서 하나의 Rails 노드에서 추적 데이터베이스를 활성화하면 사이트의 다른 모든 Rails 노드에 대해 "외부"가 됩니다. 다른 모든 Rails 노드는 geo_postgresql['enable'] = false를 설정하고 해당 추적 데이터베이스에 연결하기 위한 연결 세부 정보를 지정해야 합니다.

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

추적 데이터베이스에 클라우드 관리 서비스를 사용하는 경우 추적 데이터베이스 사용자(기본적으로 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
    # In multi-node setups, add entries for all Rails nodes that will connect
    

GitLab 구성#

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

  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>      # change to the correct port
    geo_postgresql['enable'] = false     # don't use internal managed instance
    

    다중 노드 설정에서 외부 추적 데이터베이스에 연결해야 하는 각 Rails 노드에 이 구성을 적용합니다.

  3. 파일을 저장하고 GitLab 재구성합니다.

데이터베이스 스키마 설정#

Linux 패키지 및 Docker 배포의 이전에 나열된 단계의 재구성 명령이 이러한 단계를 자동으로 처리합니다.

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

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

    sudo gitlab-rake db:migrate:geo