번들 PgBouncer 서비스 사용
Offering: GitLab Self-Managed
PgBouncer는 gitlab-ee 패키지에 번들로 포함되어 있으며 무료로 사용할 수 있습니다. PgBouncer는 장애 조치 시나리오에서 서버 간 데이터베이스 연결을 원활하게 마이그레이션하는 데 사용됩니다. GitLab Premium에는 /etc/gitlab/gitlab.rb를 통해 관리할 수 있는 번들 버전의 PgBouncer가 포함되어 있습니다.
PgBouncer는 gitlab-ee 패키지에 번들로 포함되어 있으며 무료로 사용할 수 있습니다.
지원을 받으려면 Premium 구독이 필요합니다.
PgBouncer는 장애 조치 시나리오에서 서버 간 데이터베이스 연결을 원활하게 마이그레이션하는 데 사용됩니다. 또한 장애 허용이 필요하지 않은 설정에서 연결을 풀링하여 리소스 사용을 줄이면서 응답 시간을 향상시킬 수 있습니다.
GitLab Premium에는 /etc/gitlab/gitlab.rb를 통해 관리할 수 있는 번들 버전의 PgBouncer가 포함되어 있습니다.
장애 허용 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' # Where XX.XX.XX.Y is the ip address on the node postgresql should listen on postgresql['md5_auth_cidr_addresses'] = %w(AA.AA.AA.B/32) # Where AA.AA.AA.B is the IP address of the pgbouncer node -
gitlab-ctl reconfigure를 실행합니다.[!note] 데이터베이스가 이미 실행 중이었다면 재구성 후
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를 생성/편집하고 다음 구성을 추가합니다:# Enable service discovery for Prometheus consul['enable'] = true consul['monitoring_service_discovery'] = true # Replace placeholders # Y.Y.Y.Y consul1.gitlab.example.com Z.Z.Z.Z # with the addresses of the Consul server nodes consul['configuration'] = { retry_join: %w(Y.Y.Y.Y consul1.gitlab.example.com Z.Z.Z.Z), } # Set the network addresses that the exporters will listen on 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
------+-----------+---------------------+--------+-----------+-------+------------+------------+---------------------+---------------------+-----------+------
+------------+-----
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44590 | 127.0.0.1 | 6432 | 2018-04-24 22:13:10 | 2018-04-24 22:17:10 | 0x12444c0 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44592 | 127.0.0.1 | 6432 | 2018-04-24 22:13:10 | 2018-04-24 22:17:10 | 0x12447c0 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44594 | 127.0.0.1 | 6432 | 2018-04-24 22:13:10 | 2018-04-24 22:17:10 | 0x1244940 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44706 | 127.0.0.1 | 6432 | 2018-04-24 22:14:22 | 2018-04-24 22:16:31 | 0x1244ac0 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44708 | 127.0.0.1 | 6432 | 2018-04-24 22:14:22 | 2018-04-24 22:15:15 | 0x1244c40 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44794 | 127.0.0.1 | 6432 | 2018-04-24 22:15:15 | 2018-04-24 22:15:15 | 0x1244dc0 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44798 | 127.0.0.1 | 6432 | 2018-04-24 22:15:15 | 2018-04-24 22:16:31 | 0x1244f40 |
| 0 |
C | pgbouncer | pgbouncer | active | 127.0.0.1 | 44660 | 127.0.0.1 | 6432 | 2018-04-24 22:13:51 | 2018-04-24 22:17:12 | 0x1244640 |
| 0 |
(8 rows)
type | user | database | state | addr | port | local_addr | local_port | connect_time | request_time | ptr | link | rem
ote_pid | tls
------+--------+---------------------+-------+-----------+------+------------+------------+---------------------+---------------------+-----------+------+----
--------+-----
S | gitlab | gitlabhq_production | idle | 127.0.0.1 | 5432 | 127.0.0.1 | 35646 | 2018-04-24 22:15:15 | 2018-04-24 22:17:10 | 0x124dca0 | |
19980 |
(1 row)
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 컨테이너에서 수행됩니다.
- 마이그레이션 작업은 migrations 컨테이너에서 수행됩니다.
이러한 작업이 PostgreSQL에 직접 연결하고 실행할 수 있도록 각 서브차트에서 PostgreSQL 포트를 재정의해야 합니다:
파인 튜닝#
PgBouncer의 기본 설정은 대부분의 설치에 적합합니다. 특정 경우에는 성능 관련 및 리소스 관련 변수를 변경하여 처리량을 높이거나 데이터베이스에서 메모리 부족을 유발할 수 있는 리소스 사용을 제한할 수 있습니다.
공식 PgBouncer 설명서에서 매개변수와 해당 설명서를 찾을 수 있습니다. 아래는 Linux 패키지 설치에서 가장 관련성이 높은 매개변수와 기본값입니다:
pgbouncer['max_client_conn'](기본값:2048, 서버 파일 디스크립터 한도에 따라 다름) 이것은 PgBouncer의 "프론트엔드" 풀입니다: Rails에서 PgBouncer로의 연결.pgbouncer['default_pool_size'](기본값:100) 이것은 PgBouncer의 "백엔드" 풀입니다: PgBouncer에서 데이터베이스로의 연결.
default_pool_size의 이상적인 수는 데이터베이스에 액세스해야 하는 모든 프로비저닝된 서비스를 처리하기에 충분해야 합니다. 필요한 풀 크기 계산에 대한 자세한 지침은 PostgreSQL 튜닝을 참조하세요.
내부 로드 밸런서와 함께 여러 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 설명서의 제안된 수정 사항을 참조하세요.
메시지: LOG: invalid IP mask "md5": Name or service not known#
Geo 설명서의 제안된 수정 사항을 참조하세요.
