ferramenta para replicação de dados no sgbd postgresql

Propaganda
FERRAMENTA PARA
REPLICAÇÃO DE DADOS
NO SGBD POSTGRESQL
Malcus Otávio Quinoto Imhof
Alexander Roberto Valdameri - Orientador
Roteiro da apresentação
Introdução
Objetivos
Motivação
Revisão bibliográfica
Especificação
Implementação
Operacionalidade
Conclusão
Introdução
Replicação de dados
SGBD PostgreSQL
Replicadores de dados atuais
Objetivos
Implementar uma ferramenta de replicação de
dados para o SGBD PostgreSQL;
Caracterizar uma replicação assíncrona;
Manter consistência entre as instâncias do
SGBD PostgreSQL;
Resolver conflitos na replicação de dados.
Motivação
As ferramentas atuais para replicação de dados
que atuam sobre o SGBD PostgreSQL
basicamente operaram exclusivamente sobre o
sistema operacional Linux ou Unix, além de
terem como ponto forte a replicação síncrona
dos dados.
Revisão bibliográfica
Sistemas Distribuídos
Date (1991, p. 617), sistema distribuído é “qualquer
sistema que envolve múltiplas localidades conectadas
[...], nas quais o usuário [...] de qualquer localidade pode
acessar os dados armazenados em outro local;
Define-se como uma rede de computadores que possui
vários componentes se comunicando através da
coordenação de mensagens (COULOURIS;
DOLLIMORE; KINDBERG, 2001, p. 553)
Revisão bibliográfica
Banco de Dados
Um banco de dados é uma coleção integrada de
dados onde o mesmo envolve os próprios
dados, o hardware em que os dados residem, o
software que controla o armazenamento e os
usuários (DEITEL; DEITEL, p. 812, 2001).
Revisão bibliográfica
Replicação de Dados
Utilizada para obter maior uma maior
disponibilidade dos serviços;
Gera um aumento de desempenho quando são
necessários a obtenção de dados de locais
geográficos distintos;
Replicação Assíncrona;
Replicação Síncrona;
Revisão bibliográfica
Java RMI
Permite a comunicação entre objetos remotos;
É a implementação do RPC para a linguagem
Java;
Maior transparência para o desenvolvedor;
Trabalhos Correlatos
ERServer
É um replicador master to multiple slavers, baseado em
trigger.
Este replicador de dados foi descontinuado pelos
desenvolvedores para o desenvolvimento do Slony;
Capacidade de efetuar a replicação de dados em tempo
real;
Replicação apenas read only nas base de dados slaves, ou
seja, inserções, alterações e exclusões somente
poderiam ser efetuadas na base de dados master.
Trabalhos Correlatos
Slony
Surgiu a partir da idéia de existir um replicador
de dados que não fosse específico para nenhuma
versão do SGBD PostgreSQL;
master to multiple slavers;
não é indicado quando a ocorrência de quedas
dos nodos seja freqüente;
a não detecção na falha de um nodo e também a
não eleição de um nodo master são algumas de
suas características
Trabalhos Correlatos
Postgres-R
O Postgres-R, um replicador síncrono, é tido
como um modelo de replicador de base de
dados, no qual foi baseado no SGBD
PostgreSQL 6.4.2;
Considerado a mais avançada solução open source
existente;
O uso deste replicador é aconselhado para redes
locais;
Cópias shadow;
Requisitos principais do problema a
ser trabalhado
replicar os dados após restabelecer a conexão quando
da ocorrência de alguma falha (RF);
permitir a configuração de parâmetros de uma
replicação (como tempo e tabelas) (RF);
resolver conflitos na replicação de dados utilizando o
conceitos de versão para linhas e prioridade do site
(RF);
implementar o projeto utilizando a linguagem de
programação Java (RNF);
possibilitar a replicação assíncrona entre diversos
sistemas operacionais (RNF).
Especificação
Casos de Uso
ud Replicador
UC01 - configurar
arquiv o
parâmetros
Usuário
UC02 - replica
dados
Especificação
Diagrama de Atividades
ad U C 01 - configurar arquivo parâm etros
Informar o nome do
schema de
armazenamento
Informar o periodo de
tempo entre as
replicações
Informar o nome do nodo
Definir a lista de nodos
destinos
Definir a conexão com o
banco de dados
Informar a prioridade do
nodo
inicio
[Qual o tipo de replicação?]
Definir o tipo replicação
(tables ou schemas)
[schemas]
[tables]
Definir os schemas a
serem replicados
Definiar as tabelas a
serem replicadas
final
Especificação
ad UC05 - replicar as informações
Nodo de Origem
Nodo de Destino
i nicio
Para todos os nodos a
serem replicados
fi nal
Carrega próximo obj eto
remoto
[Não]
[Sim]
[Obteve sucesso?]
[Existem mais nodos?]
[Sim]
Carrega tabelas a serem
replicadas
Selecionar uma tabela
Carrega v ersão do dado
[Não]
[Acabou?]
Versão do dado recebi do mai or que o armazenado?
Enquanto houv er
registros a serem
replicados
[Sim]
[Não]
[Si m]
Selecionar registro
Versão do dado recebido é menor que o armazenado?
Armazena dado
[Não]
[Acabou
regi stros?]
[Não]
Env iar registro
[Sim]
Marca registro como
env iado
[Não]
O nodo de ori gem tem mai or prioridade?
Especificação
Diagrama de Classes
cd src
replicador.rmi
RemindTask
Remote
+ ReplicadorClient
UnicastRemoteObject
«interface»
+ ReplicadorImpl
replicador.rmi::ReplicadorImpl
replicador.rmi::Replicador
+ ReplicadorServer
+
+ Replicador
recebeRegistro(String, HashMap, String) : boolean
+
+
ReplicadorImpl()
recebeRegistro(String, HashMap, String) : boolean
replicador.rmi::
ReplicadorServ er
+
+
replicador.rmi::ReplicadorClient
ReplicadorServer()
main(String[ ]) : void
~
~
~
~
~
timer: Timer
arquivo: Configuracao
cluster: Cluster
nodos: ArrayList = null
objRemoto: HashMap
+
+
-
main(String[ ]) : void
ReplicadorClient()
carregaObjetosRemotos(Configuracao, ArrayList, Cluster) : HashMap
replicaDados(Configuracao, ArrayList, Cluster, HashMap) : void
replicador.cluster
+ Cluster
+ ConexaoBanco
replicador.cluster::Cluster
+ Configuracao
+ dropdbr
+ initdbr
replicador.cluster::Configuracao
replicador.cluster::ConexaoBanco
-
schema_store: String
replication_type: String
tables: ArrayList = new ArrayList()
schemas: ArrayList = new ArrayList()
replication_time: int
node_code: String
priority: int
row_version: int
dbdatabase: String
dbuser: String
dbpassword: String
addresses: ArrayList = new ArrayList()
-
conn: Connection = null
+
+
+
+
+
+
ConexaoBanco()
conecta(Configuracao) : boolean
getConn() : Connection
iniciaTransacao() : void
finalizaTransacao(String) : void
desconecta() : void
+
+
Configuracao()
carregaArquivo() : void
replicador.cluster::
dropdbr
+
+
dropdbr()
main(String[]) : void
replicador.cluster::
initdbr
+
+
initdbr()
main(String[]) : void
~
~
~
i: int
table: String
schema: String
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Cluster()
nextTable(ArrayList) : boolean
nextSchema(ArrayList) : boolean
existeSchema(String, ConexaoBanco) : boolean
criaSchema(String, ConexaoBanco) : void
excluiSchema(String, ConexaoBanco) : void
existeTabelas(ArrayList, ConexaoBanco) : boolean
existeCamposControle(ArrayList, ConexaoBanco) : boolean
criaCamposControle(Configuracao, ConexaoBanco) : void
carregaTabelasSchema(Configuracao, ConexaoBanco) : void
criaTabelasReplicacao(Configuracao, ConexaoBanco) : void
excluiCamposControle(Configuracao, ConexaoBanco) : void
getTables(Configuracao, ConexaoBanco) : ArrayList
criaFuncaoNodo(Configuracao, ConexaoBanco) : void
criaTriggerControle(Configuracao, ConexaoBanco) : void
excluiTriggerControle(Configuracao, ConexaoBanco) : void
getNodos(Configuracao) : ArrayList
getIpNodo(Configuracao, String) : String
getPrioridadeNodo(Configuracao, String) : int
getTabelasParaReplicar(Configuracao) : ArrayList
getCamposTabela(Configuracao, String) : ArrayList
transmiteDados(Configuracao, String, Replicador, String) : void
armazenaReplicacao(String, HashMap, String) : boolean
getPrimaryKey(Configuracao, String) : ArrayList
getTabelasOrigem(Configuracao, String) : String
Implementação
Na implementação foi utilizado o NetBeans da
SUN Microsystems na sua versão 5.5;
Primeira etapa do desenvolvimento: leitura do
arquivo de configuração;
Cuidado para não prender a aplicação a um
sistema operacional;
Implementação
# set up the name of stored replicated tables and
sequences
schema_store = replicated
# set the delay between the synchronization between
the replicas (in seconds)
replication_time = 60
# set my global node name. Max 50 characters
node_code = node_a
#set the priority of this node
priority = 1
# database connections
# JDBC default
dbdatabase=jdbc:postgresql://localhost:5432/tcc
dbuser=postgres
dbpassword=master
# enter the priority number, node_code, IP ddress
[nodes]
1,node_b,10.1.1.8
# choose the type of replication (tables or
schemas)
replication_type = tables
#tables to be replicated (respecting
replication_type option)
[tables]
ve006
ge002
#public.b
#anotherschema.anothertable
#schemas to be replicated (respecting
replication_type option)
[schemas]
public
Implementação
Necessidade da utilização de tabelas de sistema
do PostgreSQL;
Dificuldade de obter documentação sobre essas
tabelas;
Estrutura complexa;
Implementação
Campos de controle;
Detecção e resolução de conflitos;
Detecção da necessidade do registro ser
replicado;
Propriedade do registro;
Implementação
Gatilhos;
Responsáveis pelo controle dos registros que
devem ou não ser replicados;
Responsáveis pela alimentação das tabelas de
armazenamento;
Implementação
a.
b.
c.
d.
Tabelas de armazenamento;
Estrutura original da tabela e adicionados os
seguintes campos:
chave primária seqüencial;
hora de inserção do registro;
nodos destinos todos atualizados;
operação realizada (inserção, atualização ou
exclusão).
Tabela de controle de nodos atualizados;
Implementação
Aplicativos de comunicação;
Java RMI;
Aplicativo Servidor;
Aplicativo Cliente;
Operacionalidade
Sincronia dos dados ocorrida sem nenhum
conflito e nenhuma falha de comunicação entre
os nodos;
Sincronia dos dados após a ocorrência de
alguma falha de comunicação;
Existência de conflito entre os dados a serem
replicados;
Conclusão
Conclusão
Requisitos estabelecidos foram contemplados;
Replicação assíncrona e consistência das
informações;
Comunicação confiável não necessário para o
funcionamento da ferramenta;
Características apresentadas neste trabalho que
não estão inseridas em outras ferramentas;
Conclusão
a.
b.
c.
d.
Extensões:
Implementação para outros SGBDs;
Possibilitar a replicação de tabelas sem chave
primária;
Outras técnicas de resolução de conflitos;
Implementar a replicação síncrona.
Relevância pessoal
Aprendizado sobre distintas técnicas de
replicação de dados e suas aplicações;
Conhecimento gerado do SGBD e seus
recursos;
Conhecimento sobre Java RMI;
Java.
Download