Configurar o Servidor Primário para Replicação
Nesta primeira etapa, você configurará o servidor PostgreSQL primário para prepará-lo para replicação. Isso envolve modificar seus arquivos de configuração para permitir conexões de rede, habilitar o nível necessário de Write-Ahead Log (WAL) e criar um usuário especial para replicação.
1. Modificar o Arquivo de Configuração do PostgreSQL
Para se preparar para a replicação, você precisa modificar o arquivo de configuração principal, postgresql.conf. Editar este arquivo grande manualmente com um editor de texto como nano pode ser desafiador e propenso a erros devido ao grande número de opções. Um método mais eficiente e confiável é usar ferramentas de linha de comando para visualizar e atualizar as configurações específicas que você precisa alterar. Isso evita ter que percorrer centenas de linhas e previne erros acidentais.
Primeiro, vamos verificar os valores atuais das configurações que precisamos modificar: listen_addresses, wal_level e max_wal_senders.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
echo "--- Current Settings ---"
sudo grep -E "^#?\s*(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
Você provavelmente verá essas linhas comentadas com um #.
Agora, vamos atualizar essas configurações automaticamente. Os comandos a seguir farão backup do arquivo de configuração e, em seguida, atualizarão cada parâmetro necessário.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
## Create a backup before making changes
sudo cp $CONF_FILE ${CONF_FILE}.bak.$(date +%s)
## Set listen_addresses to allow connections from any IP address
sudo sed -i -E "s/^[#\s]*listen_addresses\s*=.*/listen_addresses = '*'/" "$CONF_FILE"
## Set wal_level to 'replica' to enable replication logs
sudo sed -i -E "s/^[#\s]*wal_level\s*=.*/wal_level = replica/" "$CONF_FILE"
## Set the maximum number of concurrent replication connections
sudo sed -i -E "s/^[#\s]*max_wal_senders\s*=.*/max_wal_senders = 10/" "$CONF_FILE"
Finalmente, vamos verificar se as alterações foram aplicadas corretamente. O comando abaixo exibirá os novos valores, filtrando quaisquer linhas comentadas.
echo "--- Verified Settings ---"
sudo grep -E "^(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
A saída deve mostrar a configuração atualizada e ativa:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
Com essas configurações confirmadas, o servidor está devidamente configurado para as próximas etapas.
2. Criar um Usuário Dedicado para Replicação
É uma boa prática usar um usuário dedicado para replicação em vez de um superusuário. Vamos criar uma role chamada replicator.
Conecte-se ao PostgreSQL usando o cliente de linha de comando psql:
sudo -u postgres psql
Agora, execute o seguinte comando SQL para criar o usuário com privilégios de replicação e uma senha:
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicapass';
Você deverá ver a saída CREATE ROLE. Agora, saia do cliente psql:
\q
3. Permitir a Conexão de Replicação
Em seguida, você precisará configurar o servidor para permitir que o usuário replicator se conecte do servidor réplica. Você fará isso editando o arquivo pg_hba.conf.
Abra o arquivo com nano:
sudo nano /etc/postgresql/14/main/pg_hba.conf
Adicione a seguinte linha ao final do arquivo. Esta regra especifica que o usuário replicator tem permissão para se conectar ao pseudo-banco de dados replication de qualquer endereço IP (0.0.0.0/0). Para este laboratório, usamos 127.0.0.1/32 já que ambos os servidores estão na mesma máquina.
host replication replicator 127.0.0.1/32 md5
Pressione Ctrl+X, Y e Enter para salvar e sair.
4. Reiniciar o Servidor Primário
Para aplicar todas essas alterações de configuração, você deve reiniciar o serviço PostgreSQL.
sudo service postgresql restart
O servidor primário está agora pronto para aceitar conexões de replicação.