Replicação entre servidores
Como instalar uma base SLAVE usando um backup do MASTER?
RTREPLICATOR.FAQ-18271
É possível fazer uma base SLAVE utilizando um arquivo de backup do master (que não inclui as tabelas de logs e nem dml_logs). Para tal, o backup existente já deve possuir o NODE do slave previamente cadastrado. Para tal, deve-se proceder da seguinte forma:
- Bloquear qualquer acesso ao sistema (parando a aplicação pelo manager ou mesmo parando o tomcat).
- Preparar a fila F para o slave:
update dml_logs_cfg
set last_id_retrieved = (select id
from dml_logs
where queue='F'
order by id desc
limit 1);
Atenção
Caso o backup já esteja criado, será necessário ajustar o valor do LAST_ID_RETRIEVED diretamente no slave, descobrindo o ultimo ID da fila 'F' que estava no momento em que o backup foi executado, executando um SQL tipo:
select max(id)
from dml_logs
where date between '2017-10-03 02:50' and '2017-10-03 03:00'
- Obter um backup do master e baixar no slave:
pg_dump --host 127.0.0.1 --username postgres --format custom --blobs --exclude-table logs --exclude-table dml_logs --file "eligo.backup" eligo
- Criar o database no slave:
psql -h 127.0.0.1 -U postgres
create database eligo encoding 'UTF8' template = template0;
\q
pg_restore -h 127.0.0.1 -U postgres -v -d eligo eligo.backup
- Acessar o SLAVE por psql e:
CREATE TABLE dml_logs
(
id bigint NOT NULL,
date timestamp without time zone NOT NULL,
origin text NOT NULL,
dml text NOT NULL,
dml_parameters text,
queue character varying(1),
original_id bigint NOT NULL,
original_date timestamp without time zone NOT NULL,
error_message text,
origin_table_name character varying(80),
origin_record_id bigint,
CONSTRAINT regra_pk_505355 PRIMARY KEY (id )
);
CREATE INDEX ak_dmllog_data
ON dml_logs
USING btree
(date );
CREATE INDEX ak_dmllog_id
ON dml_logs
USING btree
(original_id );
CREATE INDEX ak_dmllog_origin_record_id
ON dml_logs
USING btree
(origin_record_id );
CREATE INDEX ak_dmllog_original_date
ON dml_logs
USING btree
(original_date );
CREATE INDEX ak_dmllog_queue
ON dml_logs
USING btree
(queue COLLATE pg_catalog."default" );
CREATE INDEX ak_dmllog_queue_id
ON dml_logs
USING btree
(queue COLLATE pg_catalog."default" , id );
CREATE TABLE logs
(
id bigint NOT NULL,
data_hora timestamp without time zone NOT NULL,
endereco_remoto character varying(160),
usuario character varying(40),
usuario_id bigint,
descricao text,
tipo character varying(30),
origem character varying(160),
registro character varying(160),
sessao_id character varying(40),
tempo integer,
CONSTRAINT pk_logs PRIMARY KEY (id )
);
CREATE INDEX ak_logs_data
ON logs
USING btree
(data_hora );
CREATE INDEX ak_logs_journaling
ON logs
USING btree
(origem COLLATE pg_catalog."default" , registro COLLATE pg_catalog."default" , tipo COLLATE pg_catalog."default" );
CREATE INDEX ak_logs_registro
ON logs
USING btree
(registro COLLATE pg_catalog."default" );
CREATE INDEX ak_logs_sessao
ON logs
USING btree
(sessao_id COLLATE pg_catalog."default" );
CREATE INDEX ak_logs_tipo
ON logs
USING btree
(tipo COLLATE pg_catalog."default" );
CREATE INDEX ak_logs_usuario
ON logs
USING btree
(usuario COLLATE pg_catalog."default" );
- Alterar, os dados da tabela DML_LOGS_CFG, informando o node.
update dml_logs_cfg set node_id=(select id from replication_nodes where global_name='M.2');
- Limpar os valores de cache das sequencias
update sequences
set next_value=2
, max_value=1
, range_size = range_size
, next_range_min_value=0
, next_range_max_value=0
where range_size is not null;
update jobs set ativo = 'N';
Depois destes passos, siga os passos normais de implantação do servidor:
- Configurar a aplicação (config.cfg)
- Garantir o parâmetro de configuração CONFIG.DB.DEFAULT.SEQUENCE_MANAGER=br.com.telescope.sequence.TableSequenceManager
- Fazer o deploy normalmente.
- Rodar UtlDbSchema
- Revisar as sequencias
- Revisar Jobs
- Reiniciar o tomcat.
- Testar
Atenção
Sugere-se que o deploy deve utilizar a versão de Eligo do servidor que tiver a mais recente da rede, OU que a rede seja atualizada para a versão de produção mais recente antes da instalação.