[4] PostgreSQL 13 – Replikacja Strumieniowa
26 stycznia 2022Skonfiguruj 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)