외부 PostgreSQL 인스턴스가 있는 Geo
GitLab v19.4Offering: GitLab Self-Managed
요약
이 문서는 Linux 패키지가 관리하지 않는 PostgreSQL 인스턴스를 사용하는 경우에 해당합니다. Geo 사이트를 다시 구축해야 하는 상황에서 버전 불일치를 피하려면 Linux 패키지에 포함된 PostgreSQL 버전 중 하나를 사용해야 합니다.
이 문서는 Linux 패키지가 관리하지 않는 PostgreSQL 인스턴스를 사용하는 경우에 해당합니다. 여기에는 클라우드 관리형 인스턴스나 수동으로 설치하고 구성한 PostgreSQL 인스턴스가 포함됩니다.
Geo 사이트를 다시 구축해야 하는 상황에서 버전 불일치를 피하려면 Linux 패키지에 포함된 PostgreSQL 버전 중 하나를 사용해야 합니다.
GitLab Geo를 사용한다면 Linux 패키지로 설치한 인스턴스나 검증된 클라우드 관리형 인스턴스를 실행하기를 강력히 권장합니다. GitLab은 이 구성을 기준으로 개발하고 테스트합니다. 다른 외부 데이터베이스와의 호환성은 보장하지 않습니다.
기본 사이트#
-
기본 사이트의 Rails 노드에 SSH로 접속하여 root로 로그인합니다.
sudo -i -
/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>' -
변경 사항을 적용하려면 Rails 노드를 재구성합니다.
gitlab-ctl reconfigure -
해당 사이트를 기본 사이트로 지정하려면 Rails 노드에서 다음 명령을 실행합니다.
gitlab-ctl set-geo-primary-node이 명령은
/etc/gitlab/gitlab.rb에 정의한external_url을 사용합니다.
복제할 외부 데이터베이스 구성#
외부 데이터베이스를 설정하는 방법은 다음 두 가지입니다.
- 스트리밍 복제를 직접 설정합니다(예를 들어 Amazon RDS나 Linux 패키지가 관리하지 않는 베어메탈).
- Linux 패키지 설치를 다음과 같이 수동으로 구성합니다.
클라우드 공급자의 도구를 활용하여 기본 데이터베이스 복제#
RDS를 사용하는 AWS EC2에 기본 사이트를 설정한 경우를 가정합니다. 다른 리전에 읽기 전용 복제본을 만들기만 하면 복제 과정은 AWS가 관리합니다. 보조 Rails 노드가 데이터베이스에 접근할 수 있도록 Network ACL(Access Control List), 서브넷, 보안 그룹을 필요에 맞게 설정합니다.
다음 지침은 주요 클라우드 공급자에서 읽기 전용 복제본을 만드는 방법을 설명합니다.
- Amazon RDS - Creating a Read Replica
- Azure Database for PostgreSQL - Create and manage read replicas in Azure Database for PostgreSQL
- Google Cloud SQL - Creating read replicas
읽기 전용 복제본 설정이 끝나면 보조 사이트 구성으로 건너뛸 수 있습니다.
예를 들어 온프레미스 기본 데이터베이스에서 RDS 보조 데이터베이스로 복제할 때 AWS Database Migration Service나 Google Cloud Database Migration Service 같은 논리적 복제 방식을 사용하는 구성은 지원하지 않습니다.
복제를 위한 기본 데이터베이스 수동 구성#
geo_primary_role은
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
보조 사이트#
복제본 데이터베이스 수동 구성#
외부 복제본 데이터베이스의 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
외부 읽기 복제본을 사용하도록 보조 사이트 구성#
Linux 패키지 설치에서
geo_secondary_role은
세 가지 주요 기능을 수행합니다.
- 복제본 데이터베이스를 구성합니다.
- 추적 데이터베이스를 구성합니다.
- Geo Log Cursor를 활성화합니다(이 섹션에서는 다루지 않습니다).
외부 읽기 복제본 데이터베이스 연결을 구성하고 Log Cursor를 활성화하려면 다음 단계를 수행합니다.
-
보조 사이트의 각 Rails, Sidekiq, Geo Log Cursor 노드에 SSH로 접속하여 root로 로그인합니다.
sudo -i -
/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 -
파일을 저장하고 GitLab을 재구성합니다.
추적 데이터베이스 구성#
보조 사이트는 별도의 PostgreSQL 설치를 추적 데이터베이스로 사용하여
복제 상태를 추적하고 복제 문제에서 자동으로 복구합니다.
roles ['geo_secondary_role'] 이 설정되어 있으면 Linux 패키지가 추적 데이터베이스를
자동으로 구성합니다.
이 데이터베이스를 Linux 패키지 설치 외부에서 실행하려면 다음 지침을 따릅니다.
내부 추적 데이터베이스와 외부 추적 데이터베이스의 차이#
추적 데이터베이스는 다음 두 가지 방식 중 하나로 구성할 수 있습니다.
- 내부(
geo_postgresql['enable'] = true): 추적 데이터베이스가 Rails 애플리케이션과 같은 서버에서 관리형 PostgreSQL 인스턴스로 실행됩니다. 기본값입니다. - 외부(
geo_postgresql['enable'] = false): 추적 데이터베이스가 별도 서버나 클라우드 관리형 서비스로 실행됩니다.
멀티 노드 보조 사이트 구성에서 한 Rails 노드에 추적 데이터베이스를 활성화하면, 해당 사이트의 다른 모든 Rails 노드에는 그 데이터베이스가 "외부"가 됩니다. 다른 모든 Rails 노드는 geo_postgresql['enable'] = false를 설정하고 해당 추적 데이터베이스에 연결할 접속 정보를 지정해야 합니다.
클라우드 관리형 데이터베이스 서비스#
추적 데이터베이스에 클라우드 관리형 서비스를 사용한다면 추적 데이터베이스
사용자(기본값은 gitlab_geo)에게 다음과 같은 역할을 추가로 부여해야
할 수 있습니다.
- Amazon RDS는
rds_superuser역할이 필요합니다. - Azure Database for PostgreSQL은
azure_pg_admin역할이 필요합니다. - Google Cloud SQL은
cloudsqlsuperuser역할이 필요합니다.
이는 설치 및 업그레이드 과정에서 확장을 설치하기 위한 것입니다. 대안으로 필요한 확장을 수동으로 설치할 수 있습니다.
Amazon RDS를 추적 데이터베이스로 사용하려면 보조 데이터베이스에 접근할 수 있는지 확인합니다. 아웃바운드 규칙은 RDS PostgreSQL 데이터베이스에 적용되지 않으므로 같은 보안 그룹을 지정하는 것만으로는 충분하지 않습니다. 따라서 읽기 복제본의 보안 그룹에 5432 포트의 추적 데이터베이스에서 오는 모든 TCP 트래픽을 허용하는 인바운드 규칙을 명시적으로 추가해야 합니다.
추적 데이터베이스 생성#
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 # In multi-node setups, add entries for all Rails nodes that will connect
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> # change to the correct port geo_postgresql['enable'] = false # don't use internal managed instance멀티 노드 구성에서는 외부 추적 데이터베이스에 연결해야 하는 각 Rails 노드에 이 구성을 적용합니다.
-
파일을 저장하고 GitLab을 재구성합니다.
데이터베이스 스키마 설정#
Linux 패키지 배포와 Docker 배포에서는 앞서 설명한 단계의 재구성 명령이 다음 단계를 자동으로 처리합니다.
-
이 태스크는 데이터베이스 스키마를 생성합니다. 데이터베이스 사용자가 슈퍼유저여야 합니다.
sudo gitlab-rake db:create:geo -
Rails 데이터베이스 마이그레이션(스키마 및 데이터 업데이트) 적용도 재구성 과정에서 수행됩니다.
geo_secondary['auto_migrate'] = false가 설정되어 있거나 스키마를 수동으로 생성했다면 다음 단계가 필요합니다.sudo gitlab-rake db:migrate:geo