Jak skonfigurować replikację logiczną PostgreSQL na Ubuntu

Jak skonfigurować replikację logiczną PostgreSQL na Ubuntu
„Dane są bardzo ważną częścią każdej aplikacji. PostgreSQL to popularny serwer bazy danych do przechowywania danych aplikacji. Dostępność danych jest niezbędną funkcją każdej bazy danych. Lepiej jest zachować wiele kopii bazy danych, aby zapewnić dostępność danych aplikacji. Jeśli żadna kopia kopii zapasowej bazy danych nie jest przechowywana i jeśli baza danych awansuje w dowolnym momencie, aplikacja nie będzie dostępna. Jedną lub więcej kopii bazy danych PostgreSQL można przechowywać, aby uniknąć tej sytuacji, i nazywa się to replikacją. Dwa rodzaje replikacji można wykonać na PostgreSQL. Są to logiczna replikacja i replikacja fizyczna. Sposób skonfigurowania logicznej replikacji bazy danych PostgreSQL został wyjaśniony w tym samouczku."

Replikacja logiczna

Sposób powtórzenia obiektów danych i ich zmian nazywa się replikacją logiczną. Działa na podstawie publikacji i subskrypcji. Wykorzystuje Wal (rejestrowanie zapisu) do rejestrowania zmian logicznych w bazie danych. Zmiany w bazie danych są publikowane w bazie danych wydawcy, a subskrybent otrzymuje replikowaną bazę danych od wydawcy w czasie rzeczywistym, aby zapewnić synchronizację bazy danych.

Architektura logicznej replikacji

Model wydawcy/subskrybenta jest używany w logicznej replikacji PostgreSQL. Zestaw replikacji jest publikowany w węźle wydawcy. Jedna lub więcej publikacji jest subskrybowana przez węzeł subskrybenta. Replikacja logiczna kopiuje migawkę bazy danych publikacji do subskrybenta, która nazywa się fazą synchronizacji tabeli. Spójność transakcyjna jest utrzymywana przy użyciu zatwierdzenia, gdy jakakolwiek zmiana jest dokonywana w węźle subskrybentów. Ręczna metoda replikacji logicznej postgreSQL została pokazana w następnej części tego samouczka.

Logiczny proces replikacji pokazano na poniższym schemacie.

Wszystkie typy operacji (wstaw, aktualizacja i usuwanie) są domyślnie replikowane w replikacji logicznej. Ale zmiany w obiekcie, które zostanie powtórzone, mogą być ograniczone. Tożsamość replikacji należy skonfigurować dla obiektu, który jest wymagany do dodania do publikacji. Klucz pierwotnego lub indeksu jest używany do tożsamości replikacji. Jeśli tabela źródłowej bazy danych nie zawiera żadnego klucza podstawowego lub indeksu, to wówczas pełny zostanie użyty do tożsamości repliki. Oznacza to, że wszystkie kolumny tabeli będą używane jako klucz. Publikacja zostanie utworzona w źródłowej bazie danych za pomocą polecenia Utwórz publikację, a subskrypcja zostanie utworzona w bazie danych docelowych za pomocą polecenia Utwórz subskrypcję. Subskrypcję można zatrzymać lub wznowić, używając polecenia subskrypcji alter i usunięcie przez polecenie subskrypcji upuść. Replikacja logiczna jest zaimplementowana przez Wal Sender i opiera się na dekodowaniu Wal. Wal nadawca ładuje standardową wtyczkę logiczną dekodującą. Ta wtyczka przekształca zmiany pobrane z WAL w proces replikacji logicznej, a dane są filtrowane na podstawie publikacji. Następnie dane są przesyłane w sposób ciągły za pomocą protokołu replikacji do pracownika replikacji, który mapuje dane z tabelą docelowej bazy danych i stosuje zmiany w oparciu o kolejność transakcyjną.

Funkcje logicznej replikacji

Poniżej wymieniono niektóre ważne cechy replikacji logicznej.

  • Obiekty danych replikują się na podstawie tożsamości replikacji, takich jak klucz podstawowy lub unikalny klucz.
  • Do zapisywania danych na serwerze docelowym można użyć różnych indeksów i zabezpieczeń.
  • Filtrowanie oparte na zdarzeniach można wykonać za pomocą replikacji logicznej.
  • Replikacja logiczna obsługuje wersję krzyżową. Oznacza to, że można go wdrożyć między dwiema różnymi wersjami bazy danych PostgreSQL.
  • Publikacja obsługuje wiele subskrypcji.
  • Mały zestaw tabel można powtórzyć.
  • Wymaga minimalnego obciążenia serwera.
  • Może być używany do aktualizacji i migracji.
  • Umożliwia równoległe przesyłanie strumieniowe wśród wydawców.

Zalety logicznej replikacji

Niektóre korzyści z logicznej replikacji są wymienione poniżej.

  • Służy do replikacji między dwiema różnymi wersjami baz danych PostgreSQL.
  • Można go użyć do replikacji danych wśród różnych grup użytkowników.
  • Można go używać do łączenia wielu baz danych do jednej bazy danych do celów analitycznych.
  • Można go użyć do wysyłania przyrostowych zmian w podzbiorze bazy danych lub pojedynczej bazy danych do innych baz danych.

Wady logicznej replikacji

Pewne ograniczenia logicznej replikacji są wymienione poniżej.

  • Obowiązkowe jest posiadanie klucza podstawowego lub unikalnego klucza w tabeli źródłowej bazy danych.
  • Pełna kwalifikowana nazwa tabeli jest wymagana między publikacją a subskrypcją. Jeśli nazwa tabeli nie jest taka sama dla źródła i miejsca docelowego, wówczas replikacja logiczna nie zadziała.
  • Nie obsługuje dwukierunkowej replikacji.
  • Nie można go użyć do replikacji schematu/DDL.
  • Nie można go użyć do replikacji obcięcia.
  • Nie można go użyć do replikacji sekwencji.
  • Dodanie uprawnień do użytkownika jest obowiązkowe do wszystkich tabel.
  • Różną kolejność kolumn może być używana na serwerze docelowym, ale nazwy kolumn muszą być takie same dla subskrypcji i publikacji.

Wdrażanie logicznej replikacji

W tej części tego samouczka pokazano kroki wdrażania logicznej replikacji w bazie danych PostgreSQL.

Wymagania wstępne

A. Skonfiguruj węzły Master i Replica

Możesz ustawić węzły Master i Replica na dwa sposoby. Jednym ze sposobów jest użycie dwóch osobnych komputerów, w których instalowany jest system operacyjny Ubuntu, a innym sposobem jest użycie dwóch maszyn wirtualnych, które są instalowane na tym samym komputerze. Proces testowania procesu replikacji fizycznej będzie łatwiejszy, jeśli użyjesz dwóch oddzielnych komputerów dla węzła głównego i węzła repliki, ponieważ określony adres IP można łatwo przypisać dla każdego komputera. Ale jeśli użyjesz dwóch maszyn wirtualnych na tym samym komputerze, wówczas statyczny adres IP będzie wymagał ustawienia dla każdej maszyny wirtualnej i upewnij się, że obie wirtualne maszyny mogą się ze sobą komunikować za pośrednictwem statycznego adresu IP. Użyłem dwóch wirtualnych maszyn do przetestowania procesu replikacji fizycznej w tym samouczku. Nazwa hosta gospodarz Węzeł został ustawiony na Fahmida-Master, i nazwa hosta replika Węzeł został ustawiony na Fahmida-Slave Tutaj.

B. Zainstaluj PostgreSQL w węzłach głównych i repliki

Musisz zainstalować najnowszą wersję serwera bazy danych PostgreSQL na dwóch maszynach przed rozpoczęciem kroków tego samouczka. W tym samouczku użyto postgresql wersja 14. Uruchom następujące polecenia, aby sprawdzić zainstalowaną wersję PostgreSQL w węźle głównym.

Uruchom następujące polecenie, aby zostać użytkownikiem rootowym.

$ sudo -i

Uruchom następujące polecenia, aby zalogować się jako użytkownik Postgres z uprawnieniami Superuser i nawiązać połączenie z bazą danych PostgreSQL.

$ su - Postgres
$ psql

Wyjście pokazuje, że PostgreSQL wersja 14.4 zostało zainstalowane w wersji 22 Ubuntu.04.1.

Podstawowe konfiguracje węzłów

W tej części samouczka pokazano niezbędne konfiguracje dla węzła pierwotnego. Po skonfigurowaniu konfiguracji musisz utworzyć bazę danych z tabelą w węźle podstawowym i utworzyć rolę i publikację, aby otrzymać żądanie z węzła repliki, i przechowywać zaktualizowaną zawartość tabeli w węźle repliki.

A. Zmodyfikuj PostgreSQL.conf plik

Musisz skonfigurować adres IP węzła podstawowego w pliku konfiguracyjnym PostgreSQL o nazwie PostgreSQL.conf To znajduje się w lokalizacji, /etc/postgresql/14/main/postgresql.conf. Zaloguj się jako użytkownik root w węźle podstawowym i uruchom następujące polecenie, aby edytować plik.

$ nano/etc/postgresql/14/main/postgresql.conf

Dowiedz się Słuchaj_addresses Zmienna w pliku, usuń skrót (#) od początku zmiennej, aby odkupić linię. Możesz ustawić gwiazdkę (*) lub adres IP węzła pierwotnego dla tej zmiennej. Jeśli ustawisz Asterisk (*), serwer podstawowy będzie słuchać wszystkich adresów IP. Będzie słuchać określonego adresu IP, jeśli adres IP serwera głównego jest ustawiony na tę zmienną. W tym samouczku adres IP głównego serwera, który został ustawiony na tę zmienną 192.168.10.5.

Listen_Addressess = „"

Następnie dowiedz się Wal_Level zmienna do ustawienia typu replikacji. Tutaj wartość zmiennej będzie logiczny.

Wal_Level = logiczny

Uruchom następujące polecenie, aby ponownie uruchomić serwer PostgreSQL po zmodyfikowaniu PostgreSQL.conf plik.

$ Systemctl restartuj postgresql

*** Uwaga: Po skonfigurowaniu konfiguracji, jeśli napotykasz problem uruchamiania serwera PostgreSQL, następnie uruchom następujące polecenia dla PostgreSQL w wersji 14.

$ sudo chmod 700 -r/var/lib/postgresql/14/main
$ sudo -i -u postgres
#/usr/lib/postgresql/10/bin/pg_ctl restart -d/var/lib/postgresql/10/main

Po pomyślnym wykonaniu powyższego polecenia będziesz mógł połączyć się z serwerem PostgreSQL.

Zaloguj się do serwera PostgreSQL i uruchom następującą instrukcję, aby sprawdzić bieżącą wartość poziomu Wal.

# Pokaż Wal_Level;

B. Utwórz bazę danych i tabelę

Możesz użyć dowolnej istniejącej bazy danych PostgreSQL lub utworzyć nową bazę danych do testowania procesu replikacji logicznej. Tutaj utworzono nową bazę danych. Uruchom następujące polecenie SQL, aby utworzyć nazwaną bazę danych Próbki.

# Utwórz bazę danych sampledB;

Następujące dane wyjściowe pojawią się, jeśli baza danych zostanie utworzona pomyślnie.

Musisz zmienić bazę danych, aby utworzyć tabelę dla Sampledb. „\ C” z nazwą bazy danych jest używany w PostgreSQL do zmiany bieżącej bazy danych.

Poniższa instrukcja SQL zmieni bieżącą bazę danych z Postgres na SampleDB.

# \ c próbpledb

Poniższa instrukcja SQL utworzy nową tabelę o nazwie książkę w bazie danych sampledB. Tabela będzie zawierać trzy pola. To są identyfikator, tytuł i nazwa_ autora.

# Utwórz książkę stołową (
ID szeregowy klucz podstawowy,
Tytuł Varchar (50),
Author_name varchar (50));

Następujące dane wyjściowe pojawią się po wykonaniu powyższych instrukcji SQL.

Uruchom następujące dwa instrukcje wstawki, aby wstawić dwa rekordy do tabeli książki.

# Wstaw do książki (tytuł, nazwa_ autora)
Wartości („PostgreSQL 14 Administration Cookbook”, „Simon Riggs, Gianni ciolli”);
# Wstaw do książki (tytuł, nazwa_ autora)
Wartości („Learn Postgresql”, „Luca Ferrari, Enrico Pirozzi”);

Pojawi się następujące dane wyjściowe, jeśli rekordy zostaną pomyślnie wstawiane.

Uruchom następujące polecenie, aby utworzyć rolę z hasłem, które zostanie użyte do nawiązania połączenia z węzłem podstawowym z węzła repliki.

# Utwórz replikację replikacji Role Login „12345”;

Następujące dane wyjściowe pojawią się, jeśli rola zostanie utworzona pomyślnie.

Uruchom następujące polecenie, aby udzielić wszystkich uprawnień na książka stół dla Replikauser.

# Daj wszystko w książce replicauser;

Następujące dane wyjściowe pojawią się, jeśli zostanie udzielone pozwolenie na Replikauser.

C. Zmodyfikuj PG_HBA.conf plik

Musisz skonfigurować adres IP węzła repliki w pliku konfiguracyjnym PostgreSQL o nazwie PG_HBA.conf To znajduje się w lokalizacji, /etc/postgresql/14/main/pg_hba.conf. Zaloguj się jako użytkownik root w węźle podstawowym i uruchom następujące polecenie, aby edytować plik.

$ nano/etc/postgresql/14/main/pg_hba.conf

Dodaj następujące informacje na końcu tego pliku.

gospodarz /32 Scram-SHA-256

IP serwera niewolnika jest ustawione na „192.168.10.10 ”tutaj. Zgodnie z poprzednimi krokami do pliku dodano następujący wiersz. Tutaj nazwa bazy danych jest Sampledb, użytkownik jest Replikauser, a adres IP serwera repliki to 192.168.10.10.

Host SampledB Replicauser 192.168.10.10/32 Scram-SHA-256

Uruchom następujące polecenie, aby ponownie uruchomić serwer PostgreSQL po zmodyfikowaniu PG_HBA.conf plik.

$ Systemctl restartuj postgresql

D. Utwórz publikację

Uruchom następujące polecenie, aby utworzyć publikację dla książka tabela.

# Utwórz publikację BookPub dla książki stołowej;

Uruchom następujące meta-command PSQL, aby sprawdzić, czy publikacja jest utworzona pomyślnie, czy nie.

$ \ DRP+

Następujące dane wyjściowe pojawią się, jeśli publikacja zostanie utworzona pomyślnie dla tabeli książka.

Konfiguracje węzłów repliki

Musisz utworzyć bazę danych z tą samą strukturą tabeli, która została utworzona w węźle podstawowym w węźle repliki i utworzyć subskrypcję do przechowywania zaktualizowanej zawartości tabeli z węzła podstawowego.

A. Utwórz bazę danych i tabelę

Możesz użyć dowolnej istniejącej bazy danych PostgreSQL lub utworzyć nową bazę danych do testowania procesu replikacji logicznej. Tutaj utworzono nową bazę danych. Uruchom następujące polecenie SQL, aby utworzyć nazwaną bazę danych Replicadb.

# Utwórz bazę danych ReplicadB;

Następujące dane wyjściowe pojawią się, jeśli baza danych zostanie utworzona pomyślnie.

Musisz zmienić bazę danych, aby utworzyć tabelę dla Replicadb. Użyj „\ c” z nazwą bazy danych, aby zmienić bieżącą bazę danych, jak poprzednio.

Poniższa instrukcja SQL zmieni bieżącą bazę danych z Postgres Do Replicadb.

# \ c replicadb

Poniższa instrukcja SQL utworzy nową tabelę o nazwie książka do Replicadb Baza danych. Tabela będzie zawierać te same trzy pola, co tabela utworzona w węźle pierwotnym. To są identyfikator, tytuł i nazwa_ autora.

# Utwórz książkę stołową (
ID szeregowy klucz podstawowy,
Tytuł Varchar (50),
Author_name varchar (50));

Następujące dane wyjściowe pojawią się po wykonaniu powyższych instrukcji SQL.

B. Utwórz subskrypcję

Uruchom następującą instrukcję SQL, aby utworzyć subskrypcję dla bazy danych węzła pierwotnego w celu pobrania zaktualizowanej zawartości tabeli książek z węzła głównego do węzła repliki. Tutaj nazwa bazy danych węzła głównego to Sampledb, Adres IP głównego węzła to „192.168.10.5”, Nazwa użytkownika to Replikauser, A hasło to „12345".

# Utwórz subskrypcję książki Connection 'dbname = SampleDB host = 192.168.10.5 Użytkownik = hasło do repikiUser = 12345 port = 5432 'publikacja BookPub;

Następujące dane wyjściowe pojawią się, jeśli subskrypcja zostanie utworzona pomyślnie w węźle repliki.

Uruchom następujące meta-command PSQL, aby sprawdzić, czy subskrypcja jest utworzona pomyślnie lub nie.

# \ Drs+

Pojawi się następujące dane wyjściowe, jeśli subskrypcja zostanie utworzona pomyślnie dla tabeli książka.

C. Sprawdź zawartość tabeli w węźle repliki

Uruchom następujące polecenie, aby sprawdzić zawartość tabeli książek w węźle repliki po subskrypcji.

# Książka stołowa;

Poniższe wyjście pokazuje, że do tabeli węzła repliki dodano dwie rekordy, które zostały wstawione w tabeli węzła pierwotnego. Jest więc jasne, że prosta logiczna replikacja została poprawnie zakończona.

Możesz dodać jedną lub więcej rekordów lub aktualizować rekordy lub usunąć rekordy w tabeli książki węzła podstawowego lub dodać jedną lub więcej tabel w wybranej bazie danych węzła głównego i sprawdzić bazę danych węzła repliki, aby sprawdzić, czy zaktualizowana zawartość z Podstawowa baza danych jest poprawnie powtórzona w bazie danych węzła repliki, czy nie.

Wstaw nowe rekordy w głównym węźle:

Uruchom następujące instrukcje SQL, aby wstawić trzy rekordy do książka Tabela serwera podstawowego.

# Wstaw do książki (tytuł, nazwa_ autora)
Wartości („Art of Postgresql”, „Dimitri Fontaine”),
(„Postgresql: Up and Running, 3rd Edition”, „Regina OBE i Leo Hsu”),
(„Postgresql High Performance Cookbook”, „Chitij Chauhan, Dinesh Kumar”);

Uruchom następujące polecenie, aby sprawdzić bieżącą zawartość książka Tabela w węźle podstawowym.

# Wybierz * z książki;

Poniższe dane wyjściowe pokazuje, że trzy nowe rekordy zostały poprawnie włożone do tabeli.

Sprawdź węzeł repliki po wstawieniu

Teraz musisz sprawdzić, czy książka Tabela węzła repliki została zaktualizowana lub nie. Zaloguj się do serwera PostgreSQL węzła repliki i uruchom następujące polecenie, aby sprawdzić zawartość książka tabela.

# Książka stołowa;

Poniższe dane wyjściowe pokazuje, że w trzech nowych rekordach zostały włożone w książki Tabela replika węzeł, który został wstawiony do podstawowy Węzeł książka tabela. Tak więc zmiany w głównej bazie danych zostały poprawnie powtórzone w węźle repliki.

Zaktualizuj rekord w węźle podstawowym

Uruchom następujące polecenie aktualizacji, które zaktualizuje wartość imię autora pole, w którym wartość pola ID wynosi 2. Jest tylko jeden rekord w książka Tabela, która pasuje do stanu zapytania aktualizacji.

# Aktualizacja zestawu książki autora_name = „fahmida” gdzie id = 2;

Uruchom następujące polecenie, aby sprawdzić bieżącą zawartość książka Tabela w podstawowy węzeł.

# Wybierz * z książki;

Pokazuje to następujące dane wyjściowe nazwa_ autora Wartość polowa konkretnego rekordu została zaktualizowana po wykonaniu zapytania aktualizacji.

Sprawdź węzeł repliki po aktualizacji

Teraz musisz sprawdzić, czy książka Tabela węzła repliki została zaktualizowana lub nie. Zaloguj się do serwera PostgreSQL węzła repliki i uruchom następujące polecenie, aby sprawdzić zawartość książka tabela.

# Książka stołowa;

Poniższe dane wyjściowe pokazuje, że jeden rekord został zaktualizowany w książka Tabela węzła repliki, która została zaktualizowana w głównym węźle książka tabela. Tak więc zmiany w głównej bazie danych zostały poprawnie powtórzone w węźle repliki.

Usuń rekord w węźle podstawowym

Uruchom następujące polecenie Usuń, które usunie rekord z książka Tabela podstawowy węzeł, w którym wartością pola nazwy autora jest „fahmida”. Jest tylko jeden rekord w książka Tabela, która pasuje do stanu zapytania Usuń.

# Usuń z książki, gdzie nazwa autora = „fahmida”;

Uruchom następujące polecenie, aby sprawdzić bieżącą zawartość książka Tabela w podstawowy węzeł.

# Wybierz * z książki;

Poniższe dane wyjściowe pokazuje, że jeden rekord został usunięty po wykonaniu zapytania Usuń.

Sprawdź węzeł repliki po usunięciu

Teraz musisz sprawdzić, czy książka Tabela węzła repliki została usunięta lub nie. Zaloguj się do serwera PostgreSQL węzła repliki i uruchom następujące polecenie, aby sprawdzić zawartość książka tabela.

# Książka stołowa;

Poniższe dane wyjściowe pokazuje, że jeden rekord został usunięty w książka Tabela węzła repliki, która została usunięta w węźle pierwotnym książka tabela. Tak więc zmiany w głównej bazie danych zostały poprawnie powtórzone w węźle repliki.

Wniosek

Cel logicznej replikacji w celu utrzymania kopii zapasowej bazy danych, architektura replikacji logicznej, zalety i wady replikacji logicznej oraz etapy wdrażania logicznej replikacji w bazie danych PostgreSQL zostały wyjaśnione w tym samouczku z przykładami z przykładami. Mam nadzieję, że koncepcja replikacji logicznej zostanie wyczyszczona dla użytkowników, a użytkownicy będą mogli użyć tej funkcji w swojej bazie danych PostgreSQL po przeczytaniu tego samouczka.