Poniżej znajduje się przykładowa architektura pgpool:
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?
postgresql
architecture
pgpool
scalability
connection-pooling
Erwin Brandstetter
źródło
źródło
Odpowiedzi:
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 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-regclass
folderu 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.sql
na systemie głównym. To po prostu mapujepgpool_regclass
funkcję do biblioteki, którą skopiowałeś.źródło
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):
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.
źródło