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