Replicação PostgreSQL
Objetivo
Replicação assíncrona de banco de dados de PostgreSQL para alta disponibilidade entre um servidor mestre e um ou mais servidores em standby. Os servidores standby podem também ser acessados, porém somente no modo de leitura.
Este tipo de replicação assíncrona é conhecida como Hot Standby. Se o servidor mestre falhar, um dos servidores em standby pode assumir como sendo no novo servidor mestre.
O PostgreSQL utiliza o Write-Ahead Logging (WAL) que, continuamente escreve as transações em arquivo. Para cada alteração, WAL escreve uma entrada nesse arquivo de log. O sistema então utiliza essas entradas para servir como ponto de restauração e manter os servidores standby atualizados.
O processo de atualização dos servidores standby com entradas WAL é chamada de replicação streaming. Este processo opera de modo assíncrono e portanto deve-se levar sempre em conta que há um tempo para os servidores standby serem atualizados.
Requisitos
- 02 servidores Debian 8
- PostgreSQL 9.4 ou superior
Procedimentos
Instalação
- Em cada servidor instale o PostgreSQL:
# apt-get install postgresql
- Crie uma base de dados:
# su - postgres $ psql postgres=# CREATE DATABASE test; postgres=# CREATE TABLE guestbook (visitor_email text, vistor_id serial, date timestamp, message text); postgres=# INSERT INTO guestbook (visitor_email, date, message) VALUES ('teste@sc.usp.br', current_date, 'Isto eh um teste'); postgres=# SELECT * FROM guestbook; postgres=# \q
- Crie o usuário para a replicação:
# su - postgres $ createuser -U postgres repuser -P -c 5 --replication
onde
- -U postgres: utiliza o usuário postgres para criar um novo usuário
- repuser: novo usuário para a replicação
- -P: permite digitar a senha do novo usuário
- -c: limita o número de conexões para o novo usuário
- --replication: permite os privilégios de REPLICATION ao novo usuário.
- Crie o diretório para armazenar os logs WAL:
# su - posgres $ mkdir -p /var/lib/postgres/main/mnt/server/archivedir
- Edite o arquivo /etc/postgresql/9.4/main/pg_hba.conf para permitir que o usuário de replicação tenha acesso ao banco de dados:
# vi /etc/postgresql/9.4/main/pg_hba.conf
e acrescente a seguinte linha nas conexões de replicação:
# Allow replication connections host replication repuser <standby-IP>/32 md5
salve e feche o arquivo.
- Edite o arquivo /etc/postgresql/9.4/main/postgresql.conf para configurar o servidor master. Não se esqueça de remover os comentários das linhas editadas:
# vi /etc/postgresql/9.4/main/postgresql.conf
Na seção Connectiong Settings da seção CONNECTIONS AND AUTHENTICATION, digite o IP do servidor mestre ou * para permitir o acesso do servidor standby:
listen_address = '*'
Na seção Settings da seção WRITE AHEAD LOG altere o modo WAL:
wal_level = hot_standby
Na seção Archiving, ative o modo de arquivos de log:
archive_mode = on
e altere o comando de arquivamento dos logs:
archive_command = 'test ! -f /var/lib/postgresql/main/mnt/server/archivedir/%f && cp %p /var/lib/postgresql/main/mnt/server/archivedir/%f'
Na seção Sending Server(s) da seção REPLICATION, mude o valor para o número máximo de processos de envio de WALs:
max_wal_senders = 3