Replicação PostgreSQL

De Infraestrutura São Carlos
Ir para navegação Ir para pesquisar

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

  1. Em cada servidor instale o PostgreSQL:
    # apt-get install postgresql
    
  2. Servidor Mestre

  3. 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
    
  4. 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.
  5. Crie o diretório para armazenar os logs WAL:
    # su - posgres
    $ mkdir -p /var/lib/postgres/main/mnt/server/archivedir
    
  6. 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.

  7. 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