FOPENP

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