PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Skalowanie PostgreSQL za pomocą puli połączeń i równoważenia obciążenia

Skalowalność to właściwość systemu umożliwiająca obsługę rosnącej liczby żądań poprzez dodawanie zasobów. Przyczyny takiej ilości żądań mogą być tymczasowe, na przykład, jeśli wprowadzasz zniżkę na wyprzedaż, lub stałe, w celu zwiększenia liczby klientów lub pracowników. W każdym razie powinieneś być w stanie dodawać lub usuwać zasoby, aby zarządzać tymi zmianami w zależności od zapotrzebowania lub wzrostu ruchu.

Dostępne są różne podejścia do skalowania bazy danych. W tym blogu przyjrzymy się, czym są te podejścia i jak skalować bazę danych PostgreSQL za pomocą puli połączeń i systemów równoważenia obciążenia.

Skalowanie w poziomie i w pionie

Istnieją dwa główne sposoby skalowania bazy danych.

  • Skalowanie poziome (skalowanie w poziomie):Jest to realizowane przez dodanie większej liczby węzłów bazy danych tworzących lub powiększających klaster bazy danych. Może pomóc poprawić wydajność odczytu, równoważąc ruch między węzłami.
  • Skalowanie w pionie (skalowanie w górę):Jest to realizowane przez dodanie większej ilości zasobów sprzętowych (procesor, pamięć, dysk) do istniejącego węzła bazy danych. Może być konieczna zmiana niektórych parametrów konfiguracyjnych, aby umożliwić PostgreSQL korzystanie z nowego lub lepszego zasobu sprzętowego.

Połączenia i systemy równoważenia obciążenia

W skalowaniu poziomym i pionowym 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ń i równoważenia obciążenia. Powiedziałem „i”, ponieważ są przeznaczone do różnych ról.

Zestawienie połączeń to metoda tworzenia puli połączeń i ponownego ich wykorzystywania, unikając nieustannego otwierania nowych połączeń do bazy danych, co znacznie zwiększy wydajność Twoich aplikacji. PgBouncer to popularny puler połączeń zaprojektowany dla PostgreSQL.

Korzystanie z Load Balancera to sposób na zapewnienie wysokiej dostępności w topologii bazy danych, a także zwiększenie wydajności poprzez równoważenie ruchu między dostępnymi węzłami. W tym celu HAProxy jest dobrą opcją dla PostgreSQL, ponieważ jest to proxy typu open source, którego można użyć do implementacji wysokiej dostępności, równoważenia obciążenia i proxy dla aplikacji opartych na protokołach TCP i HTTP.

Jak zaimplementować kombinację HAProxy, PgBouncer i PostgreSQL

Połączenie obu technologii, HAProxy i PgBouncer, jest prawdopodobnie najlepszym sposobem na skalowanie i poprawę wydajności w środowisku PostgreSQL. Zobaczymy więc, jak to zaimplementować przy użyciu następującej architektury:

Założymy, że masz zainstalowany ClusterControl, jeśli nie, możesz przejść do oficjalnej stronie, a nawet zapoznaj się z oficjalną dokumentacją, aby ją zainstalować.

Najpierw musisz wdrożyć swój klaster PostgreSQL z HAProxy na jego czele. W tym celu wykonaj kroki opisane w tym poście na blogu, aby wdrożyć zarówno PostgreSQL, jak i HAProxy przy użyciu ClusterControl.

W tym momencie będziesz mieć coś takiego:

Teraz możesz zainstalować PgBouncer na każdym węźle bazy danych lub na komputerze zewnętrznym .

Aby pobrać oprogramowanie PgBouncer, możesz przejść do sekcji pobierania PgBouncer lub skorzystać z repozytoriów RPM lub DEB. W tym przykładzie użyjemy CentOS 8 i zainstalujemy go z oficjalnego repozytorium PostgreSQL.

Najpierw pobierz i zainstaluj odpowiednie repozytorium ze strony PostgreSQL (jeśli jeszcze go nie masz):

$ wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

$ rpm -Uvh pgdg-redhat-repo-latest.noarch.rpm

Następnie zainstaluj pakiet PgBouncer:

$ yum install pgbouncer

Po zakończeniu będziesz miał nowy plik konfiguracyjny zlokalizowany w /etc/pgbouncer/pgbouncer.ini. Jako domyślny plik konfiguracyjny możesz użyć następującego przykładu:

$ cat /etc/pgbouncer/pgbouncer.ini

[databases]

world = host=127.0.0.1 port=5432 dbname=world

[pgbouncer]

logfile = /var/log/pgbouncer/pgbouncer.log

pidfile = /var/run/pgbouncer/pgbouncer.pid

listen_addr = *

listen_port = 6432

auth_type = md5

auth_file = /etc/pgbouncer/userlist.txt

admin_users = admindb

I plik uwierzytelniający:

$ cat /etc/pgbouncer/userlist.txt

"admindb" "root123"

To tylko podstawowy przykład. Aby uzyskać wszystkie dostępne parametry, możesz sprawdzić oficjalną dokumentację.

Więc w tym przypadku zainstalowałem PgBouncer w tym samym węźle bazy danych, nasłuchując wszystkich adresów IP i łączy się on z bazą danych PostgreSQL o nazwie „świat”. Zarządzam również dozwolonymi użytkownikami w pliku userlist.txt za pomocą hasła w postaci zwykłego tekstu, które w razie potrzeby można zaszyfrować.

Aby uruchomić usługę PgBouncer, wystarczy uruchomić następujące polecenie:

$ pgbouncer -d /etc/pgbouncer/pgbouncer.ini

Teraz uruchom następujące polecenie, używając swoich lokalnych informacji (port, host, nazwa użytkownika i nazwa bazy danych), aby uzyskać dostęp do bazy danych PostgreSQL:

$ psql -p 6432 -h 127.0.0.1 -U admindb world

Password for user admindb:

psql (12.4)

Type "help" for help.



world=#

To jest podstawowa topologia. Możesz go ulepszyć, na przykład, dodając dwa lub więcej węzłów równoważenia obciążenia, aby uniknąć pojedynczego punktu awarii, i używając narzędzia, takiego jak „Keepalived”, aby zapewnić dostępność. Można to również zrobić za pomocą ClusterControl.

Więcej informacji na temat PgBouncera i sposobu korzystania z niego można znaleźć w tym poście na blogu.

Wnioski

Jeśli potrzebujesz skalować swój klaster PostgreSQL, dodanie HAProxy i PgBouncer to dobry sposób na skalowanie w poziomie i w górę w tym samym czasie, ponieważ możesz dodać więcej węzłów gotowości w celu zrównoważenia ruchu i poprawisz wydajność ponownie wykorzystując otwarte połączenia.

ClusterControl zapewnia całą gamę funkcji, od monitorowania, alarmowania, automatycznego przełączania awaryjnego, tworzenia kopii zapasowych, przywracania do określonego punktu w czasie, weryfikacji kopii zapasowych, po skalowanie odczytanych replik. Może to pomóc w skalowaniu bazy danych PostgreSQL w sposób poziomy lub pionowy z przyjaznego i intuicyjnego interfejsu użytkownika.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WYJAŚNIENIE PostgreSQL – Jakie są koszty zapytań?

  2. Usuń zduplikowane wiersze (nie usuwaj wszystkich duplikatów)

  3. Nazwy procesów PostgreSQL w systemie Windows

  4. Zaktualizuj lub wstaw (wiele wierszy i kolumn) z podzapytania w PostgreSQL

  5. Zdobądź n pogrupowanych kategorii i zsumuj inne w jedną