Wdrażasz PostgreSQL w chmurze i chcesz poznać możliwości osiągnięcia wysokiej dostępności? W naszym poprzednim poście na blogu, Zarządzanie wysoką dostępnością w PostgreSQL — część I, omówiliśmy możliwości i działanie PostgreSQL Automatic Failover (PAF) firmy ClusterLabs. W części II przedstawiamy alternatywne narzędzie open source, Menedżer replikacji z drugiego kwadrantu, a następnie w części III zagłębimy się w naszą trzecią alternatywę, Patroni by Zalando.
- Zarządzanie wysoką dostępnością w PostgreSQL – Część I:Automatyczne przełączanie awaryjne PostgreSQL
- Zarządzanie wysoką dostępnością w PostgreSQL – część III:Patroni
Menedżer replikacji (repmgr)
repmgr to pakiet narzędzi typu open source opracowany przez 2ndQuadrant do zarządzania replikacją i przełączaniem awaryjnym klastrów PostgreSQL. Zapewnia narzędzia do konfigurowania, konfigurowania, zarządzania i monitorowania replikacji PostgreSQL, a także umożliwia wykonywanie zadań ręcznego przełączania i przełączania awaryjnego za pomocą narzędzia repmgr. To bezpłatne narzędzie obsługuje i ulepsza wbudowaną replikację strumieniową PostgreSQL.
Menedżer replikacji zapewnia dwa główne narzędzia do zarządzania replikacją i przełączaniem awaryjnym PostgreSQL.
repmgr
- Narzędzie interfejsu wiersza poleceń, które umożliwia wykonywanie różnych zadań administracyjnych.
- repmgr umożliwia konfigurowanie serwerów w trybie gotowości, zwiększanie stanu wstrzymania, przełączanie i monitorowanie stanu klastra PostgreSQL.
- Zapewnia również opcję uruchamiania na sucho dla prawie wszystkich poleceń administracyjnych.
repmgrd
To demon, który:
- Aktywnie monitoruje klastry PostgreSQL i wykonuje niezbędne działania w oparciu o stan klastra.
- Wykonuje automatyczne przełączanie awaryjne w przypadku awarii węzła podstawowego, promując najbardziej kwalifikujący się tryb gotowości jako nowy główny.
- Zapewnia opcję monitorowania i przechowywania danych związanych z wydajnością replikacji.
- Zapewnia powiadomienie przez wywołanie skryptów użytkownika dla zarejestrowanych zdarzeń.
Jak to działa
repmrg nie tylko zarządza replikacją klastrów PostgreSQL, ale ma również możliwość konfigurowania serwerów rezerwowych do replikacji. Po początkowej instalacji musimy wprowadzić zmiany w pliku konfiguracyjnym repmgr (repmgr.conf) z wymaganymi szczegółami na każdym serwerze. Gdy serwer jest skonfigurowany, należy go zarejestrować w repmgr za pomocą polecenia rejestru głównego/w trybie gotowości repmgr. Najpierw konfiguruje się i rejestruje węzeł podstawowy. Następnie serwery rezerwowe są tworzone i konfigurowane za pomocą polecenia repmgr standby clone, które klonuje węzeł gotowości PostgreSQL z innego serwera PostgreSQL.
Menedżer replikacji korzysta z funkcji rozszerzeń PostgreSQL i tworzy własny schemat w bazie danych klastra do przechowywania informacji związanych z klastrem. Instalacja rozszerzenia i tworzenie schematu odbywa się podczas rejestracji serwera głównego za pomocą repmgr. Po zakończeniu instalacji ręczne operacje administracyjne, takie jak promowanie, śledzenie, przełączanie itp., można wykonać za pomocą narzędzia repmgr. Do operacji przełączania wymaga skonfigurowania bezhasłowego SSH między węzłami.
Automatyczne przełączanie awaryjne można skonfigurować za pomocą repmgrd. repmgrd wymaga załadowania biblioteki współdzielonej „repmgr” w momencie uruchamiania serwera PostgreSQL. Nazwa biblioteki powinna być wymieniona w shared_preload_libraries parametr konfiguracyjny w pliku postgresql.conf. Ponadto, aby repmgrd działał, failover=automatic parametr należy ustawić w pliku repmgr.conf. Po ustawieniu wszystkich tych parametrów demon repmgrd zaczyna aktywnie monitorować klaster. Jeśli wystąpi jakakolwiek awaria w węźle podstawowym, będzie próbował ponownie połączyć się kilka razy. Gdy wszystkie próby połączenia się z głównymi nie powiodą się, najbardziej kwalifikujący się tryb gotowości jest wybierany przez wybór jako nowy główny przez repmgrd.
repmgr obsługuje również powiadomienia o zdarzeniach. Ma zestaw predefiniowanych zdarzeń i przechowuje każde wystąpienie tych zdarzeń w tabeli repmgr.events. repmgr umożliwia przekazywanie powiadomień o zdarzeniach do zdefiniowanego przez użytkownika programu lub skryptu, który może podjąć dalsze działania, takie jak wysłanie wiadomości e-mail lub wywołanie dowolnego alertu. Odbywa się to poprzez ustawienie event_notification_command parametr w repmgr.conf.
Jak sobie radzi ze scenariuszem Split Brain?
repmgr rozwiązuje scenariusze podziału mózgu przy użyciu lokalizacji parametr, gdzie każdy węzeł powinien określać parametr lokalizacji na podstawie centrum danych, w którym jest umieszczony. W przypadku jakiegokolwiek podziału sieci repmgr zapewni promocję węzła, który znajduje się w tej samej lokalizacji co główny. Jeśli nie znajdzie żadnego węzła w tej lokalizacji, nie będzie promować żadnego węzła w żadnej lokalizacji.
Obsługuje również izolację sieci w przypadku parzystej liczby serwerów w klastrze. Odbywa się to za pomocą dodatkowego węzła zwanego serwerem-świadkiem. Serwer-świadek jest węzłem, który jest brany pod uwagę tylko przy zliczaniu większości głosów. Na tym serwerze nie będzie instalacji PostgreSQL, a co za tym idzie, nie będzie żadnej roli w replikacji.
Czy są jakieś wymagania dotyczące konfiguracji?
- repmgr będzie wymagał dedykowanej bazy danych i użytkownika z uprawnieniami superużytkownika. Istnieje jednak również możliwość zapewnienia superużytkownika, jeśli nie chcesz dać superużytkownikowi dostępu do użytkownika repmgr.
- Jeśli chcesz, aby repmgr kopiował pliki konfiguracyjne znajdujące się poza katalogiem danych PostgreSQL i/lub testował funkcjonalność przełączania, będziesz również potrzebował połączeń SSH bez hasła między obydwoma serwerami, oraz rsync powinien być zainstalowany.
- Jeśli zamierzasz używać poleceń opartych na usługach innych niż pg_ctl (który jest domyślnie używany przez repmgr) do uruchamiania, zatrzymywania, przeładowywania i restartowania, możesz określić je w repmgr plik konfiguracyjny (repmgr.conf).
- Podstawowe parametry konfiguracyjne wymagane w pliku konfiguracyjnym repmgr są następujące:
node_id (int) – Unikalna liczba całkowita większa od zera, która identyfikuje węzeł.nazwa_węzła (ciąg) – Aby uniknąć nieporozumień, zaleca się arbitralny (ale unikalny) ciąg znaków wykorzystujący nazwę hosta serwera lub inny identyfikator jednoznacznie powiązany z serwerem. conninfo (ciąg) – Informacje o połączeniu z bazą danych w postaci ciągu conninfo. Wszystkie serwery w klastrze muszą mieć możliwość połączenia się z węzłem lokalnym za pomocą tego ciągu.
katalog_danych (ciąg) – Katalog danych węzła. Jest to potrzebne repmgr do wykonywania operacji, gdy instancja PostgreSQL nie jest uruchomiona i nie ma innego sposobu określenia katalogu danych.
repmgr Plusy
- Repmgr zapewnia narzędzia, które pomagają w konfiguracji węzłów podstawowych i rezerwowych oraz konfiguracji replikacji.
- Nie używa żadnych dodatkowych portów do komunikacji. Jeśli chcesz dokonać przełączenia, tylko wtedy będzie wymagało skonfigurowania bezhasłowego SSH.
- Zapewnia powiadomienie przez wywołanie skryptów użytkownika dla zarejestrowanych zdarzeń.
- Wykonuje automatyczne przełączanie awaryjne w przypadku awarii głównego serwera.
repmgr Minusy
- repmgr nie wykrywa, czy stan gotowości jest źle skonfigurowany z nieznanym lub nieistniejącym węzłem w konfiguracji odzyskiwania. Węzeł będzie wyświetlany jako rezerwowy, nawet jeśli będzie działał bez połączenia z głównym/kaskadowym węzłem rezerwowym.
- Nie można pobrać statusu innego węzła z węzła, w którym usługa PostgreSQL nie działa. Dlatego nie zapewnia rozwiązania kontroli rozproszonej.
- Nie obsługuje przywracania zdrowia poszczególnych węzłów.
Zarządzanie wysoką dostępnością w #PostgreSQL – Część II:Narzędzie Open Source repmgr Kliknij, aby tweetować
Scenariusze testów wysokiej dostępności
Przeprowadziliśmy kilka testów zarządzania wysoką dostępnością PostgreSQL przy użyciu repmgr. Wszystkie te testy zostały przeprowadzone podczas działania aplikacji i wstawiania danych do bazy danych PostgreSQL. Aplikacja została napisana przy użyciu sterownika PostgreSQL Java JDBC z wykorzystaniem możliwości przełączania awaryjnego połączenia.
Testy serwera w trybie gotowości
Sl. Nie | Scenariusz testowy | Obserwacja |
---|---|---|
1 | Zabij proces PostgreSQL | Serwer w trybie gotowości został oznaczony jako uszkodzony. Nie było żadnych przerw w działaniu programu piszącego. Aby ponownie uruchomić proces PostgreSQL, wymagana była ręczna interwencja. |
2 | Zatrzymaj proces PostgreSQL | Serwer w trybie gotowości został oznaczony jako uszkodzony. Nie było żadnych przerw w działaniu programu piszącego. Aby ponownie uruchomić proces PostgreSQL, wymagana była ręczna interwencja. |
3 | Uruchom ponownie serwer | Serwer w trybie gotowości został oznaczony jako uszkodzony. Gdy serwer wystartował po restarcie, PostgreSQL został uruchomiony ręcznie i serwer został oznaczony jako uruchomiony. Nie było żadnych przerw w działaniu programu piszącego. |
4 | Zatrzymaj proces repmgrd | Serwer rezerwowy nie będzie częścią sytuacji automatycznego przełączania awaryjnego. Stwierdzono, że usługa PostgreSQL jest uruchomiona. Nie było żadnych przerw w działaniu programu piszącego. |
Testy serwera głównego/podstawowego
Sl. Nie | Scenariusz testowy | Obserwacja |
1 | Zabij proces PostgreSQL |
|
2 | Stop the PostgreSQL process and bring it back immediately after health check expiry |
|
3 | Reboot the server |
|
4 | Stop the repmgr process |
|
Network Isolation Tests
Sl. No | Test Scenario | Observation |
1 | Network isolate the primary server from other servers (all have same value for location in repmgr configuration) |
|
2 | Network isolate the primary server from other servers (the standby servers has same value for location but primary had a different value for location in repmgr configuration) |
|
Inference
repmgr provides several commands to setup and monitor PostgreSQL replication. It is feature-rich and also eases the job of the database administrator (DBA). However, it’s not a full fledged high availability management tool since it will not manage the resources. Manual intervention is required to ensure the resource is in proper state.
So, in this post, we’ve discussed the capabilities and workings of Replication Manager by 2ndQuadrant. In our next post, we’ll discuss the same high availability aspects using Patroni by Zalando. For users looking to automate their high availability in the cloud, check out our PostgreSQL on Azure and PostgreSQL on AWS fully managed solutions.