Replicação entre servidores
Implantação das bases replicadas
RTREPLICATOR.RQ-002
Descrição
Para iniciar uma base de dados replicada, teremos que executar as seguintes atividades.
Fluxo normal
Implantando o servidor Master
- Considerando que a aplicação foi desenvolvida com suporte à replicação, basta fazer o deploy normalmente (Desenvolvimento de sistema com suporte a replicação).
- Configurar a rede de replicação (CadReplicationNodes). Cadastrar o node master e todos os nodes filhos apontando cada um para seu respectivo servidor (lembre de informar o app, p.ex: http://127.0.0.1:8080/TESTE/app/)
- Criar a sequence SEQ_DML_LOGS iniciando com o valor encontrado em
select max(id+1) from dml_logs;
CREATE SEQUENCE SEQ_DML_LOGS;
- Garantir o parâmetro de configuração CONFIG.DB.DEFAULT.SEQUENCE_MANAGER=br.com.telescope.sequence.TableSequenceManager (p.ex, adicionar no CfgConfig).
- Configurar o serviço de replicação (CfgReplication). Apontar para o node local (master). Deixar
- A preferencia LOG_DML deve ter o valor "S".
- Caso necessário, liberar o acesso a pasta "apps" (p.ex, chmod -R 777 apps).
- Garantir que a preferencia SEQUENCE.UTL_SEQUENCE_RANGE.PASSWORD_HASH esteja inicializada. Caso não esteja, basta chamar uma vez a URL UtlSequenceRange?P_SEQUENCE=TESTE&P_RANGE=0. (Deve dar um erro de Access Denied)
- Configurar sequencias que serão replicadas (CadSequences). No master, zerar o max-value, next-range-min-value e next-range-max-value de todas as sequencias, e informar um range size para todas as sequences. Para o range-size, sugere-se informar um valor estimado para o número de sequencias consumidas em 1 semana por toda a rede.
- Reiniciar o tomcat
Observações
Para consultar as sequences de banco do Postgres, executar:
select relname from pg_class where relkind = 'S';
Para consultar os valores atuais de uma determinada sequence, basta fazer, por exemplo:
select * from pk_sequence;
Implantando um servidor slave
- Verificar e possivelmente limpar a tabela DML_LOGS. A implantação de um slave inclui a tabela DML_LOGS e por isso é conveniente que ela seja reduzida antes de tudo. Caso todos os slaves atuais estejam atualizados, pode-se truncar esta tabela.
truncate dml_logs;
ou
delete from dml_logs where date < 'yyyy-mm-dd';
- Obter um backup do servidor master (ou do servidor ao qual este será conectado). Note que este backup não precisa da tabela LOGs mas precisa da tabela DML_LOGS. Este backup deve ser realizado sem que exista alteração de dados no servidor pois isso poderia ocasionar inconsistencias na base replicada.
pg_dump -h 127.0.0.1 -U postgres --exclude-table=logs -F c -Z 9 -f file.backup user
- Obter um backup de todos os arquivos baixados na área de arquivos anexados (ex: /usr/share/tomcat6/apps/ELIGO/files)
- Baixar o backup no servidor local. Se for o caso, criar o database. Exemplo:
psql -h 127.0.0.1 -U postgres
create database nomecliente encoding 'UTF8' template = template0;
\q
pg_restore -h 127.0.0.1 -U postgres -v -d nomecliente file.backup
- Considerando que a aplicação foi desenvolvida com suporte à replicação, basta fazer o deploy normalmente.
- Garantir o parâmetro de configuração CONFIG.DB.DEFAULT.SEQUENCE_MANAGER=br.com.telescope.sequence.TableSequenceManager (p.ex, adicionar no CfgConfig).
- Rodar UtlDbSchema para criar a entidade LOGS que não foi incluida no backup.
- Se ocorrer um erro de que não consegue consumir uma sequencia de SEQ_DML_LOGS, acessar o cadastro de sequencias e excluir este registro de lá.
- Executar CfgReplication, excluir a configuração, preencher os dados requisitados no formulário e salvar. Esta operação é necessária porque a configuração corrente - capturada do backup - corresponde a configuração do master.
- Para bases de backup, sugere-se aumentar o intervalo de espera para valores mais altos. Ex: 120000 (2 minutos). Em servidores que estão fazendo backup de várias bases, sugere-se incluir tempos diferentes para evitar deles coincidirem no mesmo horário.
- Conferir os ranges das sequences que deverão ser replicadas.
- Sequencias do Eligo (ver base exemplo XXX)
- Reiniciar o tomcat.
O tempo necessário para implantar uma base replicada depende muito do tempo necessário para fazer o backup e restore das bases de dados. Para uma base pequena, um tempo de 1 hora deve ser o suficiente.
Testes
Após reiniciar o Tomcat, fazer os seguintes testes:
- Verificar as sequencias - espera-se que os valores de "Next range" sejam preenchidos.
- Cadastrar preferência 00 no master
- Verificar no slave
- Excluir no slave
- Verificar no master
- Verificar consumo das sequences.
Monitoramento
Após tudo pronto, é importante ir no monitoramento e:
- Identificar o monitoramento realizado pelas aplicações replicadas. Novas instancias aparecem como "Ambiente: Não definido".
- Ajustar as descrições das instancias. Ex: CLIENTE - Master e CLIENTE - Backup
- Verificar se existe informação da porta de acesso - testar acesso de suporte às bases.
- Atualizar tipo de atualização (Produção ou Homologação)
Checklist
Para ocorrências, usar o checklist abaixo:
- Conferir replicação do MASTER
- Backup do master
- Subir BD SLAVE
- Fazer deploy do SLAVE
- Configurar sequence manager
- Rodar utl-db-schema
- cfg-replication
- Conferir ranges sequence
- Reiniciar Tomcat
- Testar
- Atualizar monitoramento
Ver também:
Procedimentos