Azure Database for PostgreSQL - 유연한 서버의 PgBouncer

적용 대상: Azure Database for PostgreSQL - 유연한 서버

Azure Database for PostgreSQL 유연한 서버는 기본 제공 연결 풀링 솔루션으로 PgBouncer를 제공합니다. PgBouncer는 데이터베이스 서버별로 사용하도록 설정할 수 있는 선택적 기능입니다. 공용 액세스 네트워크와 프라이빗 액세스 네트워크 모두의 범용 및 메모리 최적화 컴퓨팅 계층에서 지원됩니다.

PgBouncer는 Azure Database for PostgreSQL 유연한 서버용 데이터베이스 서버와 동일한 VM(가상 머신)에서 실행됩니다. Postgres는 연결에 프로세스 기반 모델을 사용하므로 많은 유휴 연결을 유지하는 데 비용이 많이 듭니다. 서버가 수천 개 이상의 연결을 실행할 때 Postgres는 리소스 제약 조건에 직면하게 됩니다. PgBouncer의 주요 이점은 데이터베이스 서버에서 유휴 연결 및 수명이 짧은 연결을 개선하는 것입니다.

PgBouncer는 비동기 I/O를 활용하는 경량 모델을 사용합니다. 필요한 경우, 즉 열려 있는 트랜잭션 내부에 있거나 쿼리가 활성화된 경우에만 Postgres 연결을 사용합니다. 이 모델을 사용하면 낮은 오버헤드로 최대 10,000개의 연결까지 크기 조정할 수 있습니다.

PgBouncer는 데이터베이스 서버의 포트 6432에서 실행됩니다. 동일한 호스트 이름을 사용하도록 애플리케이션의 데이터베이스 연결 구성을 변경할 수 있지만 포트를 6432로 변경하여 PgBouncer 사용을 시작하고 유휴 연결의 향상된 크기 조정의 이점을 누릴 수 있습니다.

Azure Database for PostgreSQL 유연한 서버의 PgBouncer는 Microsoft Entra 인증을 지원합니다.

PgBouncer 사용 및 구성

PgBouncer를 사용하도록 설정하려면 Azure Portal의 서버 매개 변수 창으로 이동하여 PgBouncer를 검색하고 pgbouncer.enabled 설정을 true로 변경합니다. 서버를 다시 시작할 필요가 없습니다.

이러한 매개 변수를 사용하여 PgBouncer 설정을 구성할 수 있습니다.

참고 항목

다음 PgBouncer 서버 매개 변수 목록은 pgbouncer.enabled 서버 매개 변수가 true로 설정된 경우에만 서버 매개 변수 창에 표시됩니다. 그렇지 않으면 의도적으로 숨겨집니다.

매개 변수 이름 설명 기본값
pgbouncer.default_pool_size 이 매개 변수 값을 사용자/데이터베이스 쌍당 연결 수로 설정합니다. 50
pgbouncer.ignore_startup_parameters PgBouncer가 무시할 수 있는 매개 변수 목록을 쉼표로 구분하여 입력합니다. 예를 들어, PgBouncer가 extra_float_digits 매개 변수를 무시하도록 할 수 있습니다. 일부 매개 변수가 허용됩니다. 다른 모든 것은 오류를 발생시킵니다. 이 기능은 시작 패킷에 무조건 extra_float_digits=2를 설정하려는 과도한 JDBC(Java Database Connectivity)를 허용하는 데 필요합니다. 사용하는 라이브러리가 pq: unsupported startup parameter: extra_float_digits와 같은 오류를 보고하는 경우 이 옵션을 사용합니다.
pgbouncer.max_client_conn 이 매개 변수 값을 지원하려는 PgBouncer에 대한 최대 클라이언트 연결 수로 설정합니다. 5000
pgbouncer.max_prepared_statements 이 값이 0이 아닌 값으로 설정되면 PgBouncer는 트랜잭션 및 문 풀링 모드에서 클라이언트가 보낸 명령과 관련된 프로토콜 수준 명명된 준비된 문을 추적합니다. 0
pgbouncer.min_pool_size 이 값보다 낮은 경우 풀에 서버 연결을 추가합니다. 0
pgbouncer.pool_mode 이 매개 변수 값을 트랜잭션 풀링을 위한 TRANSACTION으로 설정합니다(대부분의 워크로드에 권장되는 설정). 트랜잭션
pgbouncer.query_wait_timeout 쿼리가 실행을 기다리는 데 허용되는 최대 시간(초)입니다. 이 시간 동안 쿼리가 서버에 할당되지 않으면 클라이언트의 연결이 끊어집니다. 120
pgbouncer.server_idle_timeout 서버 연결이 이 시간(초) 이상 유휴 상태이면 연결이 끊어집니다. 0이면 시간 제한이 사용하지 않도록 설정됩니다. 600
pgbouncer.stats_users pgBouncer 콘솔에 연결하고 읽기 전용 쿼리를 실행할 수 있는 데이터베이스 사용자의 쉼표로 구분된 목록입니다.

PgBouncer 구성에 대한 자세한 내용은 pgbouncer.ini 설명서를 참조하세요.

다음 표는 현재 PostgreSQL의 각 주 버전과 함께 배포된 PgBouncer 버전을 보여 줍니다.

PostgreSQL 16 PostgreSQL 15 PostgreSQL 14 PostgreSQL 13 PostgreSQL 12 PostgreSQL 11
1.22.1 1.22.1 1.22.1 1.22.1 1.22.1 1.22.1

이점

Azure Database for PostgreSQL 유연한 서버에 기본 제공 PgBouncer 기능을 사용하면 다음과 같은 이점을 가져올 수 있습니다.

  • 간소화된 구성의 편의성: PgBouncer는 Azure Database for PostgreSQL 유연한 서버와 통합되어 있으므로 별도의 설치나 복잡한 설정이 필요하지 않습니다. 서버 매개 변수에서 직접 구성할 수 있습니다.

  • 관리되는 서비스의 안정성: PgBouncer는 Azure 관리되는 서비스의 이점을 제공합니다. 예를 들어, Azure는 PgBouncer의 업데이트를 관리합니다. 자동 업데이트는 수동 유지 관리의 필요성을 없애고 PgBouncer가 최신 기능과 보안 패치를 통해 최신 상태를 유지하도록 보장합니다.

  • 다양한 연결 형식 지원: Azure Database for PostgreSQL 유연한 서버의 PgBouncer는 공용 연결과 프라이빗 연결을 모두 지원합니다. 이를 사용하여 특정 요구 사항에 따라 개인 네트워크를 통해 보안 연결을 설정하거나 외부로 연결할 수 있습니다.

  • 장애 조치(failover) 시나리오의 고가용성: 장애 조치(failover) 중에 대기 서버가 기본 역할로 승격되면 PgBouncer는 새로 승격된 대기 서버에서 원활하게 다시 시작됩니다. 애플리케이션 연결 문자열을 변경할 필요가 없습니다. 이 기능은 지속적인 가용성을 보장하고 애플리케이션 연결 풀의 중단을 최소화하는 데 도움이 됩니다.

PgBouncer 모니터링

메트릭

Azure Database for PostgreSQL 유연한 서버는 PgBouncer 연결 풀링을 모니터링하기 위한 6가지 메트릭을 제공합니다.

표시 이름 메트릭 ID 단위 description 차원 기본값 사용
활성 클라이언트 연결(미리 보기) client_connections_active Count Azure Database for PostgreSQL 유연한 서버 연결과 연결된 클라이언트의 연결입니다. DatabaseName 아니요
클라이언트 연결 대기 중(미리 보기) client_connections_waiting Count 서비스를 제공하기 위해 Azure Database for PostgreSQL 유연한 서버 연결을 기다리는 클라이언트의 연결입니다. DatabaseName 아니요
활성 서버 연결(미리 보기) server_connections_active Count 클라이언트 연결이 사용하는 Azure Database for PostgreSQL 유연한 서버에 대한 연결 DatabaseName 아니요
유휴 서버 연결(미리 보기) server_connections_idle Count 유휴 상태이고 새 클라이언트 연결을 서비스할 준비가 된 Azure Database for PostgreSQL 유연한 서버에 대한 연결입니다. DatabaseName 아니요
풀링된 총 연결 수(미리 보기) total_pooled_connections Count 현재 풀링된 연결 수 DatabaseName 아니요
연결 풀 수(미리 보기) num_pools Count 총 연결 풀 수 DatabaseName 아니요

자세한 내용은 PgBouncer 메트릭을 참조하세요.

관리 콘솔

PgBouncer는 pgbouncer라는 내부 데이터베이스도 제공합니다. 해당 데이터베이스에 연결하면 PgBouncer의 현재 상태에 대한 정보를 제공하는 SHOW 명령을 실행할 수 있습니다.

pgbouncer 데이터베이스에 연결하려면:

  1. pgBouncer.stats_users 매개 변수를 기존 사용자의 이름(예: myUser)으로 설정하고 변경 내용을 적용합니다.

  2. 이 사용자로 pgbouncer 데이터베이스에 연결하고 포트를 6432로 설정합니다.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=myPassword sslmode=require"
    

데이터베이스에 연결한 후 SHOW 명령을 사용하여 PgBouncer 통계를 확인합니다.

  • SHOW HELP: 사용 가능한 모든 SHOW 명령을 나열합니다.
  • SHOW POOLS: 각 풀에 대한 각 상태의 연결 수를 표시합니다.
  • SHOW DATABASES: 각 데이터베이스에 현재 적용된 연결 제한을 표시합니다.
  • SHOW STATS: 모든 데이터베이스의 요청 및 트래픽에 대한 통계를 표시합니다.

PgBouncer SHOW 명령에 대한 자세한 내용은 관리 콘솔을 참조하세요.

PgBouncer를 사용하도록 애플리케이션 전환

PgBouncer 사용을 시작하려면 다음 단계를 따릅니다.

  1. 데이터베이스 서버에 연결하되 일반 포트 5432 대신 포트 6432를 사용합니다. 이 연결이 작동하는지 확인합니다.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
    
  2. PgBouncer에 대해 QA 환경에서 애플리케이션을 테스트하여 호환성 문제가 없는지 확인합니다. PgBouncer 프로젝트는 호환성 행렬을 제공하며, 대부분의 사용자에게 트랜잭션 풀링을 사용하는 것이 좋습니다.

  3. 5432 대신 포트 6432에 연결하도록 프로덕션 애플리케이션을 변경합니다. 호환성 문제를 나타낼 수 있는 애플리케이션 쪽 오류를 모니터링합니다.

영역 중복 고가용성의 PgBouncer

영역 중복, HA(고가용성) 서버에서 주 서버는 PgBouncer를 실행합니다. 포트 6432를 통해 주 서버의 PgBouncer에 연결할 수 있습니다. 장애 조치(failover) 후 PgBouncer는 현재 주 서버인 새로 승격된 대기 서버에서 다시 시작됩니다. 따라서 애플리케이션 연결 문자열은 장애 조치(failover) 후에도 동일하게 유지됩니다.

다른 연결 풀에서 PgBouncer 사용

경우에 따라 이미 애플리케이션 쪽 연결 풀이 있거나 애플리케이션 측에 PgBouncer가 설정되어 있을 수 있습니다(예: Azure Kubernetes Service 사이드카). 이러한 경우 기본 제공된 PgBouncer 기능은 유휴 연결 크기 조정의 이점을 제공하므로 여전히 유용할 수 있습니다.

데이터베이스 서버에서 PgBouncer와 함께 애플리케이션 쪽 풀을 사용하는 것이 유용할 수 있습니다. 여기서 애플리케이션 쪽 풀은 초기 연결 대기 시간을 줄이는 이점을 제공하며(연결을 초기화하는 왕복 속도가 훨씬 빠르기 때문에) 데이터베이스 쪽 PgBouncer는 유휴 연결 크기 조정 이점을 제공합니다.

제한 사항

  • PgBouncer 기능은 현재 Burstable 서버 컴퓨팅 계층에서 지원되지 않습니다. 컴퓨팅 계층을 범용 또는 메모리 최적화에서 버스트 가능으로 변경하면 PgBouncer 기능이 손실됩니다.

  • 크기 조정 작업, HA 장애 조치(failover) 또는 다시 시작 중에 서버가 다시 시작될 때마다 PgBouncer와 VM도 다시 시작됩니다. 그런 다음 기존 연결을 다시 설정해야 합니다.

  • 포털에는 모든 PgBouncer 매개 변수가 표시되지 않습니다. PgBouncer를 사용하도록 설정하고 매개 변수를 저장한 후에는 서버 매개 변수 창을 닫은 다음(예: 개요 선택) 서버 매개 변수 창으로 돌아가야 합니다.

  • 준비된 문과 함께 트랜잭션 및 문 풀 모드를 사용할 수 없습니다. 선택한 풀 모드의 다른 제한 사항을 확인하려면 PgBouncer 설명서를 참조하세요.

  • PgBouncer가 기능으로 배포되면 잠재적인 단일 실패 지점이 됩니다. PgBouncer 기능이 다운되면 전체 데이터베이스 연결 풀이 중단되고 애플리케이션이 가동 중지 시간될 수 있습니다. 단일 실패 지점을 완화하려면 Azure VM에서 고가용성을 위해 부하 분산 장치 뒤에 여러 PgBouncer 인스턴스를 설정할 수 있습니다.

  • PgBouncer는 단일 스레드 아키텍처를 사용하는 경량 애플리케이션입니다. 이 디자인은 대부분의 애플리케이션 워크로드에 적합합니다. 그러나 다수의 단기 연결을 만드는 애플리케이션에서 이 디자인은 pgBouncer 성능에 영향을 미치고 애플리케이션 크기 조정 기능을 제한할 수 있습니다. 다음 방식 중 하나를 시도해야 할 수도 있습니다.

    • Azure VM의 여러 PgBouncer 인스턴스에 연결 부하를 분산합니다.
    • Azure VM에서 PgCat과 같은 다중 스레드 솔루션을 포함한 대체 솔루션을 사용하는 것이 좋습니다.

Important

기본 제공 PgBouncer 기능에 대한 매개 변수 pgbouncer.client_tls_sslmode는 Azure Database for PostgreSQL 유연한 서버에서 더 이상 사용되지 않습니다.

require_secure_transport 서버 매개 변수를 ON으로 설정하여 Azure Database for PostgreSQL 유연한 서버 연결에 대한 TLS/SSL을 적용하는 경우 TLS/SSL은 기본 제공 PgBouncer 기능에 대한 연결에 자동으로 적용됩니다. 이 설정은 기본적으로 새 Azure Database for PostgreSQL 유연한 서버 인스턴스를 만들고 기본 제공 PgBouncer 기능을 사용하도록 설정할 때 켜져 있습니다. 자세한 내용은 프라이빗 액세스를 사용한 Azure Database for PostgreSQL - 유연한 서버의 네트워킹 개요를 참조하세요.

간소화된 관리, 기본 제공된 고가용성, 컨테이너화된 애플리케이션과의 쉬운 연결, 가장 널리 사용되는 구성 매개 변수를 사용하는 기능을 원하는 고객은 기본으로 제공된 PgBouncer 기능을 선택하는 것이 좋습니다. 다중 스레드 확장성, 모든 매개 변수에 대한 전체 제어 및 디버깅 환경을 원하는 고객은 Azure VM에 PgBouncer를 설정하는 것이 좋을 수도 있습니다.

다음 단계