Udostępnij za pośrednictwem


Narzędzie PgBouncer w usłudze Azure Database for PostgreSQL — serwer elastyczny

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

Serwer elastyczny usługi Azure Database for PostgreSQL oferuje rozwiązanie PgBouncer jako wbudowane rozwiązanie do buforowania połączeń. PgBouncer to opcjonalna funkcja, którą można włączyć dla poszczególnych baz danych. Jest ona obsługiwana w warstwach obliczeniowych Ogólnego przeznaczenia i Zoptymalizowane pod kątem pamięci zarówno w sieciach dostępu publicznego, jak i prywatnego.

Narzędzie PgBouncer działa na tej samej maszynie wirtualnej co serwer bazy danych dla serwera elastycznego usługi 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. Usługa Postgres przechodzi do ograniczeń zasobów, gdy serwer działa ponad 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 — w przypadku, gdy wewnątrz otwartej transakcji lub gdy zapytanie jest aktywne. Ten model umożliwia skalowanie do 10 000 połączeń z niskim obciążeniem.

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ń.

Serwer elastyczny PgBouncer w usłudze Azure Database for PostgreSQL obsługuje uwierzytelnianie firmy Microsoft (Azure AD).

Włączanie i konfigurowanie narzędzia PgBouncer

Aby włączyć usługę PgBouncer, przejdź do okienka Parametry serwera w witrynie Azure Portal, wyszukaj ciąg PgBouncer i zmień pgbouncer.enabled ustawienie na true. Nie ma potrzeby ponownego uruchamiania serwera.

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

Uwaga

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 opis Wartość domyślna
pgbouncer.default_pool_size Ustaw tę wartość parametru na liczbę połączeń na parę użytkowników/bazy danych. 50
pgbouncer.ignore_startup_parameters Wprowadź rozdzielaną przecinkami listę parametrów, które narzędzie PgBouncer może zignorować. Można na przykład zezwolić narzędziu PgBouncer na zignorowanie parametru extra_float_digits . Niektóre parametry są dozwolone; wszystkie inne zgłaszają błąd. Ta możliwość jest wymagana, aby tolerować nadmiernie entuzjastyczną łączność z bazą danych Java (JDBC), która chce bezwarunkowo ustawić extra_float_digits=2 w pakietach startowych. Użyj tej opcji, jeśli biblioteka, której używasz, zgłasza błędy, takie jak pq: unsupported startup parameter: extra_float_digits.
pgbouncer.max_client_conn Ustaw tę wartość parametru na największą liczbę połączeń klienta z narzędziem PgBouncer, które chcesz obsługiwać. 5000
pgbouncer.max_prepared_statements Gdy jest to ustawione na wartość inną niż zero PgBouncer śledzi poziom protokołu o nazwie przygotowane instrukcje powiązane polecenia wysyłane przez klienta w trybie transakcji i instrukcji puli. 0
pgbouncer.min_pool_size Dodaj więcej połączeń serwera do puli, jeśli poniżej tej liczby. 0
pgbouncer.pool_mode Ustaw tę wartość parametru na TRANSACTION dla buforowania transakcji (co jest zalecanym ustawieniem dla większości obciążeń). transakcja
pgbouncer.query_wait_timeout Maksymalny czas (w sekundach) zapytań może spędzać czas oczekiwania 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.

Wersja narzędzia PgBouncer

Obecnie wersja narzędzia PgBouncer wdrożona we wszystkich obsługiwanych wersjach głównych aparatu (16, 15, 14, 13, 12, 11) w usłudze Azure Database for PostgreSQL — serwer elastyczny to 1.22.1.

Świadczenia

Korzystając z wbudowanej funkcji PgBouncer z elastycznym serwerem usługi Azure Database for PostgreSQL, możesz uzyskać następujące korzyści:

  • Wygoda uproszczonej konfiguracji: ponieważ narzędzie PgBouncer jest zintegrowane z serwerem elastycznym usługi Azure Database for PostgreSQL, nie ma potrzeby oddzielnej instalacji ani złożonej konfiguracji. Można ją skonfigurować bezpośrednio z parametrów serwera.

  • Niezawodność usługi zarządzanej: narzędzie PgBouncer oferuje zalety usług zarządzanych platformy Azure. Na przykład platforma 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ń.

  • Obsługa różnych typów połączeń: narzędzie PgBouncer w usłudze Azure Database for PostgreSQL — serwer elastyczny 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 rezerwowy jest promowany do roli podstawowej podczas pracy w trybie failover, narzędzie PgBouncer bezproblemowo uruchamia się ponownie w nowo promowanej rezerwie. 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

Metryki

Elastyczny serwer usługi Azure Database for PostgreSQL udostępnia sześć metryk monitorowania puli połączeń pgBouncer:

Display name Identyfikator metryki Jednostka opis Wymiar Włączone domyślne
Aktywne połączenia klienckie (wersja zapoznawcza) client_connections_active Count Połączenia z klientami skojarzonymi z elastycznym połączeniem serwera usługi Azure Database for PostgreSQL DatabaseName Nie.
Oczekujące połączenia klienta (wersja zapoznawcza) client_connections_waiting Count Połączenia od klientów oczekujących na połączenie serwera elastycznego usługi Azure Database for PostgreSQL z usługą DatabaseName Nie.
Połączenia z aktywnym serwerem (wersja zapoznawcza) server_connections_active Count Połączenia z serwerem elastycznym usługi Azure Database for PostgreSQL używanym przez połączenie klienckie DatabaseName Nie.
Bezczynne połączenia z serwerem (wersja zapoznawcza) server_connections_idle Count Połączenia z serwerem elastycznym usługi Azure Database for PostgreSQL, które są bezczynne i gotowe do obsługi nowego połączenia klienta DatabaseName Nie.
Łączna liczba połączeń w puli (wersja zapoznawcza) total_pooled_connections Count Bieżąca liczba połączeń w puli DatabaseName Nie.
Liczba pul połączeń (wersja zapoznawcza) num_pools Count Łączna liczba pul połączeń DatabaseName Nie.

Aby dowiedzieć się więcej, zobacz Metryki narzędzia PgBouncer.

Konsola administracyjna

Narzędzie 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=myPassword 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=myPassword 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 strefowo nadmiarowej wysokiej dostępności (HA) serwer podstawowy uruchamia narzędzie PgBouncer. Możesz nawiązać połączenie z serwerem PgBouncer na serwerze podstawowym za pośrednictwem portu 6432. Po przejściu w tryb failover narzędzie PgBouncer zostanie uruchomione ponownie na nowo podwyższonym poziomie rezerwowym, który jest teraz serwerem podstawowym. Dlatego aplikacja parametry połączenia pozostaje taka sama po przejściu w tryb failover.

Używanie narzędzia PgBouncer z innymi pulami połączeń

W niektórych przypadkach możesz już mieć pulę połączeń po stronie aplikacji lub skonfigurować narzędzie PgBouncer po stronie aplikacji (na przykład przyczepkę usługi Azure Kubernetes Service). W takich przypadkach wbudowana funkcja PgBouncer może być nadal przydatna, ponieważ zapewnia korzyści płynące ze skalowania bezczynności połączeń.

Użycie puli po stronie aplikacji wraz z narzędziem PgBouncer na serwerze bazy danych może być korzystne. W tym miejscu pula po stronie aplikacji przynosi korzyści z mniejszego opóźnienia początkowego połączenia (ponieważ inicjowanie połączenia jest znacznie szybsze), a po stronie bazy danych narzędzie PgBouncer zapewnia skalowanie bezczynności połączeń.

Ograniczenia

  • Funkcja PgBouncer nie jest obecnie obsługiwana w warstwie obliczeniowej serwera z możliwością rozszerzenia. Jeśli zmienisz warstwę obliczeniową z warstwy Ogólnego przeznaczenia lub Zoptymalizowane pod kątem pamięci na Możliwość serii, utracisz wbudowaną funkcję PgBouncer.

  • Zawsze, gdy serwer jest uruchamiany ponownie podczas operacji skalowania, trybu failover wysokiej dostępności lub ponownego uruchamiania, narzędzie PgBouncer i maszyna wirtualna również są ponownie uruchamiane. 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.

  • Nie można używać trybów puli instrukcji wraz z przygotowanymi instrukcjami. Bieżąca wersja narzędzia PgBouncer dodała obsługę przygotowanych instrukcji wewnątrz trybu transakcji. Ta obsługa może być włączona i skonfigurowana za pośrednictwem parametru max_prepared_statements. Ustawienie tego parametru powyżej wartości domyślnej 0 spowoduje włączenie obsługi przygotowanych instrukcji. Ta obsługa dotyczy tylko instrukcji przygotowanych na poziomie protokołu. W przypadku większości języków programowania oznacza to, że używamy funkcji libpq PQprepare na kliencie, wysyłając polecenia na poziomie protokołu, które narzędzie PgBouncer może przechwycić, zamiast wydawać dynamiczne polecenie SQL podobne do PREPARE proc AS, które wysyła tekst, który pgBouncer nie zinterpretuje poprawnie. Aby sprawdzić inne ograniczenia wybranego trybu puli, zapoznaj się z dokumentacją narzędzia PgBouncer.

  • Jeśli narzędzie PgBouncer jest wdrażane jako funkcja, stanie się 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 platformy Azure.

  • Ograniczenie rozmiaru tokenu przy użyciu uwierzytelniania usługi AAD — użytkownicy z dużą liczbą członkostwa w grupach nie będą mogli nawiązać połączenia za pośrednictwem narzędzia PgBouncer z powodu ograniczenia rozmiaru tokenu. Aplikacje, usługi i użytkownicy z niewielką liczbą grup pracują.

  • 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 między wiele wystąpień pgBouncer na maszynach wirtualnych platformy Azure.
    • Rozważ alternatywne rozwiązania, w tym rozwiązania wielowątkowane, takie jak PgCat, na maszynach wirtualnych platformy Azure.

Ważne

Parametr pgbouncer.client_tls_sslmode wbudowanej funkcji PgBouncer został przestarzały na serwerze elastycznym usługi Azure Database for PostgreSQL.

Gdy protokół TLS/SSL dla połączeń z serwerem elastycznym usługi Azure Database for PostgreSQL jest wymuszany przez ustawienie require_secure_transport parametru serwera na ONwartość , protokół TLS/SSL jest automatycznie wymuszany dla połączeń z wbudowaną funkcją PgBouncer. To ustawienie jest domyślnie włączone podczas tworzenia nowego wystąpienia serwera elastycznego usługi Azure Database for PostgreSQL i włączania wbudowanej funkcji PgBouncer. Aby uzyskać więcej informacji, zobacz Omówienie sieci dla usługi Azure Database for PostgreSQL — serwer elastyczny z dostępem prywatnym.

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 platformy Azure może być alternatywą.

Następne kroki

  • Dowiedz się więcej o pojęciach dotyczących sieci.
  • Zapoznaj się z omówieniem serwera elastycznego usługi Azure Database for PostgreSQL.