Replicação entre servidores > Implantação das bases replicadas
Reimplantar uma base MASTER (a partir do único SLAVE)
RTREPLICATOR.RQ-009
Descrição
Cenário
Em uma rede de replicação ocorreu um problema com o servidor MASTER que deverá ser reinstalado a partir dos dados obtidos no único servidor SLAVE.
Fluxo normal
Para proceder com a reimplantação do MASTER, executar os passos abaixo.
- Garantir que o ELIGO tanto do servidor MASTER como do SLAVE estejam parados. O único acesso a eles será feito diretamente através do banco de dados.
No SLAVE
- Executar um backup sem incluir as tabelas de LOGs, nem DML_LOGS.
- Alterar todos os dml-logs da fila A para a fila F
update dml_logs set queue='F' where queue='A';
- Zerar o ponteiro do próximo DML_LOG a ser baixado do novo MASTER:
update dml_logs_cfg set last_id_retrieved=0;
No novo MASTER
- Criar o banco do novo MASTER
psql -h 127.0.0.1 -U postgres
create database [base] encoding 'utf-8' template template0;
\q
- Executar o restore da base de dados
pg_restore -h 127.0.0.1 -U postgres -v -d [base] [arquivo.backup]
- Ajustar a configuração para indicar que ele é um MASTER (considerando que seu nome é "M"):
update dml_logs_cfg
set server_url=null, secret_key=null, last_id_retrieved=0
, node_id=(select id from replication_nodes where global_name='M')
, logging_level=1, start='S', file_sync_interval=null, last_file_sync_master_time=null
, last_file_sync_local_time=null
, file_sync_ignored_roots='/tlu';
- Ajustar as sequences do MASTER:
update sequences
set next_value = 1 + case when max_value>next_range_max_value then max_value else next_range_max_value end
, max_value = 0
, next_range_min_value=0
, next_range_max_value=0
where range_size > 0;
- Excluir o JOB de atualização total dos arquivos
update jobs set ativo='N';
- Revisar todos os demais jobs para identificar quais devem ser executados no MASTER.
- Criar as tabelas de DML_LOGS e LOGS. O ideal é que isso seja feito ANTES do serviço ser reniciado, a partir do DDL capturado no SLAVE.
- Voltar a sequence SEQ_DML_LOGS para 1.
drop sequence SEQ_DML_LOGS;
create sequence SEQ_DML_LOGS;
Finalizando
Uma vez que a base de dados estiver OK, os serviços do ELIGO deverão ser reiniciados e os mesmos testes de replicação sugeridos para uma nova instalação deverão ser executados.