Table of Contents

PostgreSQL HA

Master-Replica - Transaction Log Shipping in synchronous mode

On master

master# aptitude install postgresql postgresql-client
master# sed -i "s/^#listen_addresses = 'localhost'\(.*\)/listen_addresses = '*'\1/" /etc/postgresql/9.6/main/postgresql.conf
master# sed -i 's/^#max_replication_slots = 0\(.*\)/max_replication_slots = 10\1/' /etc/postgresql/9.6/main/postgresql.conf
master# sed -i 's/^#wal_level = minimal\(.*\)/wal_level = replica\1/' /etc/postgresql/9.6/main/postgresql.conf
master# sed -i 's/^#max_wal_senders = 0\(.*\)/max_wal_senders = 10\1/' /etc/postgresql/9.6/main/postgresql.conf
master# echo "host    replication     replicator      10.0.120.36/32          md5" >> /etc/postgresql/9.6/main/pg_hba.conf
master# systemctl restart postgresql.service

master# su - postgres
master$ psql
postgres=# CREATE ROLE replicator LOGIN REPLICATION ENCRYPTED PASSWORD 'replicator123';
postgres=# SELECT * FROM pg_create_physical_replication_slot('replicator');

master# systemctl restart postgresql.service

On replica

replica# aptitude install postgresql postgresql-client
replica# systemctl stop postgresql.service
replica# sed -i "s/^#listen_addresses = 'localhost'\(.*\)/listen_addresses = '*'\1/" /etc/postgresql/9.6/main/postgresql.conf
replica# sed -i 's/^#hot_standby = off\(.*\)/hot_standby = on\1/' /etc/postgresql/9.6/main/postgresql.conf

replica# mv /var/lib/postgresql/9.6/main /var/lib/postgresql/9.6/main.bkp
replica# pg_basebackup -h 10.0.120.37 -U replicator -D /var/lib/postgresql/9.6/main/ -P --password --slot=replicator --xlog-method=stream
replica# chown -R postgres:postgres /var/lib/postgresql/9.6/main
standby_mode = 'on'
primary_conninfo = 'host=10.0.120.37 port=5432 user=replicator password=replicator123'
primary_slot_name = 'replicator'
trigger_file = '/var/lib/postgresql/9.6/main/failover.trigger'
replica# chown postgres:postgres /var/lib/postgresql/9.6/main/recovery.conf
replica# chmod 0600 /var/lib/postgresql/9.6/main/recovery.conf

replica# systemctl start postgresql.service

Failover

replica# touch /tmp/failover.trigger
replica# chown postgres:postgres /tmp/failover.trigger
replica# mv /tmp/failover.trigger /var/lib/postgresql/9.6/main/failover.trigger