Postgres z architekturą pgpool

9

Poniżej znajduje się przykładowa architektura pgpool:

wprowadź opis zdjęcia tutaj

Oznacza to, że wystarczy mieć pgpool na jednym serwerze; czy to prawda? Kiedy patrzę na konfigurację, widzę również, że konfigurujesz backendy wewnątrz pgpool.conf; więc implikuje to dalej. Ale to nie wyjaśnia, dlaczego widzę pgpool również na serwerach zaplecza.

Przeglądając dokumentację, widzę również:

Jeśli używasz PostgreSQL 8.0 lub nowszego, zdecydowanie zalecamy zainstalowanie funkcji pgpool_regclass na wszystkich PostgreSQL, do których dostęp ma pgpool-II, ponieważ jest ona używana wewnętrznie przez pgpool-II.

Więc nie jestem pewien, co myśleć; jeśli najlepszą praktyką jest mieć pgpool na wszystkich backendach lub po prostu serwer dedykowany?

Erwin Brandstetter
źródło
jeśli zależy Ci na wysokiej dostępności, prawdopodobnie potrzebujesz dwóch serwerów pgpool przed co najmniej 2 serwerami postgresql (wszystkie na różnych urządzeniach)
Neil McGuigan

Odpowiedzi:

10

Generalnie nie instalowałbyś Pgpool na serwerach zaplecza. To, co widzisz na zdjęciu, jest najczęstszą konfiguracją. Pgpool to samodzielny serwer, który zasadniczo znajduje się przed bazami danych. Dwa serwery Postgres są często skonfigurowane do replikacji strumieniowej; z których jeden jest panem, a drugi niewolnikiem.

Pozwala to Pgpool na równoważenie wszystkich zapytań odczytu między dwiema (lub więcej) bazami danych. Wszelkie zapytania dotyczące jakichkolwiek zapisów będą kierowane do serwera głównego, który z kolei replikuje się do urządzenia podrzędnego.

Jak powiedział @Neil McGuigan , możesz także mieć wiele serwerów Pgpool, aby osiągnąć lepszą wysoką dostępność. Technicznie możesz zainstalować Pgpool na serwerach baz danych w tej konfiguracji, ale byłaby to zła praktyka. Uruchamianie wielu serwerów Pgpool jest znacznie bardziej złożoną konfiguracją. Jeśli po raz pierwszy korzystasz z Pgpool, zacznę od jednego serwera Pgpool, zanim zacznę dwa.

W obu konfiguracjach serwer aplikacji uważa, że ​​łączy się tylko z jedną bazą danych Postgres.

O pgpool_regclass, które naprawdę powinno być osobnym pytaniem, pochodzi z FAQ Pgpool :

Jeśli używasz PostgreSQL 8.0 lub nowszego, zdecydowanie zalecamy zainstalowanie funkcji pgpool_regclass na wszystkich PostgreSQL, do których dostęp ma pgpool-II, ponieważ jest ona używana wewnętrznie przez pgpool-II. Bez tego obsługa zduplikowanych nazw tabel w innym schemacie może powodować problemy (tabele tymczasowe nie stanowią problemu).

Jeśli używasz PostgreSQL 9.4.0 lub nowszej wersji i pgpool-II 3.3.4 lub nowszej wersji, 3.4.0 lub nowszej wersji, nie musisz instalować pgpool_regclass, ponieważ PostgreSQL 9.4 ma wbudowaną funkcję pgpool_regclass, taką jak funkcja „to_regclass”.

Jeśli potrzebujesz tego, to tylko część kodu SQL uruchomionego na głównym serwerze Postgres, aby dodać funkcję, której używa Pgpool.

W przypadku regclass musisz wykonać dodatkowy krok (myślałem o insert_lock). Jeśli kompilujesz ze źródła (generalnie większość dystrybucji ma naprawdę nieaktualne wersje Pgpool), będziesz musiał również skompilować bibliotekę Postgres.

Jeśli skompilowałeś ze źródła, będziesz musiał przejść do .../pgpool-II-3.X.X/src/sql/pgpool-regclassfolderu i zrobić ./configure; make.

Skopiuj plik pgpool-regclass.so do katalogu rozszerzenia Postgres. Na moim serwerze Ubuntu 14.04 (tylko przy użyciu pakietu PostgreSQL 9.3 zainstalować), znajduje się na stronie: /usr/lib/postgresql/9.3/lib. Pamiętaj, aby zrobić to dla wszystkich serwerów Postgres.

Po zakończeniu możesz uruchomić pgpool-regclass.sqlna systemie głównym. To po prostu mapuje pgpool_regclassfunkcję do biblioteki, którą skopiowałeś.

Trevor Dell
źródło
1

Podobnie jak wszystko inne, istnieje wiele sposobów na wdrożenie wysokiej dostępności. Tutaj zasugeruję coś z mojego doświadczenia (moja własna implementacja HA):

  1. Zawsze lepiej jest mieć wiele instancji pgpool2 zamiast jednej. Powód jest oczywisty: pojedynczy pgpool2 jest pojedynczym punktem awarii. Ponieważ pgpool wprowadził funkcję watchdog, jest to łatwe do osiągnięcia.
  2. Ogólnie nieco lepiej jest mieć instancje pgpool2 na osobnych maszynach niż współużytkować tę samą maszynę między zapleczem PostgreSQL a pgpool2. Ale nie ma znaczącej wady, nawet jeśli uruchomisz je na tym samym serwerze, co PostgreSQL. (W mojej implementacji HA na każdym komputerze działa jedna instancja PostgreSQL i jedna instancja pgpool2).

Na koniec polecę ten samouczek krok po kroku, który poprowadzi cię od zera (instalowanie serwera PostgreSQL ...) do ukończenia implementacji wysokiej dostępności. Wspomniany samouczek opisuje implementację, której używam.

Mam nadzieję, że to pomogło.

AKTUALIZACJA: Dzięki @Moshe Katz - link się zmienił. Teraz zaktualizowane tutaj, również w oryginalnym poście.

Aleksandar Pesic
źródło
2
Witryna wskazana przez Ciebie itenlight.com/blog/2016/05/18/... wydaje się nie działać. Możesz rzucić okiem?
user6807024
Wygląda na to, że artykuł jest już dostępny pod adresem fatdragon.me/blog/2016/05/postgresql-ha-pgpool-ii-part-1
Moshe Katz