외부 PostgreSQL 인스턴스와 함께 Geo 사용하기
이 문서는 Linux 패키지에 의해 관리되지 않는 PostgreSQL 인스턴스를 사용하는 경우에 해당합니다. 여기에는
클라우드 관리 인스턴스
또는 수동으로 설치 및 구성된 PostgreSQL 인스턴스가 포함됩니다.
Geo 사이트를 재구성해야 할 경우 버전 불일치를 피하기 위해
Linux 패키지가 배포하는 PostgreSQL 버전을 사용하고 있는지 확인하세요.
검증된 클라우드 관리 인스턴스를 사용하는 것을 강력히 권장합니다.
우리는 이를 기반으로 활발히 개발하고 테스트하고 있습니다.
다른 외부 데이터베이스와의 호환성을 보장할 수 없습니다.
Primary 사이트
-
주 사이트의 Rails 노드에 SSH로 접속하여 root로 로그인합니다:
sudo -i
-
/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>'
-
변경 사항이 적용되도록 Rails 노드를 재구성합니다:
gitlab-ctl reconfigure
-
Primary 사이트로 정의하기 위해 Rails 노드에서 아래 명령을 실행합니다:
gitlab-ctl set-geo-primary-node
이 명령은
/etc/gitlab/gitlab.rb
에서 정의된external_url
을 사용합니다.
복제할 외부 데이터베이스 구성
외부 데이터베이스를 설정하려면 다음 중 하나를 선택할 수 있습니다:
- 스트리밍 복제를 직접 설정하십시오(예: Amazon RDS 또는 Linux 패키지에 의해 관리되지 않는 물리적 서버).
- 수동으로 Linux 패키지 설치의 구성을 다음과 같이 수행합니다.
클라우드 제공업체의 도구를 활용하여 기본 데이터베이스를 복제합니다
AWS EC2에 설정된 기본 사이트가 RDS를 사용하는 경우,
다른 리전에 읽기 전용 복제를 생성하기만 하면 되며 복제 프로세스는 AWS에서 관리합니다.
네트워크 ACL(Access Control List), 서브넷 및 보안 그룹을 필요에 따라 설정하여
보조 Rails 노드가 데이터베이스에 접근할 수 있도록 하십시오.
다음 지침은 일반 클라우드 제공업체에 대한 읽기 전용 복제를 만드는 방법을 자세히 설명합니다:
- Amazon RDS - 읽기 복제본 생성
- Azure Database for PostgreSQL - Azure Database for PostgreSQL에서 읽기 복제를 생성하고 관리합니다
- Google Cloud SQL - 읽기 복제본 생성
읽기 전용 복제본이 설정되면 두 번째 사이트 구성으로 건너뛰어도 됩니다.
또는 Google Cloud Database Migration Service와 같은 논리 복제 방법을 사용하여,
예를 들어 온프레미스 기본 데이터베이스에서 RDS 보조로 복제하는 것은 지원되지 않습니다.
주 데이터베이스를 수동으로 복제하기 위해 구성하기
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 # number of secondary instances
hot_standby = on
Secondary 사이트
복제 데이터베이스를 수동으로 구성하기
외부 복제 데이터베이스의 pg_hba.conf
및 postgresql.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
에는
세 가지 주요 기능이 있습니다:
- 복제 데이터베이스 구성하기.
- 추적 데이터베이스 구성하기.
- Geo Log Cursor 활성화하기 (이 섹션에서는 다루지 않음).
외부 읽기 복제본 데이터베이스에 대한 연결을 구성하고 Log Cursor를 활성화하려면:
-
secondary 사이트의 각 Rails, Sidekiq 및 Geo Log Cursor 노드에 SSH로 접속하여 root로 로그인합니다:
sudo -i
-
/etc/gitlab/gitlab.rb
를 수정하고 다음을 추가합니다:## ## Geo Secondary role ## - Geo를 활성화하기 위해 종속 플래그를 자동으로 구성하기 ## roles ['geo_secondary_role'] # 주의: 이는 두 데이터베이스 간에 공유됩니다, # 두 데이터베이스 모두에서 동일한 비밀번호를 정의해야 합니다 gitlab_rails['db_password'] = '<your_primary_db_password_here>' gitlab_rails['db_username'] = 'gitlab' gitlab_rails['db_host'] = '<database_read_replica_host>' # 외부 PostgreSQL을 사용하고 있으므로 번들된 Omnibus PostgreSQL 비활성화 postgresql['enable'] = false
-
파일을 저장하고 GitLab 재구성하기를 수행합니다.
추적 데이터베이스 구성하기
Secondary 사이트는 복제 상태를 추적하고 잠재적인 복제 문제로부터 자동으로 복구하기 위해
추적 데이터베이스로 별도의 PostgreSQL 설치를 사용합니다. Linux 패키지는 roles ['geo_secondary_role']
가 설정될 때
자동으로 추적 데이터베이스를 구성합니다. 이 데이터베이스를 Linux 패키지 설치 외부에서 운영하려면,
다음 지침을 따르세요.
클라우드 관리 데이터베이스 서비스
트래킹 데이터베이스에 클라우드 관리 서비스를 사용하는 경우, 트래킹 데이터베이스 사용자에게 추가 역할을 부여해야 할 수 있습니다(기본값은 gitlab_geo
입니다):
-
Amazon RDS에서는
rds_superuser
역할이 필요합니다. -
Azure Database for PostgreSQL에서는
azure_pg_admin
역할이 필요합니다. -
Google Cloud SQL에서는
cloudsqlsuperuser
역할이 필요합니다.
이는 설치 및 업그레이드 시 확장을 설치하는 데 필요한 것입니다. 대안으로,
확장을 수동으로 설치하고 향후 GitLab 업그레이드 중 발생할 수 있는 문제에 대해 읽어보세요.
트래킹 데이터베이스 만들기
PostgreSQL 인스턴스에 트래킹 데이터베이스를 생성하고 구성합니다:
-
데이터베이스 요구 사항 문서에 따라 PostgreSQL을 설정하세요.
-
원하는 비밀번호로
gitlab_geo
사용자 계정을 설정하고,gitlabhq_geo_production
데이터베이스를 생성하고, 사용자를 데이터베이스 소유자로 만듭니다.
이 설정의 예시는 셀프 컴파일 설치 문서에서 확인할 수 있습니다. -
클라우드 관리 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 배포를 위한 것입니다.
-
GitLab 보조 서버에 SSH로 접속하고 root로 로그인합니다:
sudo -i
-
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 # 내부 관리 인스턴스 사용 안 함
-
파일을 저장하고 GitLab을 재구성합니다.
데이터베이스 스키마 설정
Linux 패키지 및 Docker 배포를 위해 위 단계의 재구성이 이 단계를 자동으로 처리해야 합니다.
-
이 작업은 데이터베이스 스키마를 생성합니다. 데이터베이스 사용자는 슈퍼유저여야 합니다.
sudo gitlab-rake db:create:geo
-
Rails 데이터베이스 마이그레이션(스키마 및 데이터 업데이트) 적용은 재구성을 통해 수행됩니다.
geo_secondary['auto_migrate'] = false
로 설정되었거나 스키마가 수동으로 생성된 경우에는 이 단계가 필요합니다:sudo gitlab-rake db:migrate:geo