두 개의 단일 노드 사이트를 위한 Geo 설정 (외부 PostgreSQL 서비스 사용)

Tier: Premium, Ultimate Offering: Self-Managed

다음 가이드는 두 개의 Linux 패키지 인스턴스 및 RDS, Azure Database, 또는 Google Cloud SQL과 같은 외부 PostgreSQL 데이터베이스를 사용하여 두 개의 단일 노드 사이트 설치에 대한 GitLab Geo를 배포하는 방법에 대한 간결한 지침을 제공합니다.

전제 조건:

  • 적어도 두 개의 독립적으로 작동하는 GitLab 사이트가 있어야 합니다. 사이트를 만들려면 GitLab 참조 아키텍처 문서를 참조하세요.
    • 한 GitLab 사이트는 Geo 주 사이트로 사용됩니다. 각 Geo 사이트에 대해 다른 참조 아키텍처 크기를 사용할 수 있습니다. 이미 작동 중인 GitLab 인스턴스가 있는 경우 해당 인스턴스를 주 사이트로 사용할 수 있습니다.
    • 두 번째 GitLab 사이트는 Geo 보조 사이트로 사용됩니다. Geo는 여러 보조 사이트를 지원합니다.
  • Geo 주 사이트에는 적어도 GitLab Premium 라이선스가 있어야 합니다. 모든 사이트에 대해 하나의 라이선스만 필요합니다.
  • 모든 사이트가 Geo 실행 요구 사항을 충족하는지 확인하세요.

Linux 패키지용 Geo 설정(Omnibus)

전제 조건:

  • PostgreSQL 12 이상을 사용합니다. 이에는 pg_basebackup 도구가 포함되어 있습니다.

주 사이트 설정

  1. GitLab 주 사이트에 SSH로 로그인한 후 루트로 전환합니다:

    sudo -i
    
  2. /etc/gitlab/gitlab.rb에 고유한 Geo 사이트 이름을 추가합니다:

    ##
    ## Geo 사이트에 대한 고유 식별자. 자세한 내용은
    ## https://docs.gitlab.com/ee/administration/geo_sites.html#common-settings를 참조하세요.
    ##
    gitlab_rails['geo_node_name'] = '<site_name_here>'
    
  3. 변경 사항을 적용하려면 주 사이트를 다시 구성합니다:

    gitlab-ctl reconfigure
    
  4. 사이트를 기본 Geo 사이트로 정의합니다:

    gitlab-ctl set-geo-primary-node
    

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

외부 데이터베이스 구성

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

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

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

AWS EC2에서 설정된 주 사이트가 있다고 가정합니다. 이제 다른 지역에 읽기 전용 레플리카를 만들면 AWS에서 관리하는 복제 프로세스가 진행됩니다. 사용자의 필요에 따라 Network ACL(Access Control List), 서브넷, 보안 그룹을 설정했는지 확인하여 보조 Rails 노드가 데이터베이스에 액세스할 수 있도록 합니다.

다음 지침에서는 일반적인 클라우드 제공업체를 위한 읽기 전용 레플리카 설정 방법을 설명합니다:

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

인가된 SSH 키의 빠른 조회 설정

복제 프로세스가 완료되면 인가된 SSH 키의 빠른 조회를 구성해야합니다.

note
인증은 기본 사이트에서 처리됩니다. 보조 사이트에 사용자 정의 인증을 설정하지 마십시오. 관리 영역에 액세스가 필요한 모든 변경 사항은 보조 사이트가 아닌 기본 사이트에서 수행해야 합니다. 보조 사이트는 읽기 전용 복사본이기 때문입니다.

보조 사이트 추가

  1. 보조 사이트의 각 Rails 및 Sidekiq 노드에 SSH로 로그인한 후 root 사용자로 로그인합니다:

    sudo -i
    
  2. /etc/gitlab/gitlab.rb를 편집하고 사이트에 고유한 이름을 추가합니다.

    ##
    ## Geo 사이트의 고유 식별자. 자세한 내용은
    ## https://docs.gitlab.com/ee/administration/geo_sites.html#common-settings 를 참조하십시오.
    ##
    gitlab_rails['geo_node_name'] = '<여기에 보조_사이트_이름_입력>'
    

    고유한 이름을 다음 단계에 저장합니다.

  3. 변경 사항을 적용하려면 보조 사이트의 각 Rails 및 Sidekiq 노드를 다시 구성하십시오.

    gitlab-ctl reconfigure
    
  4. 기본 노드 GitLab 인스턴스로 이동하십시오:
    1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
    2. Geo > 사이트를 선택합니다.
    3. 사이트 추가를 선택합니다.

      보조 사이트 추가

    4. 이름에는 /etc/gitlab/gitlab.rbgitlab_rails['geo_node_name']에 대한 값이 입력되어야 합니다. 값은 정확히 일치해야 합니다.
    5. 외부 URL에는 /etc/gitlab/gitlab.rbexternal_url에 대한 값이 입력되어야 합니다. 값이 한 곳에는 /로 끝나고 다른 곳에는 그렇지 않을 수 있습니다. 그렇지 않으면 값은 정확히 일치해야 합니다.
    6. 선택 사항. 내부 URL(선택 사항)에는 기본 사이트의 내부 URL을 입력하십시오.
    7. 선택 사항. 보조 사이트에서 복제할 그룹 또는 리포지터리 샤드를 선택하십시오. 모두 복제하려면 해당 필드를 비워두십시오. 선택적 동기화를 참조하십시오.
    8. 변경 사항 저장을 선택하십시오.
  5. 보조 사이트의 각 Rails 및 Sidekiq 노드에 SSH로 로그인한 후 서비스를 다시 시작하십시오:

    sudo gitlab-ctl restart
    
  6. 다음을 실행하여 Geo 설정에 문제가 있는지 확인하십시오:

    sudo gitlab-rake gitlab:geo:check
    

    확인 사항 중 하나라도 실패하는 경우 문제 해결 문서를 참조하십시오.

  7. 보조 사이트에서 Reachablity 여부를 확인하려면 기본 사이트의 Rails 또는 Sidekiq 서버에 SSH로 로그인한 후 다음을 실행하십시오:

    sudo gitlab-rake gitlab:geo:check
    

    확인 사항 중 하나라도 실패하는 경우 문제 해결 문서를 확인하십시오.

보조 사이트가 Geo 관리 페이지에 추가되고 다시 시작되면, 사이트는 일명 백필(backfill)이라고 하는 기본 사이트에서 누락된 데이터를 자동으로 복제하기 시작합니다.

한편, 기본 사이트는 각 보조 사이트에게 변경 사항 알림을 시작하므로 보조 사이트가 즉시 알림에 대응할 수 있습니다.

보조 사이트가 실행되고 액세스할 수 있는지 확인하십시오. 기본 사이트에서 사용된 것과 동일한 자격 증명으로 보조 사이트에 로그인할 수 있습니다.

HTTP/HTTPS 및 SSH를 통한 Git 액세스 활성화

Geo는 리포지터리를 HTTP/HTTPS로 동기화(새로운 설치의 경우 기본적으로 활성화됨)하므로 이 복제 방법을 활성화해야 합니다. 기존 사이트를 Geo로 변환하는 경우 클론 방법이 활성화되어 있는지 확인해야 합니다.

기본 사이트에서 다음 작업을 수행하십시오:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 설정 > 일반을 선택합니다.
  3. 가시성 및 액세스 제어를 확장합니다.
  4. Git을 SSH로 사용하는 경우:
    1. 활성화된 Git 액세스 프로토콜SSH 및 HTTP(S)로 설정되어 있는지 확인하십시오.
    2. 프라이머리 및 세컨더리 사이트 모두에서 데이터베이스에서 인가된 SSH 키의 빠른 조회를 활성화하십시오.
  5. Git을 SSH로 사용하지 않는 경우, 활성화된 Git 액세스 프로토콜HTTP(S)만으로 설정하십시오.

보조 사이트의 올바른 기능 검증

기본 사이트에서 사용한 것과 동일한 자격 증명으로 보조 사이트에 로그인할 수 있습니다.

로그인한 후:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. Geo > 사이트를 선택합니다.
  3. 사이트가 올바르게 보조 Geo 사이트로 식별되고 Geo가 활성화되었는지 확인하십시오.

최초 복제에는 시간이 소요될 수 있습니다. 기본 사이트의 브라우저에서 각 Geo 사이트의 동기화 프로세스를 모니터링할 수 있습니다.

Geo 대시보드

추적 데이터베이스 구성

note
이 단계는 추적 데이터베이스를 외부 서버에서 설정하려는 경우 선택적으로 수행해야 합니다.

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

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

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

확장 프로그램을 설치하려면 추가 역할이 필요합니다. 대안으로, 확장 프로그램을 매뉴얼으로 설치하고 미래의 GitLab 업그레이드 중에 발생할 수 있는 문제에 대해 자세히 알아보십시오.

note
Amazon RDS를 추적 데이터베이스로 사용하려면 읽기 전용 복제본의 보안 그룹에 일반적인 인바인드 규칙을 추가하여도 충분하지 않습니다. 따라서 추적 데이터베이스에서 RDS PostgreSQL 데이터베이스로의 어떠한 TCP 트래픽도 허용하기 위해 추가 인바운드 규칙을 명시적으로 추가해야 합니다.

추적 데이터베이스 생성

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

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

    ##
    ## Geo 추적 데이터베이스 역할
    ## - pg_hba.conf
    ##
    host    all         all               <신뢰할 수 있는 추적 IP>/32      md5
    host    all         all               <신뢰할 수 있는 보조 IP>/32     md5
    

GitLab 구성

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

  1. GitLab secondary 서버에 SSH로 로그인한 후 루트로 전환합니다:

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

    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을 다시 구성합니다:

    gitlab-ctl reconfigure
    

데이터베이스 스키마 매뉴얼 설정 (선택 사항)

위의 단계에서의 구성은 이러한 단계들을 자동으로 처리합니다. 이러한 단계는 어떤 문제가 발생했을 경우를 대비하여 제공됩니다.

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

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

    sudo gitlab-rake db:migrate:geo
    

문제 해결

Geo 문제 해결을 참조하세요.