Eu quero configurar a replicação de streaming no Slave.
No servidor principal (servidor A. Ubuntu 18.04; Postgres 12) :
sudo nano /etc/postgresql/12/main/postgresql.conf
- Definir
listen_addresses = '*'
- As configurações do postgresql.conf são:
wal_level = "logical"
archive_mode = "ON"
archive_timeout = 3600
checkpoint_timeout = 600
hot_standby = "ON"
max_connections = 700
max_wal_sender = 5
max_wal_size = 16GB
min_wal_size = 2GB
max_worker_processes = 30
synchronous_commit = "OFF"
wal_log_hints = "OFF"
wal_recycle = "ON"
wal_keep_segments = 4000
wal_sync_method = "fdatasync"
Este Servidor Principal já hospedou replicação lógica para outro servidor (Servidor B. Ubuntu 18.04; Postgres 12)
No servidor escravo (servidor C. Ubuntu 22.04; Postgres 12) :
- alterar o diretório de dados
- configure isso como escravo para replicação de streaming do servidor A.
Aqui está o detalhe: Depois de instalar o postgres (instalação nova), eu me certifico de que ele está em execução e altero o diretório de dados:
sudo -u postgres psql
SHOW data_directory;
. --Saída /var/lib/postgresql/12/main- Saia do psql:
\q
sudo systemctl stop postgresql
sudo systemctl status postgresql
sudo rsync -av /var/lib/postgresql /data/postgresql2
- renomeie a pasta:
sudo mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.bak
- Edite o postgresql.conf:
sudo nano /etc/postgresql/12/main/postgresql.conf
- Definir para o novo local:
data_directory = '/data/postgresql2/postgresql/12/main'
- Inicie o banco de dados novamente:
sudo systemctl start postgresql
O resultado é bom. O Postgres está rodando bem no Servidor C. Quando eu faço SHOW data_directory;
isso dá: /data/postgresql2/postgresql/12/main
Em seguida, configuro a replicação de streaming no servidor C:
pare o serviço no escravo:
systemctl stop [email protected]
su - postgres
entãocp -R /data/postgresql2/postgresql/12/main /data/postgresql2/postgresql/12/data_original
Remova o diretório antigo:
rm -rf /data/postgresql2/postgresql/12/main/*
Em seguida, faça o backup básico:
pg_basebackup -h 10.100.9.40 -p 5432 -U rep_user -D /data/postgresql2/postgresql/12/main -Fp -Xs -R -P -v
Reiniciar :
systemctl start [email protected]
-- dá erro:
*`Job for [email protected] failed because the service did not take the steps required by its unit configuration.
See "systemctl status [email protected]" and "journalctl -xeu [email protected]" for details`*
- Então eu começo a usar outra maneira:
sudo -i -u postgres
/usr/lib/postgresql/12/bin/pg_ctl start -D /data/postgresql2/postgresql/12/main
Dá erro:
waiting for server to start....postgres: could not access the server configuration file "/data/postgresql2/postgresql/12/main/postgresql.conf": No such file or directory
Por favor ajude. O que pode causar isso?
Você esqueceu de configurar a replicação no modo de espera. No mínimo, você precisa definir
restore_command
epostgresql.conf
criar arquivosstandby.signal
.Toda a dança com renomeação de diretórios e execução
rsync
é desnecessária, tudo o que é necessário épg_basebackup
.