Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
PostgreSQL
Po awarii primary aplikacja nie widzi nowego mastera - VIP i HAProxy
Automatyczny failover to dopiero połowa sukcesu. Baza może poprawnie wypromować nowy węzeł, a mimo to aplikacja pozostanie odcięta, bo wciąż puka do maszyny, która padła. Wyjaśnimy, dlaczego tak się dzieje i jak zbudować warstwę dostępową, dzięki której klient zawsze trafi na aktualny serwer główny.
Serwer główny pada, a klaster HA (na przykład zarządzany przez Patroni) w kilkanaście sekund promuje jeden z serwerów zapasowych na nowy primary. Z punktu widzenia bazy wszystko zadziałało: nowy węzeł przyjmuje zapisy. Tymczasem aplikacja rzuca błędami połączenia, bo w jej konfiguracji figuruje adres IP starej maszyny. Ktoś musi ręcznie zmienić connection string i zrestartować aplikację, przez co realny przestój trwa nie kilkanaście sekund, lecz tyle, ile zajmie interwencja człowieka. Cel wysokiej dostępności zostaje zaprzepaszczony.
Failover odbywa się wewnątrz klastra bazy. Mechanizm HA wie, który węzeł jest teraz główny, ale nie ma żadnej mocy nad tym, dokąd łączy się aplikacja. Klient używa adresu, który mu podano, i jeśli jest to konkretny adres jednego serwera, po jego awarii po prostu nie ma z kim rozmawiać. Brakuje pośrednika, który wiedziałby o zmianie roli i kierował ruch we właściwe miejsce.
Rozwiązuje to warstwa dostępowa. Pierwsze podejście to pływający adres VIP: jeden wirtualny adres IP, który w danej chwili jest przypisany do węzła pełniącego rolę głównego i przy failoverze wędruje na nowy węzeł. Drugie podejście to proxy, najczęściej HAProxy, do którego łączy się aplikacja i które rozdziela połączenia na aktualnego mastera. HAProxy rozpoznaje, który węzeł jest główny, odpytując go zdrowotnym sprawdzeniem - w klastrach Patroni służy do tego wbudowany REST API, którego endpoint zwraca inny kod HTTP dla lidera i dla repliki.
/primary. Węzeł, który nie jest liderem, zwróci kod inny niż 200 i HAProxy go pominie.Wykonaj kontrolowany failover i mierz, ile trwa przerwa widziana przez aplikację - przy dobrze ustawionym HAProxy powinno to być kilka sekund, bez żadnej ręcznej zmiany konfiguracji. Do którego węzła faktycznie trafiasz, sprawdzisz, łącząc się przez punkt wejścia i wykonując SELECT pg_is_in_recovery(); - odpowiedź f potwierdza, że proxy albo VIP wskazuje na serwer główny, a nie na replikę. W statystykach HAProxy (strona stanu albo gniazdo administracyjne) upewnij się, że jako aktywny w backendzie zapisowym widnieje dokładnie jeden węzeł. Powtórz test po ponownym uruchomieniu starego węzła: musi wrócić jako replika, a ruch zapisowy pozostać na nowym liderze - to dowód, że warstwa dostępowa poprawnie śledzi rolę i nie rozjeżdża się z klastrem.
Wróć do listy: 100 najczęstszych pytań i problemów z PostgreSQL

Sprawdź szkolenie: Administracja, replikacja i tuning baz danych PostgreSQL
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Sprawdź szkolenie: Zaawansowana administracja PostgreSQL (HA, DR, monitoring, skalowanie)
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...