Replikacja logiczna bazy PostgreSQL za pomocą narzędzi EuroDB

Replikacja logiczna bazy PostgreSQL za pomocą narzędzi EuroDB

Bazy danych są najczęściej krytycznymi elementami każdego przedsiębiorstwa. Dlatego w celu zapewnienia wysokiej dostępności stworzone zostały mechanizmy replikacji. Dziś przybliżymy temat replikacji logicznej za pomocą modułu będącego częścią platformy bazodanowej EuroDB.

Bazy danych są najczęściej krytycznymi elementami każdego przedsiębiorstwa. Dlatego w celu zapewnienia wysokiej dostępności stworzone zostały mechanizmy replikacji. Dziś przybliżymy temat replikacji logicznej za pomocą modułu będącego częścią platformy bazodanowej EuroDB.

Replikacją bazy danych nazywamy proces kopiowania i przesyłu informacji między serwerami oraz utrzymania ich synchronizacji w celu zachowania spójności. Głównym celem replikacji jest skrócenie czasu dostępu do danych i uniezależnienie się od jednego serwera, który w przypadku ewentualnej awarii powoduje niedostępność całego systemu.

Rodzaje replikacji baz danych oferowanych przez pakiet narzędzi EuroDB

EuroDB wspiera większość popularnych metod replikacji baz. Wśród nich, ze względu na ich możliwości i użyteczność, warto wyróżnić dwie: replikację strumieniową i replikację logiczną.

Replikacja strumieniowa (ang. Streaming Replication) umożliwia stałe wysyłanie rekordów WAL XLOG na serwery zapasowe i stosowanie ich w celu zapewnienia pełnej synchronizacji. Replikacja strumieniowa w PostgreSQL realizowana jest zgodnie z modelem master-slave, gdzie master jest nazywany instancją podstawową, która obsługuje główną bazę danych.

Drugą metodą, na której skupimy się w tym artykule, jest replikacja logiczna (ang. Logical Replication). Podstawowym jej zadaniem jest sprostanie wymaganiom nawet najbardziej wymagających klientów, których struktura bazy danych jest nad wyraz skomplikowana. Działanie tej metody opiera się na replikowaniu obiektów bazy danych, najczęściej w oparciu o ich klucz podstawowy.

Zalety replikacji logicznej przy wykorzystaniu modułu replikacji EuroDB

Replikacja logiczna wykorzystuje bibliotekę pglogical, która została włączona do serca PostgreSQL od wersji 9.4. Moduł replikacji, dzięki swojej budowie, jest wstecznie kompatybilny również w PostgreSQL w niższej wersji. Inne zalety modułu to:

  • możliwość modyfikacji zakresu replikacji
  • replikacje z granularnością do pojedynczej tabeli
  • replikacje konkretnych typów DML (również ich kombinacji)
  • brak replikacji DDL (ochrona struktury danych w replikach)
  • replikacja logiczna nie jest oparta na funkcjach wyzwalaczy
  • replikacja pojedynczej bazy danych w obrębie jednego klastra
  • replikacja w układzie siatki (wiele serwerów provider i subscriber)
  • brak automatycznego replikowania nowo stworzonych obiektów (podnosi poziom bezpieczeństwa)
  • możliwość wykorzystania replik w trybie odczyt/zapis (różne mechanizmy rozstrzygania konfliktów)
  • możliwość wykorzystania replikacji logicznej do aktualizacji między głównymi wersjami EuroDB (rolling upgrade).

EuroDB PostgreSQL Logical Replication

Instrukcja stworzenia replikacji bazy danych

W celu utworzenia replikacji bazy danych z wykorzystaniem modułu replikacji EuroDB należy najpierw go zainstalować zgodnie z instrukcją otrzymaną wraz z produktem. Po poprawnym zainstalowaniu pakietu należy go jeszcze skonfigurować, postępując zgodnie z poniższymi krokami:

Ta instrukcja została stworzona dla bazy danych EuroDB 13 i jej domyślnej konfiguracji. Zadziała w przypadku każdej bazy opartej na PostgreSQL. Komendy dla różnych rozwiązań bazodanowych mogą się nieco od siebie różnić, ponieważ ścieżki dostępu do plików konfiguracyjnych zależą od nazwy konkretnej bazy. Replikacja logiczna jest tworzona na bazie danych dvdrental, którą można pobrać, klikając tutaj.

1. Edycja pliku /var/lib/pgsql_13.3-1/data/postgresql.conf.

wal_level = 'logical'
shared_preload_libraries = 'pglogical'

Poniższe wartości zależą od tego, na jaką ilość serwerów provider i subscriber się zdecydujemy:

max_worker_processes = 10   # one per database needed on provider node
                            # one per node needed on subscriber node
max_replication_slots = 10  # one per node needed on provider node
max_wal_senders = 10        # one per node needed on provider node

2. Konfiguracja pliku /var/lib/pgsql_13.3-1/data/pg_hba.conf w celu umożliwienia połączenia providera i subskrybentów. Przykładowo:

host all all 192.168.121.214/32 trust

3. Restart bazy danych przy pomocy pg_ctl.

sudo -u postgres /usr/eurodb-13/bin/`pg_ctl` -D /var/lib/pgsql_13.3-1/data `stop`

sudo -u postgres /usr/eurodb-13/bin/`pg_ctl` -D /var/lib/pgsql_13.3-1/data `start`

4. Wejście do konsoli Postgresa (psql) i przełączenie się na odpowiednią bazę.

sudo -u postgres `psql`
\c `dvdrental`

5. Wgranie modułu pglogical.

create extension `pglogical`;

W przypadku błędu upewnij się, czy masz poprawnie wgraną bibliotekę pglogical. Wywołaj następującą komendę i zresetuj bazę danych:

alter system set shared_preload_libraries = '`pglogical`';

6. Stworzenie odpowiedniej struktury dla providera i subskrybentów.

Provider oprócz stworzenia węzła (node) musi dodać tablice do replikacji, przykładowo:

select pglogical.create_node (node_name := '`provider1`', dsn := 'host=`192.168.121.214` port=`5432` dbname=`dvdrental`');
    
select pglogical.replication_set_add_all_tables('`default`', ARRAY['`public`']);

Subskrybent oprócz stworzenia węzła (node) musi również stworzyć subskrypcję, przykładowo:

select pglogical.create_node (node_name := '`subscriber1`', dsn := 'host=`192.168.121.98` port=`5432` dbname=`dvdrental`');

select pglogical.create_subscription(subscription_name := '`subscription1`', provider_dsn := 'host=`192.168.121.214` port=`5432` dbname=`dvdrental`', replication_sets := '`{default}`');

Aby sprawdzić stworzone w ten sposób węzły, można wywołać komendę:

select * from pglogical.node_interface;

W przypadku subskrybentów można w podobny sposób sprawdzić subskrypcje i ich status:

select subscription_name, status FROM pglogical.show_subscription_status();

7. Jeżeli wszystko przebiegło pomyślnie, a status subskrypcji jest opisany jako replicating, udało się stworzyć mechanizm replikacji bazy danych. Aby go przetestować, wystarczy na przykład zrobić UPDATE dowolnego rekordu w bazie providera, a każdy subskrybent powinien od razu zaktualizować swoją bazę.

Podsumowanie

Tworzenie replikacji bazy danych jest kluczowym elementem zapewniającym stabilność systemu informatycznego. Narzędzia dostępne w paczce EuroDB umożliwiają uproszczone tworzenie replikacji logicznych, jak i strumieniowych bazy danych, przez co zyskujemy pewność w działaniu bazy, a także jesteśmy gotowi na ewentualne awarie.

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.