외부 PostgreSQL 인스턴스를 사용한 Geo
Tier: 프리미엄, 얼티메이트
Offering: 셀프매니지드
이 문서는 Linux 패키지로 관리되지 않는 PostgreSQL 인스턴스를 사용하는 경우 관련이 있습니다. 이에는 클라우드 관리형 인스턴스나 수동으로 설치하고 구성한 PostgreSQL 인스턴스가 포함됩니다.
Geo 사이트를 다시 빌드해야 하는 경우 버전 불일치를 피하기 위해 Linux 패키지로 제공되는 PostgreSQL 버전 중 하나를 사용하는지 확인하십시오.
참고:
GitLab Geo를 사용하는 경우, Linux 패키지를 사용하거나 검증된 클라우드 관리형 인스턴스를 사용하는 것을 강력히 권장합니다. 왜냐하면 우리는 이에 기반하여 지속적으로 개발 및 테스트하고 있기 때문입니다.
다른 외부 데이터베이스와의 호환성은 보장할 수 없습니다.
주 사이트
-
주 사이트의 Rails 노드에 SSH로 로그인한 후 root로 로그인합니다:
sudo -i
-
/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>'
-
변경 사항이 적용되려면 Rails 노드를 다시 구성하십시오:
gitlab-ctl reconfigure
-
다음 명령을 Rails 노드에서 실행하여 사이트를 주 사이트로 정의하십시오:
gitlab-ctl set-geo-primary-node
이 명령은
/etc/gitlab/gitlab.rb
에 정의된external_url
을 사용합니다.
외부 데이터베이스를 복제하도록 구성
외부 데이터베이스를 설정하는 방법은 다음 중 하나를 사용할 수 있습니다:
- 직접 스트리밍 복제를 설정합니다(예: Amazon RDS 또는 Linux 패키지로 관리되지 않는 베어 메탈).
- Linux 패키지 설치를 수동으로 구성합니다.
클라우드 공급업체의 도구를 활용하여 주 데이터베이스를 복제
AWS EC2에서 주 사이트를 설정하고 RDS를 사용하는 경우입니다.
이제 다른 지역에 읽기 전용 복제본을 만들고 복제 프로세스는 AWS에서 관리됩니다. 필요에 따라 Network ACL (액세스 제어 목록), 서브넷 및 보안 그룹을 설정하여 보조 Rails 노드가 데이터베이스에 액세스할 수 있도록 하십시오.
다음 지침은 일반적인 클라우드 공급자에서 읽기 전용 복제본을 만드는 방법에 대해 설명합니다:
- Amazon RDS - 복제본 생성
- Azure Database for PostgreSQL - Azure Database for PostgreSQL의 읽기 전용 복제본 만들기 및 관리하기
- Google Cloud SQL - 복제본 생성
읽기 전용 복제본을 설정한 후 보조 사이트를 구성할 수 있습니다.
경고: 예를 들어 온프레미스 주 데이터베이스에서 RDS 보조 데이터베이스로 복제하는 등의 논리적 복제 방법의 사용은 지원되지 않습니다.
주 데이터베이스를 수동으로 구성
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 # 보조 인스턴스 수
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를 활성화합니다(이 단원에서는 다루지 않음).
외부 읽기 전용 복제 데이터베이스에 대한 연결을 구성하고 로그 커서를 활성화하려면:
-
각 보조 사이트의 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'] # 양쪽 데이터베이스에서 사용되는 공통 암호임에 유의하십시오. # 각 데이터베이스에서 동일한 암호를 정의해야 합니다 gitlab_rails['db_password'] = '<your_primary_db_password_here>' gitlab_rails['db_username'] = 'gitlab' gitlab_rails['db_host'] = '<database_read_replica_host>' # 번들된 Omnibus PostgreSQL 비활성화, 외부 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 업그레이드 중에 발생할 수 있는 문제에 대해 읽어보세요.
참고: Amazon RDS를 추적 데이터베이스로 사용하려면, 보조 데이터베이스에 액세스할 수 있도록 해야 합니다. 안타깝게도, 보안 그룹을 동일하게 할당하는 것만으로는 충분하지 않으며 RDS PostgreSQL 데이터베이스에서는 발신 규칙이 적용되지 않습니다. 따라서 5432 포트에서 추적 데이터베이스로부터의 모든 TCP 트래픽을 허용하는 인바운드 규칙을 명시적으로 추가해야 합니다.
추적 데이터베이스 생성
PostgreSQL 인스턴스에서 추적 데이터베이스를 생성하고 구성하세요:
- 데이터베이스 요구 사항 문서에 따라 PostgreSQL을 설정합니다.
- 선택한 암호로
gitlab_geo
사용자를 설정하고,gitlabhq_geo_production
데이터베이스를 생성하고, 사용자를 데이터베이스 소유자로 지정합니다. 이 설정의 예시는 자체 컴파일 설치 설명서에서 확인할 수 있습니다. -
클라우드 관리형 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 배포를 위한 것입니다.
-
GitLab secondary 서버에 SSH로 로그인한 다음 root로 전환하세요:
sudo -i
-
/etc/gitlab/gitlab.rb
파일을 편집하여 PostgreSQL 인스턴스가 있는 컴퓨터의 연결 매개변수 및 자격 증명을 입력하세요:geo_secondary['db_username'] = 'gitlab_geo' geo_secondary['db_password'] = '<여기에_추적_DB_암호_입력>' geo_secondary['db_host'] = '<추적_데이터베이스_호스트>' geo_secondary['db_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