Wydajność jest zawsze ważna w każdym systemie. Będziesz musiał dobrze wykorzystać dostępne zasoby, aby zapewnić jak najkrótszy czas reakcji. Istnieją różne sposoby, aby to zrobić. Każde połączenie z bazą danych zużywa zasoby, więc jednym z tych sposobów jest posiadanie dobrego menedżera połączeń między aplikacją a bazą danych. W tym blogu omówimy pgBouncer, pulę połączeń dla PostgreSQL, i pokażemy, jak to zaimplementować, aby poprawić wydajność PostgreSQL.
Zbiorniki połączeń
W zależności od ruchu w Twoich systemach, przydatne może być dodanie zewnętrznego narzędzia w celu zmniejszenia obciążenia bazy danych, co poprawi wydajność. Może to za mało, ale to dobry punkt wyjścia. W tym celu dobrym pomysłem jest zaimplementowanie puli połączeń
Zestawienie połączeń to metoda tworzenia puli połączeń i ponownego ich wykorzystywania, unikając ciągłego otwierania nowych połączeń do bazy danych, co znacznie zwiększy wydajność Twoich aplikacji. PgBouncer to popularny puler połączeń zaprojektowany dla PostgreSQL.
Jak działa PgBouncer
PgBouncer działa jak serwer PostgreSQL, więc wystarczy uzyskać dostęp do bazy danych za pomocą informacji PgBouncer (adres IP/nazwa hosta i port), a PgBouncer utworzy połączenie z serwerem PostgreSQL, w przeciwnym razie użyj ponownie, jeśli istnieje.
Kiedy PgBouncer odbiera połączenie, przeprowadza uwierzytelnianie, które zależy od metody określonej w pliku konfiguracyjnym. PgBouncer obsługuje wszystkie mechanizmy uwierzytelniania obsługiwane przez serwer PostgreSQL. Następnie PgBouncer sprawdza połączenie z pamięcią podręczną z tą samą kombinacją nazwy użytkownika i bazy danych. Jeśli zostanie znalezione połączenie buforowane, zwraca połączenie do klienta, jeśli nie, tworzy nowe połączenie. W zależności od konfiguracji PgBouncer i liczby aktywnych połączeń, może się zdarzyć, że nowe połączenie zostanie umieszczone w kolejce do momentu utworzenia lub nawet przerwania.
Zachowanie PgBouncer zależy od skonfigurowanego trybu puli:
-
pule sesji (domyślnie):Gdy klient się połączy, zostanie mu przypisane połączenie z serwerem na cały czas, przez który klient pozostaje w kontakcie. Gdy klient się rozłączy, połączenie z serwerem zostanie przywrócone do puli.
-
pula transakcji:połączenie z serwerem jest przypisywane klientowi tylko podczas transakcji. Gdy PgBouncer zauważy, że transakcja się skończyła, połączenie z serwerem zostanie przywrócone do puli.
-
pulowanie instrukcji:połączenie z serwerem zostanie przywrócone do puli natychmiast po zakończeniu zapytania. Transakcje wielowyciągowe są w tym trybie niedozwolone, ponieważ mogłyby się zepsuć.
Jak zaimplementować PgBouncer za pomocą ClusterControl
W tym celu założymy, że masz działający klaster PostgreSQL i używasz ClusterControl do zarządzania nim, w przeciwnym razie możesz śledzić ten wpis na blogu, aby łatwo wdrożyć PostgreSQL w celu zapewnienia wysokiej dostępności.
Przejdź do ClusterControl -> Wybierz Klaster PostgreSQL -> Akcje klastra -> Dodaj Load Balancer -> PgBouncer. Tam możesz wdrożyć nowy węzeł PgBouncer, który zostanie wdrożony w wybranym węźle bazy danych, a nawet zaimportować istniejący węzeł PgBouncer.
Musisz określić adres IP lub nazwę hosta, port nasłuchiwania i PgBouncer kwalifikacje. Po naciśnięciu przycisku Wdróż PgBouncer, ClusterControl uzyska dostęp do węzła, zainstaluje i skonfiguruje wszystko bez ręcznej interwencji.
Możesz monitorować postęp w sekcji Aktywność ClusterControl. Po zakończeniu musisz utworzyć nową pulę. W tym celu przejdź do ClusterControl -> Wybierz klaster PostgreSQL -> Węzły -> PgBouncer Node.
Tutaj musisz dodać następujące informacje:
-
Nazwa hosta PgBouncer:Wybierz hosty węzłów, aby utworzyć pulę połączeń.
-
Nazwa puli:Nazwy puli i bazy danych muszą być takie same.
-
Nazwa użytkownika:wybierz użytkownika z węzła podstawowego PostgreSQL lub utwórz nowego.
-
Tryb puli:Może to być jeden z trybów, o których wspominaliśmy wcześniej:sesja (domyślny), transakcja, lub łączenie wyciągów.
-
Rozmiar puli:Maksymalny rozmiar pul dla tej bazy danych. Domyślna wartość to 20.
-
Maksymalna liczba połączeń z bazą danych:Skonfiguruj maksimum dla całej bazy danych. Domyślna wartość to 0, co oznacza nieograniczone.
Teraz powinieneś być w stanie zobaczyć pulę w sekcji Węzeł.
To jest podstawowa topologia. Możesz go ulepszyć, na przykład, dodając węzły równoważenia obciążenia, więcej niż jeden, aby uniknąć pojedynczego punktu awarii, i używając jakiegoś narzędzia, takiego jak „Keepalived”, aby zapewnić dostępność. Można to również zrobić za pomocą ClusterControl.
Wnioski
Używanie PgBouncer jako puli połączeń to dobry sposób na poprawę wydajności bazy danych, dzięki dobremu wykorzystaniu dostępnych zasobów na serwerze.
Możesz również ulepszyć tę topologię, używając kombinacji PgBouncer + HAProxy, aby osiągnąć wysoką dostępność dla twojego klastra PostgreSQL. Wszystkie te czynności można wykonać z tego samego interfejsu użytkownika ClusterControl.