Files
projeto-importado/docs/reativar_replicacao.md
2025-11-28 00:29:42 -03:00

6.4 KiB

Reativação da replicação de banco de dados (Exemplo 01611_pinhais)

Servidor SLAVE

  • Acesse o servidor SLAVE e pare o banco de dados.
$ su - postgres

$ ssh -p 61100 [email protected]

$ su - root

# systemctl stop postgresql-11.service

# exit

MUITA ATENÇÃO, tenha certeza que você está executando estes comandos no servidor SLAVE!

  • Apague as pastas da base atual e faça o backup dos configs:

    • Limpar tablespaces:
    $ cd /var/lib/pgsql/11/tablespaces  
    
    $ rm -rf arquivo*  
    
    $ rm -rf expurgo*  
    
    $ rm -rf indice/*  
    
    • Limpar pasta bkp:
    $ cd /var/lib/pgsql/11/data
    
    $ rm -rf bkp*  
    
    • Fazer backup dos arquivos e limpar pasta data:
    $ mkdir bkp
    
    $ mv postgresql.conf recovery.conf pg_hba.conf bkp/  
    
    $ rm -rf *.tgz 
    
    $ rm -rf base current_logfiles global pg_commit_ts pg_dynshmem pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase PG_VERSION pg_xact postgresql.* postmaster.* tablespace_map.*  
    
    $ rm -rf log/*  
    
    $ rm -rf archive/*  
    
    $ mkdir bkp/pg_wal  
    
    $ mv pg_wal/* bkp/pg_wal/
    

Servidor MASTER:

Caso a replicação a partir do MASTER não esteja funcionando, e exista algum problema, como sem espaço em disco na partição, ou algum arquivo corrompido, executar os passos abaixo:
(ENTENDER A SITUAÇÃO)

  • Conectar via SSH no servidor MASTER e alterar as configurações:

    • Alterar a configuração do postgres.conf para semreplicacao:
    # cp /var/lib/pgsql/11/data/postgresql.semreplicacao /var/lib/pgsql/11/data/postgres.conf  
    
    • Reiniciar o serviço do postgres:
    # systemctl restart postgresql-11.service
    
    • Alterar novamente a configuração do postgres para comreplicacao:
    # cp /var/lib/pgsql/11/data/postgresql.comreplicacao /var/lib/pgsql/11/data/postgres.conf
    
    • Reiniciar novamente o serviço do postgres:
    # systemctl restart postgresql-11.service
    

Caso a replicação esteja corrompida, não utilizar os comandos acima, continuar a partir dos passos abaixo:

  • Iniciar o modo Backup do Banco de dados:
    • Conectar via ipmadminbd e executar o seguinte comando SQL:
    SELECT pg_start_backup('rep01611',true);
    

Compactar e copiar os arquivos da base do Banco Master para o Banco Slave

  • Você pode abrir vários terminais ssh no servidor MASTER para executar cada comando TAR, ou seja, irá transferir em simultâneo cada pasta para o servidor slave:

    • Execute os comandos paara fazer as cópias:
    # su - postgres
    
    • Acesse a pasta "tablespaces" e compacte os arquivos:
    $ cd /var/lib/pgsql/11/tablespaces/
    
    $ tar -zcvf - arquivo/ |ssh -p 61100 [email protected] "cat > /var/lib/pgsql/11/tablespaces/arquivo.tgz" 
    
    $ tar -zcvf - expurgo/ |ssh -p 61100 [email protected] "cat > /var/lib/pgsql/11/tablespaces/expurgo.tgz"
    
    • Acesse a pasta "indice" e compacte os arquivos:
    $ cd /var/lib/pgsql/11/tablespaces/indice/
    
    $ tar -zcvf - * |ssh -p 61100 [email protected] "cat > /var/lib/pgsql/11/tablespaces/indice/indice.tgz" 
    
    • Acesse a pasta "data" e compacte os arquivos:
    $ cd /var/lib/pgsql/11/data/
    
    $ tar -zcvf - backup_label current_logfiles global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase PG_VERSION pg_xact postgresql.auto.conf postgresql.conf postgresql.mig postgresql.org postgresql.prod postmaster.opts tablespace_map |ssh -p 61100 [email protected] "cat > /var/lib/pgsql/11/data/all.tgz"
    
    $ tar -zcvf - base/ |ssh -p 61100 [email protected] "cat > /var/lib/pgsql/11/data/base.tgz"
    

Servidor SLAVE

  • Descompactar os arquivos tranferidos, você também pode abrir vários terminais SSH para cada comando TAR, descompactando vários arquivos ao mesmo tempo.

    • Descompactar arquivos da "tablespaces":
    $ ssh [email protected] -p 61100
    
    $ cd /var/lib/pgsql/11/tablespaces/
    
    $ tar -xzvf arquivo.tgz
    
    $ tar -xzvf expurgo.tgz
    
    • Descompactar arquivos do "indice":
    $ cd /var/lib/pgsql/11/tablespaces/indice/
    
    $ tar -xzvf indice.tgz
    
    • Descompactar arquivos da "data":
    $ cd /var/lib/pgsql/11/data/
    
    $ tar -xzvf all.tgz
    
    $ tar -xzvf base.tgz
    
  • Ajustar PG_HBA e PostgreSQL.conf

$ cd bkp/

$ cp postgresql.conf recovery.conf pg_hba.conf ../
  • Subir o banco no servidor SLAVE:
$ su - root

# systemctl start postgresql-11.service
  • O comando de "start" ficará aguardando a importação de todos os arquivos wal no servidor SLAVE, onde através de outro terminal ssh pode ser acompanhado através dos logs:
# tail -f /var/lib/pgsql/11/data/log/postgresql-2019-09-23_101612.log
  • Quando aparecer a seguinte nomenclatura nos logs do SGBD Slave bzip2: Can't open input file /var/lib/pgsql/11/data/archive/0000000100000C43000000A4: No such file or directory é porque a replicação já esta operando e aguardando um arquivo WAL do servidor Master. Após isso execute o comando do próximo passo para completar o Start do SGBD.

  • Ao concluir a cópia, conectar via ipmadminbd no SERVIDOR MASTER e executar o SQL abaixo: (*executar somente após o banco slave estar ativo e recebendo os arquivos):

SELECT pg_stop_backup();
  • Após o banco estar consistente e recebendo novos arquivos da replicação, deve-se apagar os backups utilizados para transferir a base.

    [ : 31755] 2019-12-06 11:37:41 -03    LOG:  consistent recovery state reached at F/D3FC1238
    [ : 31753] 2019-12-06 11:37:41 -03    LOG:  database system is ready to accept read only connections
    [ : 31755] 2019-12-06 11:37:41 -03    LOG:  restored log file "000000010000000F000000D4" from archive
    
    • Executar os comandos para apagar os backups:
    # rm -rf /var/lib/pgsql/11/data/all.tgz
    
    # rm -rf /var/lib/pgsql/11/data/base.tgz
    
    # rm -rf /var/lib/pgsql/11/tablespaces/arquivo.tgz
    
    # rm -rf /var/lib/pgsql/11/tablespaces/expurgo.tgz
    
    # rm -rf /var/lib/pgsql/11/tablespaces/indice/indice.tgz
    
  • Acompanhamento de Logs

  • O alerta "Too Many WAL Files" pode existir na segunda-feira pela manhã já que no final de semana a rotina de VACUUM gera uma grande movimentação no banco.