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:
pgBouncer.stats_users
Ustaw parametr na nazwę istniejącego użytkownika (na przykładmyUser
), a następnie zastosuj zmiany.Połącz się z bazą
pgbouncer
danych jako ten użytkownik i ustaw port jako6432
: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ępnychSHOW
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:
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"
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.
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 ON
wartość , 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ą.