[4] PostgreSQL 13 – Replikacja Strumieniowa

26 stycznia 2022 Wyłączono przez Adam [zicherka] Nogły

Skonfiguruj replikację strumieniową PostgreSQL. Ta konfiguracja jest typowymi ustawieniami Primary/Replica.

[1] Zainstaluj i uruchom PostgreSQL na wszystkich węzłach.

[2] Skonfiguruj host [Primary].

[root@vlsr01 ~]# mcedit /var/lib/pgsql/data/postgresql.conf
#linia 60: odkomentuj i zmień
listen_addresses = '*'
#linia 198: odkomentuj
wal_level = replica
#linia 203: odkomentuj
synchronous_commit = on
#linia 292:odkomentuj (maksymalna liczba równoległych połączeń klientów)
max_wal_senders = 10
#linia 305: odkomentuj i zmień
synchronous_standby_names = '*'

[root@vlsr01 ~]# mcedit /var/lib/pgsql/data/pg_hba.conf
#ostatnie linie: zakomentuj wszystkie istniejące oraz dodane wcześniej linie
#host replication [replication_user] [dopuszczona_sieć] [metoda_autentykacji]
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
#host    replication     all             127.0.0.1/32            ident
#host    replication     all             ::1/128                 ident
host    all             all             192.168.0.0/16          md5
hostssl all             all             192.168.0.0/16          md5
host    replication     rep_user        192.168.100.101/32      md5
host    replication     rep_user        192.168.100.102/32      md5

#użytkownik do replikacji
[root@vlsr01 ~]# su - postgres
[postgres@vlsr01 ~]$ createuser --replication -P rep_user
Enter password for new role: # wpisz dowolne hasło
Enter it again: # wpisz hasło ponownie
[postgres@vlsr01 ~]$ exit
wylogowanie

[root@vlsr01 ~]# systemctl restart postgresql

[3] Skonfiguruj host [Replica].

#zatrzymaj PostgreSQL i usuń istniejące dane
[root@vlsr02 ~]# systemctl stop postgresql
[root@vlsr02 ~]# rm -rf /var/lib/pgsql/data/*
#pobierz backup z hosta Primary
[root@vlsr02 ~]# su - postgres
[postgres@vlsr02 ~]$ pg_basebackup -R -h vlsr01.zicher.lab -U rep_user -D /var/lib/pgsql/data -P
Password: #wpisz hasło
32199/32199 kB (100%), 1/1 tablespace
[postgres@vlsr02 ~]$ exit
Wylogowanie

[root@vlsr02 ~]# mcedit /var/lib/pgsql/data/postgresql.conf
#linia 60: odkomentuj i zmień
listen_addresses = '*'
#linia 320: odkomentuj
hot_standby = on

[root@vlsr02 ~]# mcedit /var/lib/pgsql/data/pg_hba.conf
#ostatnie linie: zakomentuj istniejące i dodane wcześniej linie
#host replication [użytkownik_replikacji] [dozwolona_sieć] [metoda_autentykacji]
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
#host    replication     all             127.0.0.1/32            ident
#host    replication     all             ::1/128                 ident
host    all             all             192.168.0.0/16          md5
hostssl all             all             192.168.0.0/16          md5
host    replication     rep_user        192.168.100.101/32      md5
host    replication     rep_user        192.168.100.102/32      md5

[root@vlsr02 ~]# systemctl restart postgresql

[4] Jeżeli jest uruchomiony Firewalld, zezwól PostgreSQL na dostęp do sieci

[root@vlsr01 ~]# firewall-cmd --add-service=postgresql –permanent
[root@vlsr01 ~]# firewall-cmd –reload

[5] Jest w porządku, jeśli wynik poniższego polecenia na głównym hoście wygląda następująco. Sprawdź, czy działa normalnie przy tworzeniu baz danych lub wstawianiu danych na głównym hoście.

[postgres@vlsr01 ~]$ psql -c "select usename, application_name, client_addr, state, sync_priority, sync_state from pg_stat_replication;"
 usename  | application_name |   client_addr   |   state   | sync_priority | sync_state
----------+------------------+-----------------+-----------+---------------+------------
 rep_user | walreceiver      | 192.168.100.102 | streaming |             1 | sync

(1 row)