- GitLab 설치의 장애 조치 방안으로서의 PgBouncer
- GitLab 설치의 비장애 허용 설정으로서의 PgBouncer
- 백업
- 모니터링 활성화
- 관리 콘솔
- PgBouncer 우회 절차
- 세밀한 튜닝
- 문제 해결
번들 PgBouncer 서비스 사용하기
Tier: Free, Premium, Ultimate
Offering: Self-managed
PgBouncer는 장애 조치 시나리오에서 데이터베이스 연결을 서버 간에 원활하게 마이그레이션하는 데 사용됩니다. 또한, 비장애 허용 설정에서 연결을 풀링하여 응답 시간을 단축하고 리소스 사용량을 줄일 수 있습니다.
GitLab 프리미엄에는 PgBouncer의 번들 버전이 포함되어 있으며 /etc/gitlab/gitlab.rb
를 통해 관리할 수 있습니다.
GitLab 설치의 장애 조치 방안으로서의 PgBouncer
이 내용은 새 위치로 이동되었습니다.
GitLab 설치의 비장애 허용 설정으로서의 PgBouncer
-
gitlab-ctl pg-password-md5 pgbouncer
명령을 사용하여PGBOUNCER_USER_PASSWORD_HASH
를 생성합니다. -
gitlab-ctl pg-password-md5 gitlab
명령을 사용하여SQL_USER_PASSWORD_HASH
를 생성합니다. 나중에 평문을 SQL_USER_PASSWORD에 입력합니다. -
데이터베이스 노드에서
/etc/gitlab/gitlab.rb
에 다음이 설정되었는지 확인하세요.postgresql['pgbouncer_user_password'] = 'PGBOUNCER_USER_PASSWORD_HASH' postgresql['sql_user_password'] = 'SQL_USER_PASSWORD_HASH' postgresql['listen_address'] = 'XX.XX.XX.Y' # XX.XX.XX.Y는 postgresql이 수신해야 하는 노드의 IP 주소입니다. postgresql['md5_auth_cidr_addresses'] = %w(AA.AA.AA.B/32) # AA.AA.AA.B는 pgbouncer 노드의 IP 주소입니다.
-
gitlab-ctl reconfigure
명령을 실행합니다.
데이터베이스가 이미 실행 중이었더라도,gitlab-ctl restart postgresql
명령으로 재구성 후에 재시작해야 합니다. -
PgBouncer를 실행하는 노드에서
/etc/gitlab/gitlab.rb
에 다음이 설정되어 있는지 확인하세요.pgbouncer['enable'] = true pgbouncer['databases'] = { gitlabhq_production: { host: 'DATABASE_HOST', user: 'pgbouncer', password: 'PGBOUNCER_USER_PASSWORD_HASH' } }
각 데이터베이스에 대해 추가 구성 매개변수를 전달할 수 있습니다. 예를 들어:
pgbouncer['databases'] = { gitlabhq_production: { ... pool_mode: 'transaction' } }
이러한 매개변수를 사용할 때 주의하십시오. 매개변수의 전체 목록은 PgBouncer 문서를 참조하십시오.
-
gitlab-ctl reconfigure
명령을 실행합니다. -
Puma를 실행하는 노드에서
/etc/gitlab/gitlab.rb
에 다음이 설정되어 있는지 확인하세요.gitlab_rails['db_host'] = 'PGBOUNCER_HOST' gitlab_rails['db_port'] = '6432' gitlab_rails['db_password'] = 'SQL_USER_PASSWORD'
-
gitlab-ctl reconfigure
명령을 실행합니다. -
이 시점에서 인스턴스는 PgBouncer를 통해 데이터베이스에 연결해야 합니다. 문제가 있는 경우 문제 해결 섹션을 참조하십시오.
백업
PgBouncer 연결을 통해 GitLab을 백업하거나 복원하지 마십시오. GitLab 장애를 유발할 수 있습니다.
자세한 내용 및 백업 재구성 방법에 대해 더 읽어보기.
모니터링 활성화
모니터링을 활성화하려면 모든 PgBouncer 서버에서 활성화해야 합니다.
-
/etc/gitlab/gitlab.rb
를 만들거나 수정하여 다음 구성을 추가합니다.# 프로메테우스를 위한 서비스 검색 활성화 consul['enable'] = true consul['monitoring_service_discovery'] = true # Platzholder 치환 # Y.Y.Y.Y consul1.gitlab.example.com Z.Z.Z.Z # 이 치환값을 Consul 서버 노드의 주소로 교체합니다 consul['configuration'] = { retry_join: %w(Y.Y.Y.Y consul1.gitlab.example.com Z.Z.Z.Z), } # 익스포터가 수신 대기하는 네트워크 주소 설정 node_exporter['listen_address'] = '0.0.0.0:9100' pgbouncer_exporter['listen_address'] = '0.0.0.0:9188'
-
구성을 컴파일하려면
sudo gitlab-ctl reconfigure
을 실행합니다.
관리 콘솔
Linux 패키지 설치에서는 PgBouncer 관리 콘솔에 자동으로 연결하는 명령이 제공됩니다. 자세한 사용 방법은 PgBouncer 문서를 참조하십시오.
세션을 시작하려면 다음을 실행하고 pgbouncer
사용자의 암호를 제공하십시오.
sudo gitlab-ctl pgb-console
인스턴스에 대한 기본 정보를 얻으려면:
pgbouncer=# show databases; show clients; show servers;
name | host | port | database | force_user | pool_size | reserve_pool | pool_mode | max_connections | current_connections
---------------------+-----------+------+---------------------+------------+-----------+--------------+-----------+-----------------+---------------------
gitlabhq_production | 127.0.0.1 | 5432 | gitlabhq_production | | 100 | 5 | | 0 | 1
pgbouncer | | 6432 | pgbouncer | pgbouncer | 2 | 0 | statement | 0 | 0
(2 rows)
type | user | database | state | addr | port | local_addr | local_port | connect_time | request_time | ptr | link
| remote_pid | tls
------+-----------+---------------------+--------+-----------+-------+------------+------------+---------------------+---------------------+-----------+------
+------------+-----
...
(총 12개 행)
...
(총 8개 행)
(8 rows)
type | user | database | state | addr | port | local_addr | local_port | connect_time | request_time | ptr | link | rem
ote_pid | tls
------+--------+---------------------+-------+-----------+------+------------+------------+---------------------+---------------------+-----------+------+----
--------+-----
...
(총 1개 행)
PgBouncer 우회 절차
Linux 패키지 설치
일부 데이터베이스 변경 사항은 PgBouncer를 통해 직접 수행해야 합니다.
주요 영향을 받는 작업은 데이터베이스 복원 및 데이터베이스 마이그레이션을 포함한 GitLab 업그레이드입니다.
-
기본 노드를 찾으려면 데이터베이스 노드에서 다음을 실행합니다.
sudo gitlab-ctl patroni members
-
수행 중인 애플리케이션 노드의
/etc/gitlab/gitlab.rb
를 편집하고,gitlab_rails['db_host']
및gitlab_rails['db_port']
를 데이터베이스 기본 호스트 및 포트로 업데이트합니다. -
다시 구성을 실행합니다.
sudo gitlab-ctl reconfigure
작업이나 절차를 완료한 후에는 다시 PgBouncer를 사용하도록 변경합니다:
-
/etc/gitlab/gitlab.rb
를 다시 PgBouncer를 가리키도록 변경합니다. -
다시 구성을 실행합니다.
sudo gitlab-ctl reconfigure
Helm 차트 설치
고가용성 배포는 Linux 패키지 기반의 이유로 PgBouncer를 우회해야 합니다. Helm 차트 설치의 경우:
- 데이터베이스 백업 및 복원 작업은 toolbox 컨테이너에서 수행됩니다.
- 마이그레이션 작업은 마이그레이션 컨테이너에서 수행됩니다.
각 서브차트에서 PostgreSQL 포트를 재정의하여 이러한 작업을 실행하고 PostgreSQL에 직접 연결할 수 있어야 합니다.
세밀한 튜닝
PgBouncer의 기본 설정은 대부분의 설치에 적합합니다. 특정 경우에는 성능 및 리소스별 변수를 변경하여 처리량을 높이거나 데이터베이스의 메모리 고갈을 제한하는 것이 좋을 수 있습니다.
Linux 패키지 설치의 경우 이러한 변수 및 해당 문서를 공식 PgBouncer 문서에서 찾을 수 있습니다.
아래에 나열된 것은 Linux 패키지 설치의 최상의 변수와 기본값입니다.
-
pgbouncer['max_client_conn']
(기본값:2048
, 서버 파일 디스크립터 제한에 따름) 이것은 PgBouncer의 “프론트엔드” 풀입니다: Rails에서 PgBouncer로의 연결. -
pgbouncer['default_pool_size']
(기본값:100
) 이것은 PgBouncer의 “백엔드” 풀입니다: PgBouncer에서 데이터베이스로의 연결.
default_pool_size
의 이상적인 숫자는 데이터베이스 풀 크기를 정의하기 위해 나열된 서비스 각각의 인스턴스 수에 puma
, sidekiq
및 geo-logcursor
의 연결 수를 곱한 것입니다.
하나 이상의 내부 로드 밸런서와 함께 여러 PgBouncer를 사용하는 경우, 각 인스턴스의 default_pool_size
를 나눌 수 있어 균일하게 분산된 부하를 보장할 수 있습니다.
pgbouncer['max_client_conn']
은 PgBouncer가 수용할 수 있는 연결의 하드 제한입니다. 이를 변경할 필요가 없을 가능성이 높습니다. 해당 제한에 도달하는 경우 내부 로드 밸런서로 추가 PgBouncer를 추가하는 것을 고려해볼 수 있습니다.
Geo 추적 데이터베이스를 가리키는 PgBouncer의 제한을 설정하는 경우, 일반적으로 기본적으로 puma
를 무시할 수 있을 것입니다.
문제 해결
PgBouncer를 통한 연결에 문제가 있는 경우, 항상 로그를 확인해야 합니다.
sudo gitlab-ctl tail pgbouncer
추가로, 관리 콘솔의 show databases
출력을 확인할 수 있습니다. 출력에서 gitlabhq_production
데이터베이스의 host
필드에 값이 있어야 합니다. 또한, current_connections
는 1보다 커야 합니다.
메시지: LOG: invalid CIDR mask in address
Geo 문서에 제안된 수정 사항을 확인하세요(../geo/replication/troubleshooting/replication.md#message-log–invalid-cidr-mask-in-address).
메시지: LOG: invalid IP mask "md5": Name or service not known
Geo 문서에 제안된 수정 사항을 확인하세요(../geo/replication/troubleshooting/replication.md#message-log–invalid-ip-mask-md5-name-or-service-not-known).