Replicazione PostgreSQL su Debian - Il modo facile
Sono riuscito a replicare il database PostgreSQL 16 su due host: il primario e lo standby. Questo è un appunto che mi faccio per usi futuri.Il primario ha lo scopo di permettere l'accesso in lettura e scrittura ai dati. Lo standby è un server che viene tenuto sincronizzato dal primario e che permette di accedere ai dati soltanto in lettura. In caso di guasto del primario, un server standby può essere promosso a primario.
Prima di tutto bisogna installare postgresql su entrambe le macchine:
su apt install postgresql-16 postgresql-client
Su Debian bisogna ricordarsi che i comandi sono in /usr/lib/postgresql/16/bin/ .
Bisogna poi modificare il file di configurazione /etc/postgresql/16/main/postgresql.conf di entrambe le macchine in questo modo:
listen_addresses = '*' wal_level = replica wal_log_hints = on max_wal_senders = 8 hot_standby = on
e anche il file /etc/postgresql/16/main/pb_hba.conf sempre di entrambe le macchine:
host all all 127.0.0.1/32 trust host all all 192.168.56.0/24 trust host replication all 127.0.0.1/32 trust host replication all 192.168.56.0/24 trust
Al posto di 192.168.56.0/24 bisogna mettere la sottorete delle due macchine.
Se il primario è sporco, eseguire (come root):
systemctl stop postgresql su postgres rm -rf /var/lib/postgresql/16/main/* /usr/lib/postgresql/16/bin/initdb /var/lib/postgresql/16/main/ exit systemctl start postgresql
Bisogna poi stoppare il postgresql standby (come root) ed eseguire il comando pg_basebackup:
systemctl stop postgresql su postgres rm -rf /var/lib/postgresql/16/main/* pg_basebackup -h ip_del_primario -p 5432 -U postgres -c fast -D /var/lib/postgresql/16/main/ --slot=mioslot1 -R -C exit systemctl start postgresql
A questo punto, il primario potrà eseguire operazioni in lettura e scrittura, e lo standby eseguirà operazioni in sola lettura.
(OPZIONALE) Verificare sul primario le statistiche della replicazione:
psql \x SELECT * FROM pg_stat_replication;
(OPZIONALE) Verificare sullo standby le statistiche della replicazione:
psql \x SELECT * FROM pg_stat_wal_receiver;
2023
13 dic
13 dic