Instalação e Configuração de Replicação do PostgreSQL 9.5 no CentOS 7

Instalação do PostgreSQL 9.5

Adicione o repositório oficial da comunidade PostgreSQL para o CentOS 7:

yum install -y https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm

Em seguida, instale o pacote do servidor e o pacote de contribuições:

yum install -y postgresql95-server postgresql95-contrib

Inicialize o cluster de dados:

/usr/pgsql-9.5/bin/postgresql95-setup initdb

Habilite o serviço para iniciar automaticamente e inicie-o:

systemctl enable postgresql-9.5.service
systemctl start postgresql-9.5.service

Verifique a versão instalada:

psql --version

Para alterar a senha do superusuário postgres, execute:

su - postgres
psql -c "ALTER USER postgres WITH PASSWORD 'NovaSenhaAdmin';"

Configuração da Replicação Streaming

O cenário a seguir usa dois servidores com o PostgreSQL 9.5 já instalado via yum. O primário aceita leitura e escrita; o standby opera apenas como leitura. O standby não deve ser inicializado entes da cópia dos dados do primário.

Sistema Hostname IP Versão Papel
CentOS 7.6 pg-principal 10.0.0.10 9.5.18 Primário
CentOS 7.6 pg-standby 10.0.0.20 9.5.18 Standby

Configuração no Primário

Edite o arquivo postgresql.conf para habilitar o envio de WAL aos standbys:

cat >> /var/lib/pgsql/9.5/data/postgresql.conf <<'EOF'
wal_level = hot_standby
max_wal_senders = 4
wal_keep_segments = 64
EOF

O parâmetro wal_level define o modo hot standby. max_wal_senders limita o número de conexões de replicação simultâneas. wal_keep_segments determina quantos arquivos de WAL (16 MB cada) serão retidos no primário, ocupando aproximadamente 1 GB quando configurado com 64.

Crie um usuário dedicado à replicação:

su - postgres
psql -c "CREATE ROLE replica_user WITH REPLICATION LOGIN PASSWORD 'ReplicaPass123';"

Permita que o standby se conecte ao primário para receber os WALs, editando o arquivo pg_hba.conf:

host    replication     replica_user     10.0.0.0/24     md5

Confgiure o endereço de escuta do servidor para o IP do primário:

listen_addresses = '10.0.0.10'

Reinicie o serviço para aplicar as alterações:

systemctl restart postgresql-9.5.service

Configuarção no Standby

Pare o serviço no standby e remova qualquer conteúdo existente no diretório de dados antes de executar a cópia:

systemctl stop postgresql-9.5.service
rm -rf /var/lib/pgsql/9.5/data/*

Execute o pg_basebackup para clonar o conteúdo do primário:

/usr/pgsql-9.5/bin/pg_basebackup -h 10.0.0.10 -U replica_user -D /var/lib/pgsql/9.5/data/ -Fp -Xs -P -R -l replica_inicial

Significado dos parâmetros:

  • -Fp: mantém a estrutura original dos arquivos (formato plain).
  • -Xs: inicia um fluxo de WAL em paralelo ao backup.
  • -P: exibe o progresso da cópia.
  • -R: cria automaticamente o arquivo recovery.conf com as configurações de replicação.
  • -D: diretório de destino no standby.
  • -l: rótulo identificador do backup.

Ajuste o proprietário dos arquivos copiados para o usuário do PostgreSQL:

chown -R postgres:postgres /var/lib/pgsql/9.5/data/

Edite o postgresql.conf do standby para permitir consultas durante a recuperação:

cat >> /var/lib/pgsql/9.5/data/postgresql.conf <<'EOF'
hot_standby = on
EOF

Inicie o serviço no standby:

systemctl start postgresql-9.5.service

Verificação

No primário, crie uma tabela e insira registros:

su - postgres
psql -c "CREATE TABLE clientes (id serial PRIMARY KEY, nome varchar(100));"
psql -c "INSERT INTO clientes (nome) VALUES ('Ana Silva'), ('Bruno Costa');"

No standby, confira se os dados foram replicados:

su - postgres
psql -c "SELECT * FROM clientes;"

O standby deve retornar as linhas inseridas no primário. Operações de escrita no standby serão rejeitadas, pois ele opera em modo somente leitura.

Tags: postgresql CentOS Streaming Replication pg_basebackup WAL

Publicado em 7-22 19:50