# 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 rep01611@200.233.186.58 $ 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 rep01611@200.233.186.58 "cat > /var/lib/pgsql/11/tablespaces/arquivo.tgz" $ tar -zcvf - expurgo/ |ssh -p 61100 rep01611@200.233.186.58 "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 rep01611@200.233.186.58 "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 rep01611@200.233.186.58 "cat > /var/lib/pgsql/11/data/all.tgz" $ tar -zcvf - base/ |ssh -p 61100 rep01611@200.233.186.58 "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 rep01611@200.233.186.58 -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. - [`VOLTAR`](../README.md)