Mam dwa serwery Linux (A
i B
) z zainstalowaną bazą danych PostgreSQL 9.5
. Skonfigurowałem tryb hot standby zgodnie z opisem w documentation. W tej konfiguracji A
jest skonfigurowany jako master, B
w trybie gotowości. To działa dobrze i zachowuje się zgodnie z oczekiwaniami.Jak skonfigurować przełączanie awaryjne dla konfiguracji Hot Standby PostgreSQL w aplikacji JavaEE?
Teraz chcę połączyć niezależnego Java EE
aplikacji (działa na innym komputerze) poprzez Hibernate
/JDBC
poprzez TomEE
źródłem danych dla tej konfiguracji bazy danych.
The PostgreSQL driver stanów dokumentów, że wiele hostów można określić w JDBC URL połączenia:
jdbc:postgresql://host1:port1,host2:port2/database
Więc moje pytania to:
- Jeśli
A
się kontuzji iB
jest włączana ręcznie do normy tryb operacyjny, czy moja aplikacja nadal może kontynuować operację bazy danych za pomocą adresu URL połączenia jdbc, jak podano powyżej? - Czy muszę skonfigurować inne parametry/biblioteki?
Uwaga: Z różnych źródeł dowiedziałem się, że PostgreSQL
nie obsługuje automatycznego przełączania awaryjnego (chyba, że oprogramowanie innych firm jest zaangażowanych w proces - patrz komentarz poniżej). Z tego powodu przełączanie awaryjne musi być wykonywane ręcznie, co jest w porządku dla tego konkretnego przypadku użycia.
EDIT-1:
postanowiłem przetestować pgBouncer
(jak zasugerowano w komentarzach) do obejścia. Działa dobrze na moim przypadku użycia. Napisałem skrypt Watchdog, który automatyzuje czynności manualnych:
- stale sprawdzenie, czy
A
jest wciąż żywa i nasłuchuje połączeń przychodzących. - W przypadku przełączania awaryjnego przełącz
B
na normalny tryb działania i pozwól mu stać się nowym wzorcem i uruchom ponownie usługę. - Zmień ustawienia
pgBouncer
, aby wskazywały naB
zamiastA
i uruchom ponownie usługę.
Jednak nadal byłbym zainteresowany, jeśli ktoś ma doświadczenia bez oprogramowania stron trzecich?
Najprostszym ustawieniem jest umieszczenie czegoś takiego jak pgBouncer lub pgPool przed dwoma serwerami i umożliwienie aplikacji połączenia przez to. –
@a_horse_with_no_name Dzięki za podpowiedź. Czy masz teraz jakiś użyteczny przewodnik do konfigurowania pgPool (z repozytoriów Ubuntu), który poleciłbyś? – rzo
Mam podobną konfigurację z jednym głównym i jednym tylko do odczytu gorącym stanby postgresql 9.6 serwerów. Przed nimi biegnie pgbouncer. Mogę łatwo przełączać się na nowy wzorzec, zmieniając jedną linię pliku konfiguracyjnego pgbouncer. Czytałem artykuły o automatycznych klastrach pracy awaryjnej (z corosync i rozrusznikiem), ale były dla mnie zbyt skomplikowane. Powinieneś ich wypróbować, jeśli masz doświadczenie z zaawansowaną administracją systemu Linux. http://clusterlabs.org/ –