Blog JSystems - uwalniamy wiedzę!

Szukaj

PostgreSQL

Jak zarządzać klastrem Patroni na co dzień (patronictl)

W skrócie

  • Masz klaster Patroni, ale nie wiesz, jak bezpiecznie sprawdzić jego stan, przełączyć lidera czy zatrzymać węzeł do prac.
  • W klastrze HA nie wolno operować na węzłach ręcznie przez systemd czy pg_ctl, bo Patroni odwróci Twoje działanie albo wywoła niezamierzony failover.
  • Do codziennej obsługi służy jedno narzędzie - patronictl - które robi to wszystko w zgodzie z logiką klastra.

Patroni zdejmuje z administratora ręczne zarządzanie replikacją i failoverem, ale wprowadza własne reguły. Próba zatrzymania bazy klasycznymi metodami kończy się walką z automatem. Pokażemy, jak na co dzień posługiwać się narzędziem patronictl, żeby sprawdzać stan, przełączać lidera i prowadzić prace serwisowe bez wywoływania chaosu.

Jak to wygląda w praktyce

Chcesz zrestartować jeden węzeł, żeby zmienić parametr albo zaktualizować pakiet. Zatrzymujesz PostgreSQL przez systemd, a po chwili Patroni uruchamia go z powrotem, bo uznaje, że baza padła i trzeba ją podnieść. Albo zatrzymujesz węzeł będący liderem i nieoczekiwanie wyzwalasz failover w środku dnia. Zaczynasz się zastanawiać, jak w ogóle bezpiecznie dotknąć takiego klastra, skoro każda ręczna akcja jest przez automat cofana lub źle interpretowana.

Dlaczego tak się dzieje

Patroni nieprzerwanie pilnuje, żeby stan klastra zgadzał się z zapisem w rozproszonym magazynie konfiguracji (najczęściej etcd, Consul albo ZooKeeper). Gdy widzi, że węzeł, który powinien działać, jest wyłączony, uznaje to za awarię i reaguje: podnosi bazę albo promuje inny węzeł. Twoje ręczne systemctl stop nie mówi Patroniemu, że to celowe, więc automat robi swoje. To nie błąd - tak działa mechanizm wysokiej dostępności.

Dlatego wszystkie operacje na klastrze trzeba zgłaszać przez Patroni, a nie obok niego. Narzędzie patronictl komunikuje się z klastrem przez ten sam rozproszony magazyn i REST API, więc jego polecenia są rozumiane i respektowane. Gdy każesz zatrzymać węzeł przez patronictl, klaster wie, że to zamierzone, i nie próbuje go od razu podnosić ani panikować.

Jak to rozwiązać krok po kroku

  1. Zacznij zawsze od sprawdzenia stanu: patronictl -c /etc/patroni/patroni.yml list. Zobaczysz wszystkie węzły, ich role (Leader, Replica), stan (running) oraz opóźnienie replikacji. To Twój podstawowy pulpit.
  2. Do planowej zmiany lidera używaj patronictl switchover. To kontrolowane, płynne przełączenie: Patroni najpierw upewnia się, że wybrana replika jest zsynchronizowana, dopiero potem przekazuje jej rolę. Idealne do prac serwisowych na dotychczasowym liderze.
  3. Rozróżniaj switchover od failover. patronictl failover to awaryjne przejęcie roli, gdy lider jest niedostępny, i nie gwarantuje pełnej synchronizacji. W normalnej pracy sięgaj po switchover.
  4. Zanim zatrzymasz węzeł do dłuższych prac, wyłącz go z automatyki poleceniem patronictl pause. Wstrzymuje ono zarządzanie klastrem, dzięki czemu możesz zatrzymać i uruchamiać bazę ręcznie bez wywoływania failoveru. Po pracach wznów automatykę przez patronictl resume.
  5. Do restartu bazy na węźle używaj patronictl restart nazwa_klastra nazwa_wezla, zamiast systemd. Patroni wykona restart świadomie, nie traktując go jak awarii.
  6. Zmiany parametrów konfiguracyjnych wprowadzaj przez patronictl edit-config, a nie edytując lokalny postgresql.conf. Patroni rozprowadzi zmianę na wszystkie węzły i zapisze ją w rozproszonym magazynie, więc konfiguracja pozostaje spójna w całym klastrze.

Jak sprawdzić, że zadziałało

Po każdej operacji wróć do patronictl list i potwierdź stan: dokładnie jeden węzeł jako Leader, pozostałe jako Replica w stanie running, a opóźnienie replikacji (kolumna Lag) bliskie zeru. Po switchoverze upewnij się, że rola przeszła na zamierzony węzeł. Gdy używałeś pause, sprawdź, że po resume w polu stanu klastra nie widnieje już informacja o wstrzymanej automatyce - inaczej failover pozostanie wyłączony i klaster nie ochroni się sam przy prawdziwej awarii. Poprawność rozprowadzenia konfiguracji potwierdzisz, sprawdzając wartość zmienionego parametru na każdym węźle przez SHOW nazwa_parametru; - zgodność na wszystkich węzłach dowodzi, że zmiana poszła kanałem klastra, a nie tylko lokalnie.

Wróć do listy: 100 najczęstszych pytań i problemów z PostgreSQL

Szkolenie Administracja, replikacja i tuning baz danych 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

Szkolenie Zaawansowana administracja PostgreSQL - HA, DR, monitoring, skalowanie

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

Najczęściej zadawane pytania

Dlaczego po zatrzymaniu bazy przez systemd Patroni od razu ją uruchamia?
Bo Patroni nieprzerwanie pilnuje, żeby stan klastra zgadzał się z zapisem w rozproszonym magazynie konfiguracji. Gdy widzi, że węzeł, który powinien działać, jest wyłączony, traktuje to jak awarię i podnosi bazę albo promuje inny węzeł. Ręczne systemctl stop nie mówi Patroniemu, że to celowe. Dlatego operacje na klastrze zgłaszaj przez patronictl, nie obok niego.
Jak bezpiecznie przełączyć lidera w klastrze Patroni?
Do planowej zmiany używaj patronictl switchover. To kontrolowane, płynne przełączenie: Patroni najpierw upewnia się, że wybrana replika jest zsynchronizowana, dopiero potem przekazuje jej rolę. Nadaje się do prac serwisowych na dotychczasowym liderze. Awaryjne patronictl failover stosuj tylko wtedy, gdy lider jest niedostępny, bo nie gwarantuje pełnej synchronizacji.
Jak zatrzymać węzeł Patroni do prac serwisowych bez wywołania failoveru?
Najpierw wyłącz automatykę poleceniem patronictl pause, które wstrzymuje zarządzanie klastrem. Wtedy możesz zatrzymywać i uruchamiać bazę ręcznie bez wyzwalania failoveru. Po zakończeniu prac koniecznie wznów automatykę przez patronictl resume, bo dopóki klaster jest wstrzymany, nie ochroni się sam przy prawdziwej awarii.
Jak zmieniać parametry konfiguracyjne w klastrze Patroni?
Używaj patronictl edit-config, a nie edytuj lokalnego postgresql.conf na poszczególnych węzłach. Patroni rozprowadzi zmianę na wszystkie węzły i zapisze ją w rozproszonym magazynie, dzięki czemu konfiguracja pozostaje spójna w całym klastrze. Poprawność sprawdzisz, odpytując wartość parametru na każdym węźle przez SHOW nazwa_parametru.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...