Replicação

Versão 9.6

No primário

postgresql.conf

hot_standby = 'on'
hot_standby_feedback = 'on'
wal_level = 'logical'
wal_compression = 'on'
max_wal_senders = '20'
max_replication_slots = '40'
wal_keep_segments = '100'

pg_hba.conf

host    replication   all                        172.17.10.51/32        trust

recarregar a configuração

select pg_reload_conf();

ou

systemctl reload postgresql-9.6.service

criar novo slot de replicação

SELECT * FROM pg_create_physical_replication_slot('the_slot_name');

verificar a criação do slot

SELECT * FROM pg_replication_slots;

se você precisar remover o slot criado

-- Executar apenas para remover o slot!
SELECT pg_drop_replication_slot('the_slot_name');

No secundário

Depois de instalar a mesma versão do PostgreSQL do primário, execute o initdb.

/usr/pgsql-9.6/bin/initdb --pgdata=/var/lib/pgsql/9.6/data
# or
/usr/pgsql-9.6/bin/postgresql96-setup initdb

Parar o postgres e remover o diretório de dados

rm -rf /var/lib/pgsql/9.6/data

Criar o banco replicado, com o usuário postgres. Use o tmux para isso.

/usr/pgsql-9.6/bin/pg_basebackup --pgdata=/var/lib/pgsql/9.6/data --write-recovery-conf --slot=the_slot_name --progress --host=10.0.3.33 --xlog-method=stream --checkpoint=fast

Iniciar o serviço do postgres, com o usuário root, usando também o screen.

# this start command will run for a while. be patient.
systemctl start postgresql-9.6.service

Verificar o status

systemctl status postgresql-9.6.service

Voltar ao primário e verificar o status do slot (o campo active deve ser true)

SELECT * FROM pg_replication_slots;

-[ RECORD 1 ]-------+-----------------------------
slot_name           | the_slot_name
plugin              |
slot_type           | physical
datoid              |
database            |
active              | t
active_pid          | 242213
xmin                | 1936192908
catalog_xmin        |
restart_lsn         | 65966/54EE6000
confirmed_flush_lsn |