Udostępnij za pośrednictwem


PgBouncer w usłudze Azure Database dla PostgreSQL

Azure Database for PostgreSQL wystąpienia serwera elastycznego oferują PgBouncer jako wbudowane rozwiązanie do buforowania połączeń. PgBouncer to opcjonalna funkcja, którą można włączyć dla poszczególnych baz danych. Obsługiwana jest w warstwach obliczeniowych ogólnego przeznaczenia i zoptymalizowanych pod kątem pamięci, zarówno w sieciach o dostępie publicznym, jak i prywatnym.

Narzędzie PgBouncer działa na tej samej maszynie wirtualnej co serwer bazy danych dla wystąpienia serwera elastycznego Azure Database for PostgreSQL. Baza danych Postgres używa modelu opartego na procesie dla połączeń, więc utrzymywanie wielu bezczynnych połączeń jest kosztowne. Postgres napotyka na ograniczenia zasobów, kiedy serwer obsługuje więcej niż kilka tysięcy połączeń. Główną zaletą narzędzia PgBouncer jest poprawienie bezczynnych połączeń i krótkotrwałych połączeń na serwerze bazy danych.

Narzędzie PgBouncer używa uproszczonego modelu, który wykorzystuje asynchroniczne operacje we/wy. Używa ona połączeń Postgres tylko wtedy, gdy jest to konieczne — oznacza to, że wewnątrz otwartej transakcji lub gdy zapytanie jest aktywne. Ten model umożliwia skalowanie do 10 000 połączeń z niskim obciążeniem.

Wersja narzędzia PgBouncer wdrożona we wszystkich obsługiwanych głównych wersjach silnika w Azure Database for PostgreSQL to 1.25.1. Narzędzie PgBouncer działa na porcie 6432 na serwerze bazy danych. Możesz zmienić konfigurację połączenia bazy danych aplikacji, aby używać tej samej nazwy hosta, ale zmienić port na 6432, aby rozpocząć korzystanie z narzędzia PgBouncer i skorzystać z ulepszonego skalowania bezczynnych połączeń.

Narzędzie PgBouncer w usłudze Azure Database for PostgreSQL obsługuje uwierzytelnianie Microsoft Entra (Azure AD).

Włączanie i konfigurowanie narzędzia PgBouncer

Narzędzie PgBouncer jest szczególnie przydatne w aplikacjach transakcyjnych, w których częste zmiany połączeń mogą obniżyć wydajność. Jest ona domyślnie włączona na porcie 6432 i można z nią nawiązać połączenie przy użyciu tej samej nazwy hosta co serwer PostgreSQL, ale z portem 6432 zamiast domyślnego portu 5432.

Aby włączyć usługę PgBouncer, przejdź do parametrów Server okienku w portalu Azure, wyszukaj PgBouncer i zmień ustawienie pgbouncer.enabled na true. Nie ma potrzeby ponownego uruchamiania serwera.

Ustawienia narzędzia PgBouncer można skonfigurować przy użyciu tych parametrów.

Uwaga / Notatka

Poniższa lista parametrów serwera PgBouncer jest widoczna w okienku Parametry serwera tylko wtedy, gdy pgbouncer.enabled parametr serwera ma wartość true. W przeciwnym razie są celowo ukryte.

Nazwa parametru Description Default
pgbouncer.default_pool_size Ile połączeń serwera zezwala na parę użytkowników/bazy danych. 50
pgbouncer.ignore_startup_parameters Rozdzielona przecinkami lista parametrów, które narzędzie PgBouncer może zignorować, ponieważ będą obsługiwane przez administratora.
pgbouncer.max_client_conn Dozwolona maksymalna liczba połączeń klientów. 5000
pgbouncer.max_prepared_statements Gdy ustawisz to na wartość inną niż zero, PgBouncer śledzi polecenia związane z nazwanymi instrukcjami przygotowanymi na poziomie protokołu, wysyłane przez klienta w trybie puli transakcji i instrukcji. 0
pgbouncer.min_pool_size Dodaj więcej połączeń serwera do puli, jeśli ich liczba jest poniżej tej wartości. 0
pgbouncer.pool_mode Określa, kiedy można ponownie użyć połączenia serwera przez innych klientów. transakcja
pgbouncer.query_wait_timeout Maksymalny czas (w sekundach), jaki zapytania mogą spędzać oczekując na wykonanie. Jeśli zapytanie nie jest przypisane do serwera w tym czasie, klient zostanie odłączony. 120
pgbouncer.server_idle_timeout Jeśli połączenie z serwerem zostało bezczynne dłużej niż to wiele sekund, zostanie usunięte. Jeśli wartość 0, limit czasu jest wyłączony. 600
pgbouncer.stats_users Rozdzielona przecinkami lista użytkowników bazy danych, którzy mogą łączyć się i uruchamiać zapytania tylko do odczytu w konsoli pgBouncer.

Aby uzyskać więcej informacji na temat konfiguracji narzędzia PgBouncer, zobacz dokumentację pgbouncer.ini.

Korzyści

Korzystając z wbudowanej funkcjonalności PgBouncer na swoim wystąpieniu serwera elastycznego Azure Database for PostgreSQL, uzyskujesz następujące korzyści:

  • Wygoda uproszczonej konfiguracji: Ponieważ narzędzie PgBouncer jest zintegrowane z wystąpieniem serwera elastycznego Azure Database for PostgreSQL, nie potrzebujesz oddzielnej instalacji ani złożonej konfiguracji. Można ją skonfigurować bezpośrednio z parametrów serwera.

  • Niezawodność usługi zarządzanej: PgBouncer oferuje zalety zarządzanych usług Azure. Na przykład Azure zarządza aktualizacjami narzędzia PgBouncer. Aktualizacje automatyczne eliminują potrzebę ręcznej konserwacji i zapewniają aktualność narzędzia PgBouncer dzięki najnowszym funkcjom i poprawkom zabezpieczeń.

  • Support dla różnych typów połączeń: PgBouncer w Azure Database for PostgreSQL zapewnia obsługę połączeń publicznych i prywatnych. Służy do nawiązywania bezpiecznych połączeń za pośrednictwem sieci prywatnych lub nawiązywania połączenia zewnętrznego w zależności od konkretnych wymagań.

  • Wysoka dostępność w scenariuszach trybu failover: jeśli serwer zapasowy jest promowany do roli głównej podczas awarii w trybie failover, narzędzie PgBouncer bezproblemowo uruchamia się ponownie w nowo promowanej zapasówce. Nie musisz wprowadzać żadnych zmian w parametry połączenia aplikacji. Ta możliwość pomaga zapewnić ciągłą dostępność i zminimalizować zakłócenia puli połączeń aplikacji.

Monitorowanie narzędzia PgBouncer

Metrics

Metryki narzędzia PgBouncer umożliwiają monitorowanie wydajności procesu PgBouncer, w tym szczegółów dotyczących aktywnych połączeń, bezczynnych połączeń, łącznej liczby połączeń w puli i liczby pul połączeń. Każda metryka jest emitowana w 1-minutowym interwale i ma do 93 dni historii. Klienci mogą konfigurować alerty dotyczące metryk, a także uzyskiwać dostęp do nowych wymiarów metryk w celu dzielenia i filtrowania danych metryk według nazwy bazy danych.

Jak włączyć metryki narzędzia PgBouncer

  • Aby monitorować metryki PgBouncer, upewnij się, że funkcja pgbouncer jest włączona poprzez parametr serwera pgbouncer.enabled, a także że parametr metryk metrics.pgbouncer_diagnostics jest włączony.
  • Te parametry są dynamiczne i nie wymagają ponownego uruchomienia wystąpienia.
  • Metryki narzędzia PgBouncer są domyślnie wyłączone.

Lista metryk narzędzia PgBouncer

nazwa wyświetlana Identyfikator metryki Unit Description Wymiar Domyślnie włączone
Aktywne połączenia klienta client_connections_active Liczba Połączenia z klientami, które są związane z elastycznym serwerem Azure Database for PostgreSQL. DatabaseName Nie.
Oczekiwanie na połączenia klientów client_connections_waiting Liczba Połączenia od klientów oczekujących na obsługę przez elastyczny serwer Azure Database for PostgreSQL. DatabaseName Nie.
Aktywne połączenia serwera server_connections_active Liczba Połączenia z serwerem elastycznym Azure Database for PostgreSQL, które są używane przez połączenie klienta. DatabaseName Nie.
Bezczynne połączenia serwera server_connections_idle Liczba Połączenia z elastycznym serwerem Azure Database for PostgreSQL, które są bezczynne i gotowe do obsłużenia nowego połączenia klienta. DatabaseName Nie.
Całkowita liczba połączonych połączeń total_pooled_connections Liczba Bieżąca liczba połączeń w puli. DatabaseName Nie.
Liczba pul połączeń num_pools Liczba Łączna liczba pul połączeń. DatabaseName Nie.

Zagadnienia dotyczące korzystania z metryk narzędzia PgBouncer

  • Metryki narzędzia PgBouncer korzystające z wymiaru DatabaseName mają limit 30 baz danych .
  • W jednostce Burstable SKU, istnieje limit 10 baz danych, które mają wymiar DatabaseName.
  • Limit wymiarów DatabaseName jest stosowany do kolumny OID, która odzwierciedla kolejność tworzenia bazy danych.

Aby uzyskać więcej informacji, zobacz Metryki narzędzia PgBouncer.

Dzienniki

Azure Database for PostgreSQL elastyczny serwer udostępnia dzienniki PgBouncer, które ułatwiają inspekcję działania puli połączeń oraz rozwiązywanie problemów, takich jak przerywanie połączeń, błędy uwierzytelniania czy wyczerpanie puli. Dzienniki pgBouncer zawierają szczegółowe informacje, takie jak błędy uwierzytelniania, zdarzenia cyklu życia połączenia, błędy i zmiany stanu serwera. Te szczegóły są przydatne do identyfikowania wąskich gardeł połączenia i anomalii behawioralnych.

Włączanie dzienników

Włącz ustawienia diagnostyczne logów, aby automatycznie generować logi PgBouncer. Log Analytics obsługuje dwa typy schematów: Azure diagnostics i Resource-Specific. Aby uzyskać więcej informacji, zobacz Wspólne i schematy specyficzne dla usług dla dzienników zasobów Azure.

  • Schemat diagnostyczny Azure

    • Dzienniki są wyświetlane w AzureDiagnostics tabeli.
    • Filtruj przy użyciu: Category == "PostgreSQLFlexPGBouncer".
  • Schemat Specyficzny dla Zasobów

    • Dzienniki są wyświetlane w PGSQLPgBouncer tabeli.
    • Łatwiejsze do zapytania, ustrukturyzowany format.

Przykładowe zapytania KQL

Azure diagnostics Schema:

AzureDiagnostics
| where Category == "PostgreSQLFlexPGBouncer"
| where LogicalServerName_s =~ "your-server-name"
| order by TimeGenerated desc

Schemat specyficzny dla zasobów:

PGSQLPgBouncer
| where _ResourceId =~ "your-server-name"
| order by TimeGenerated desc

Uwaga / Notatka

Nazwy pól i format schematu mogą się nieznacznie różnić w zależności od używanego schematu (Skonsolidowany vs Specyficzny dla Zasobów).

Konsola administracyjna

PgBouncer udostępnia również wewnętrzną bazę danych o nazwie pgbouncer. Po nawiązaniu połączenia z bazą danych możesz uruchomić SHOW polecenia zawierające informacje o bieżącym stanie narzędzia PgBouncer.

Aby nawiązać połączenie z bazą pgbouncer danych:

  1. pgBouncer.stats_users Ustaw parametr na nazwę istniejącego użytkownika (na przykład myUser), a następnie zastosuj zmiany.

  2. Połącz się z bazą pgbouncer danych jako ten użytkownik i ustaw port jako 6432:

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

Po nawiązaniu połączenia z bazą danych użyj SHOW poleceń, aby wyświetlić statystyki narzędzia PgBouncer:

  • SHOW HELP: Wyświetl listę wszystkich dostępnych SHOW poleceń.
  • SHOW POOLS: Pokaż liczbę połączeń w każdym stanie dla każdej puli.
  • SHOW DATABASES: Pokaż bieżące zastosowane limity połączeń dla każdej bazy danych.
  • SHOW STATS: Pokaż statystyki dotyczące żądań i ruchu dla każdej bazy danych.

Aby uzyskać więcej informacji na temat poleceń narzędzia PgBouncer SHOW , zobacz Konsola administracyjna.

Przełączanie aplikacji w celu użycia narzędzia PgBouncer

Aby rozpocząć korzystanie z narzędzia PgBouncer, wykonaj następujące kroki:

  1. Połącz się z serwerem bazy danych, jednak w tym celu użyj portu 6432 zamiast zwykłego portu 5432. Sprawdź, czy to połączenie działa.

    psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=<password> sslmode=require"
    
  2. Przetestuj aplikację w środowisku KONTROLI jakości pod kątem narzędzia PgBouncer, aby upewnić się, że nie masz żadnych problemów ze zgodnością. Projekt PgBouncer zawiera macierz zgodności i zalecamy buforowanie transakcji dla większości użytkowników.

  3. Zmień aplikację produkcyjną, aby nawiązać połączenie z portem 6432 zamiast 5432. Monitoruj wszelkie błędy po stronie aplikacji, które mogą wskazywać na problemy ze zgodnością.

PgBouncer w strefowo nadmiarowej wysokiej dostępności

W serwerach o strefowej redundancji i wysokiej dostępności (HA), narzędzie PgBouncer działa na serwerze podstawowym. Możesz nawiązać połączenie z serwerem PgBouncer na serwerze podstawowym za pośrednictwem portu 6432. Po przejściu w tryb failover system ponownie uruchamia narzędzie PgBouncer na nowo promowanym trybie wstrzymania, który jest teraz serwerem podstawowym. Dlatego ciąg połączenia aplikacji pozostaje taki sam po awaryjnym przełączeniu.

PgBouncer z elastycznymi klastrami

Narzędzie PgBouncer jest również dostępne dla klastrów elastycznych. Każdy węzeł w klastrze elastycznym ma własne wystąpienie narzędzia PgBouncer. Po jej włączeniu port 6432 kieruje do narzędzia PgBouncer w węźle koordynatora klastra elastycznego. Ponadto port 8432 kieruje do wystąpień narzędzia PgBouncer uruchomionych w węzłach roboczych w klastrze.

Ograniczenia

  • Funkcja PgBouncer obecnie nie obsługuje elastycznej warstwy obliczeniowej serwera. Jeśli zmienisz warstwę obliczeniową z warstwy ogólnego przeznaczenia lub zoptymalizowanej pod kątem pamięci na elastyczną, utracisz wbudowane możliwości PgBouncer.
  • Za każdym razem, gdy serwer jest ponownie uruchamiany podczas operacji skalowania, przełączenia awaryjnego (HA) lub restartu, system ponownie uruchamia PgBouncer i maszynę wirtualną. Następnie należy ponownie ustanowić istniejące połączenia.
  • Portal nie wyświetla wszystkich parametrów narzędzia PgBouncer. Po włączeniu narzędzia PgBouncer i zapisaniu parametrów należy zamknąć okienko Parametry serwera (na przykład wybrać pozycję Przegląd), a następnie wrócić do okienka Parametry serwera , aby wyświetlić wszystkie parametry.
  • Nie można używać trybów puli zapytań wraz z przygotowanymi zapytaniami. Bieżąca wersja narzędzia PgBouncer dodaje obsługę przygotowanych zapytań w trybie transakcji. Tę obsługę można włączyć i skonfigurować za pomocą parametru max_prepared_statements. Ustawienie tego parametru powyżej wartości domyślnej 0 powoduje włączenie obsługi zapytań przygotowanych. To wsparcie dotyczy tylko instrukcji przygotowanych na poziomie protokołu. W przypadku większości języków programowania ta obsługa oznacza, że aplikacja używa funkcji libpqPQprepare na kliencie, wysyłając polecenia na poziomie protokołu, które pgBouncer może przechwycić, zamiast wydawać dynamiczne polecenie SQL podobne do PREPARE proc AS, który wysyła tekst, który pgBouncer nie zinterpretuje poprawnie. Aby sprawdzić inne ograniczenia wybranego trybu puli, sprawdź dokumentację PgBouncer.
  • Jeśli wdrożysz narzędzie PgBouncer jako funkcję, stanie się to potencjalnym pojedynczym punktem awarii. Jeśli funkcja PgBouncer nie działa, może zakłócić całą pulę połączeń bazy danych i spowodować przestój aplikacji. Aby wyeliminować pojedynczy punkt awarii, możesz skonfigurować wiele wystąpień narzędzia PgBouncer za modułem równoważenia obciążenia w celu zapewnienia wysokiej dostępności na maszynach wirtualnych Azure.
  • PgBouncer to uproszczona aplikacja korzystająca z architektury jednowątkowej. Ten projekt doskonale sprawdza się w przypadku większości obciążeń aplikacji. Jednak w aplikacjach, które tworzą dużą liczbę krótkotrwałych połączeń, ten projekt może mieć wpływ na wydajność narzędzia PgBouncer i ograniczyć możliwość skalowania aplikacji. Może być konieczne wypróbowanie jednego z następujących podejść:
    • Rozłóż obciążenie połączenia pomiędzy wiele instancji PgBouncer na maszynach wirtualnych Azure.
    • Rozważ alternatywne rozwiązania, w tym rozwiązania wielowątkowe, takie jak PgCat na maszynach wirtualnych Azure.

Ważne

Parametr pgbouncer.client_tls_sslmode dla wbudowanej funkcji PgBouncer jest przestarzały w Azure Database for PostgreSQL.

W przypadku wymuszenia użycia protokołu TLS/SSL dla połączeń z elastycznym wystąpieniem serwera Azure Database for PostgreSQL poprzez ustawienie parametru serwera require_secure_transport na ON, protokół TLS/SSL jest automatycznie wymuszany również dla połączeń z wbudowaną funkcją PgBouncer. To ustawienie jest domyślnie włączone podczas tworzenia nowego wystąpienia serwera elastycznego Azure Database for PostgreSQL i włączania wbudowanej funkcji PgBouncer. Aby uzyskać więcej informacji, zobacz Secure connectivity with TLS in Azure Database for PostgreSQL (>/c0).

Dla klientów, którzy chcą uprościć zarządzanie, wbudowaną wysoką dostępność, łatwą łączność z aplikacjami konteneryzowanymi i możliwość korzystania z najpopularniejszych parametrów konfiguracji, wbudowana funkcja PgBouncer jest dobrym wyborem. W przypadku klientów, którzy chcą skalowalność wielowątkową, pełną kontrolę nad wszystkimi parametrami i środowiskiem debugowania, skonfigurowanie narzędzia PgBouncer na maszynach wirtualnych Azure może być alternatywą.