Acessar o diretorio /var/lib/pgsql/data e adiconar as linhas no final do arquivo de configuração pg_hba.conf:
#Localhost
host replication replica 127.0.0.1/32 md5 #IP Servidor Local
#PostgreSQL Master IP address
host replication replica 0.0.0.0/32 md5 #Substituir o campo "0.0.0.0/32" pelo IP do Servidor Primário.
#PostgreSQL Slave IP address
host replication replica 0.0.0.0/32 md5 #Substituir o campo "0.0.0.0/32" pelo IP do Servidor Secundário.
[root@db-atendimento ~]# su - postgres
Last login: Wed Jul 11 14:17:32 -03 2018 on pts/0
-bash-4.2$ psql
psql (9.2.23)
Type "help" for help.
postgres=#
Criar um usuário e senha para replica:
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'aqwe123@';
Configuração do servidor Primário completa.
Configuração do servidor Secundário:
Partimos do principio que o PostgreSQL está instalado na versão desejada igual ao Primário.
Parar o serviço de banco de dados postgresql:
sudo systemctl stop postgresql
Copiar dados do servidor Primário para o servidor Secundário.
Trasferencia de dados e configuração do PostgreSQL secundário completa.
Agora vamos testar
Para testar, verificaremos o status de replicação do PostgreSQL 9.6 e tentaremos criar uma nova tabela no servidor Primário, depois validaremos a replicação verificando todos os dados do servidor Secundário.
Faça o login no servidor Primário como usuário postgres.
su - postgres
Faça os testes abaixo para validar a replica do PostgreSQL.
-bash-4.2$ psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
[root@centos ~]# su - postgres
Last login: Wed Jul 11 14:03:07 -03 2018 on pts/0
-bash-4.2$ psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
application_name | state | sync_priority | sync_state
------------------+-----------+---------------+------------
pgslave001 | streaming | 1 | sync
(1 row)
Em seguida, crie uma nova tabela no servidor Primário, faça login com usuário postgres no servidor Primário.
[root@centos tmp]# su - postgres
Last login: Wed Jul 11 14:18:13 -03 2018 on pts/0
-bash-4.2$ psql
psql (9.2.23)
Type "help" for help.
postgres=#
postgres=# CREATE TABLE replica_test (hakase varchar(100));
CREATE TABLE
postgres=# INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT 0 1
postgres=# INSERT INTO replica_test VALUES ('This is from Master');
INSERT 0 1
postgres=# INSERT INTO replica_test VALUES ('pg replication by hakase-labs');
INSERT 0 1
postgres=# select * from replica_test;
hakase
-------------------------------
howtoforge.com
This is from Master
pg replication by hakase-labs
(3 rows)
Em seguida, faça login no usuário postgres no servidor Secundário e acesse o terminal psql.
[root@centos tmp]# su - postgres
Last login: Wed Jul 11 14:18:13 -03 2018 on pts/0
-bash-4.2$ psql
psql (9.2.23)
Type "help" for help.
postgres=#
Verifique os dados na tabela 'replica_test' com a consulta postgres abaixo.
postgres=# select * from replica_test;
hakase
-------------------------------
howtoforge.com
This is from Master
pg replication by hakase-labs
(3 rows)
Teste adicional:
Teste para escrever no servidor Secundário com a consulta abaixo.
postgres=# INSERT INTO replica_test VALUES ('this is SLAVE');
ERROR: cannot execute INSERT in a read-only transaction