Documente Academic
Documente Profesional
Documente Cultură
ITABAIANA
2011
de
Concluso
de
Curso
(graduao)
BANCA EXAMINADORA:
____________________________________________________
Prof Andr Vinicius Rodrigues Passos Nascimento, Msc.
Orientador
DSIITA/UFS
_______________________________________________
Prof Methanias Colao Jnior, Dr.
DSIITA/UFS
_______________________________________________
Prof Andrs Igncio Martnez Menndez, Msc.
DSIITA/UFS
Dedico a
1.1.1.1
AGRADECIMENTOS
Agradeo, primeiro, a Deus, porque esteve sempre presente mesmo quando eu estava
ausente..
Ao meu orientador, Prof. Msc. Andr Vinicius R. P. Nascimento, por ter dedicado
parte do seu tempo a me orientar nessa busca por conhecimento, tirando minhas dvidas e
sendo exemplo de dedicao.
Aos meus professores, pelo comprometimento com minha formao acadmica e dos
meus colegas; sendo verdadeiros mestres! E por terem me entusiasmado mais a cada dia,
durante minha formao.
Aos meus colegas de curso, que uniram foras, caminharam juntos e compartilharam
conhecimentos ao longo do curso.
minha namorada Jordana Naftali, pela ateno, apoio, amor e carinho dedicados a
mim. Por ter compreendido e aberto mo do nosso tempo para que pudesse me dedicar a este
trabalho.
minha famlia pelo apoio e cobrana, que foram fundamentais para concluso do
trabalho.
RESUMO
ABSTRACT
Database replication can be understood as a set of techniques used to maintain
consistent copies of the same item of data in different databases. The main objectives that
replication intend to achieve are better performance and availability. The performance
improvement is achieved through the use of local copies, thereby eliminating the need
for remote connections. Increased availability is achieved through the existence of copies of
the same data item. Once a database, for some reason, is unavailable, an information
system can move on to query the data in the replica until the problem is resolved. This
work aims to study the main architectures and update propagation strategies used in database
replication, and
verify
or variations, among
the
some
implementation of
of
the
most
these architectures
widely
Management Systems.
Key-words: Database. Replication. Availability.
used
and
strategies,
Relational
Database
LISTA DE FIGURAS
Figura 1 Arquitetura Primary Copy............................................................................20
Figura 2 Arquitetura Update Everywhere..................................................................21
Figura 3 - Eager Primary Copy.....................................................................................23
Figura 4 - Eager Update Everywhere............................................................................24
Figura 5 - Lazy Primary Copy......................................................................................25
Figura 6 - Lazy Update Everywhere.............................................................................26
Figura 7 Modelo Publicador/Assinante......................................................................28
Figura 8 - Snapshot Replication....................................................................................32
Figura 9 - Transactional Replication.............................................................................34
Figura 10 - Merge Replication......................................................................................35
Figura 11 Modelo de dados de exemplo....................................................................37
Figura 12 Configure Distribution...............................................................................38
Figura 13 Selecionar Distribuidor..............................................................................39
Figura 14 Selecionar pasta de Snapdshot...................................................................40
Figura 15 Selecionar Base de Distribuio................................................................41
Figura 16 Selecionar Publicador................................................................................42
Figura 17 Finalizando configurao do Distribuidor................................................43
Figura 18 Status da configurao do Distribuidor.....................................................44
Figura 19 Nova Publicao........................................................................................45
Figura 20 Selecionando Publicador para nova Publicao........................................46
Figura 21 Selecionando tipo de Publicao...............................................................47
Figura 22 Escolhendo Artigos....................................................................................48
Figura 23 Filtrando Artigos........................................................................................49
Figura 24 Agendamento de Snapshot.........................................................................50
Figura 25 Parmetros para agendamento de Sanpshot...............................................51
Figura 26 Configuraes de segurana do Agente.....................................................52
Figura 27 Parmetros de login do Snapshot Agent....................................................53
Figura 28 Finalizando a configurao da nova Publicao........................................54
Figura 29 Status da configurao da nova Publicao...............................................55
Figura 30 Nova Assinatura.........................................................................................56
Figura 31 Selecionando Publicador para a Assinatura...............................................57
LISTA DE TABELAS
Tabela 1 Matriz Estratgias de Replicao X Arquitetura.........................................22
13
SUMRIO
1
Introduo...............................................................................................................15
1.1
Objetivos.........................................................................................................16
1.2
Relevncia do Trabalho...................................................................................16
1.3
Metodologia....................................................................................................17
1.4
Estrutura do Trabalho......................................................................................17
Esquemas de Replicao.................................................................................20
2.1.1 Arquitetura.................................................................................................20
2.1.2 Estratgias de propagao.........................................................................22
2.1.3 Estratgias de Propagao x Arquitetura...................................................22
3
Modelo de Replicao.....................................................................................27
3.2
Tipos de Replicao........................................................................................30
Estudo de Caso................................................................................................36
Consideraes..................................................................................................67
PostgreSQL.............................................................................................................68
4.1
Pgpool-II..........................................................................................................68
Slony-I.............................................................................................................73
4.3
14
PGCluster........................................................................................................77
Postgres-R.......................................................................................................84
4.5
Consideraes..................................................................................................85
Referncias.............................................................................................................87
15
Introduo
Replicao de Bases de Dados pode ser entendida como um conjunto de tcnicas
utilizadas para manter cpias consistentes de um mesmo item de dado em diferentes bancos
de dados. A utilizao dessas tcnicas possui como principais objetivos a melhoria do
desempenho na execuo de operaes e o aumento da disponibilidade (BERNSTEIN ,1997).
A melhoria do desempenho alcanada atravs da utilizao de cpias locais,
eliminando, dessa forma, a necessidade de conexes remotas. Nesses casos, as operaes de
leitura apresentam um comportamento semelhante s operaes em bases sem replicao. As
operaes de escrita, no entanto, precisam de algum tipo de coordenao entre as diferentes
rplicas para que as informaes permaneam consistentes em todas as bases envolvidas no
processo de replicao. (WIESMANN,2000a).
O aumento da disponibilidade tambm alcanado atravs da existncia de cpias de
um mesmo item de dado. Uma vez que uma base dados, por algum motivo, fica indisponvel,
um sistema de informao pode passar a consultar os dados na rplica at que o problema seja
resolvido. Tudo isso deve ocorrer de forma transparente para o cliente, seja ele um usurio ou
aplicao. (WIESMANN, 2000b).
Existem diferentes classificaes ou parmetros que categorizam os tipos de
replicao existentes (GRAY, 1996) (WIESMANN, 2000b) (BERNSTEIN ,1997). No
entanto, possvel identificar dois critrios comuns para classificar os tipos de replicao: a)
Arquitetura e b) Estratgia de Propagao de Atualizaes.
Esse trabalho, portanto, tem por objetivo estudar as principais arquiteturas e
estratgias de propagao de atualizaes utilizadas no processo de replicao de bases de
dados, e verificar a implementao dessas arquiteturas e estratgias, ou suas variaes, nos
principais Sistemas Gerenciadores de Banco de Dados Relacionais.
2.1 Objetivos
2.1.1
Objetivo Geral
Estudar a disciplina Replicao de Bases de Dados, suas principais arquiteturas e
16
2.1.2
Objetivos especficos
17
Em funo desse cenrio, esse trabalho possui relevncia quando combina a
teoria e prtica sobre a disciplina Replicao de Bases de Dados, facilitando, dessa forma, o
entendimento da rea independente de tecnologia e, ao mesmo tempo, documentando os
passos necessrios para a implantao efetiva de estratgias de replicao em alguns dos
principais Sistemas Gerenciadores de Bancos de Dados Relacionais.
2.3 Metodologia
Inicialmente, ser realizado um levantamento bibliogrfico sobre as principais
arquiteturas e estratgias de propagao de atualizaes para replicao de bases de dados. A
partir desse levantamento, ser escrito um captulo que resume a teoria necessria para o
entendimento das solues existentes. Em seguida, sero estudadas as arquiteturas e
estratgias disponveis nos SGBDs Microsft SQL Server e PostgreSQL. Esse estudo envolve a
investigao de implementaes nativas, assim como a utilizao de componentes de
terceiros. Aps esse estudo, sero criados ambientes e estudos de caso para apresentar, passo a
passo, como implantar a replicao nas tecnologias investigadas. As ferramentas de apoio
necessrias para a realizao do trabalho sero os sistemas gerenciadores de banco de dados
utilizados, Microsoft SQL Server e PostgreSQL, e os componentes de terceiros necessrios.
18
19
3.1.1 Arquitetura
O parmetro arquitetura d origem a dois tipos de replicao: Primary Copy e Update
Everywhere. A diferena entre os dois tipos est na determinao dos servidores que podem
iniciar modificaes no banco de dados (WIESMANN, 2000).
20
Embora simples do ponto de vista de controle de replicao, essa arquitetura
cria
uma grande dependncia com a cpia primria, pois a nica responsvel pelas
atualizaes. Para solucionar esse problema, podem ser criadas mais de uma cpia primria.
Nessa variao de arquitetura, quando ocorre uma falha em uma cpia primria e a mesma
fica indisponvel, existe um protocolo de eleio que elege uma nova cpia que assumir a
responsabilidade das atualizaes.
21
Arquitetura
Esratgias de Propagao
Eager
Lazy
Primary Copy
Primary Copy
Eager
Lazy
Update Everywhere
Update Everywhere
Esta combinao gera 4 esquemas distintos: Eager Primary Copy, Eager Update
Everywhere, Lazy Primary Copy e Lazy Update Everywhere.
A seguir, ser apresentada uma explicao mais detalhada sobre cada esquema.
22
23
Quando a alterao feita neste n, ele replica para os demais ns. Quando um n recebe a
rplica de atualizao, ele verifica se o timestamp do objeto replicado igual ou maior que a
do objeto local. Se assim for, a atualizao segura e assim ela aplicada e a transao
finalizada com xito. Caso o timestamp do objeto replicado seja inferior ao do objeto local, a
atualizao pode ser obsoleta. Ento ela no aplicada e enviada para conciliao, podendo
falhar ou no a replicao. Caso falhe, a transao inteira falha e nenhuma alterao
aplicada.
24
origem transmite a rplica de atualizao para todas as rplicas escravas aps a transao
mestre ser finalizada.. Atualizaes escravas so marcadas com timestamp para garantir que
todas as rplicas iro convergir para o mesmo estado final. Se o timestamp de uma rplica
escrava maior que o timestamp da atualizao, a atualizao obsoleta. Nesse caso a
atualizao ignorada.
25
26
dados, que podem variar de acordo com a verso e edio do produto. Na verso e edio
analisada, 2008 Enterprise, o SQL Server oferece trs tipos de replicao com base na
estratgia assncrona (Lazy Replication): Snapshot, Transactional e Merge (PAUL, 2009).
Este captulo apresenta o modelo de replicao utilizado pelo SGBD SQL Server,
assim como os vrios componentes necessrios para sua implantao. So apresentados,
tambm, os trs tipos de replicao suportados. Ao final, apresentado um estudo de caso
seguido de um passo a passo que mostra como configurar um ambiente de replicao.
Modelo de Replicao
Quando se faz replicao com o SQL Server, o primeiro conceito que se deve entender
Distribuidor
Os Agentes
Assinaturas
1 Lanado em 1989 atravs
de umacontrolam
parceiraasentre
as empresas Microsoft e Sybase, o
SGBD SQL Server divide com seus principais concorrentes, Oracle e DB2, parcelas
significativas do mercado de SGBDs Relacionais (MULLINS, 2011)
Assinante
Figura 7 Modelo Publicador/Assinante
27
28
Assinatura
O servidor de Assinatura deve mapear os Publicadores e os Assinantes e encaminhar
cada Snapshot de um Publicador para seus respectivos Assinantes. O servidor de assinatura
deve mapear os Artigos das novas atualizaes para as tabelas dos Assinantes. No SQL Server
existem dois tipos de Assinatura: Assinatura Annima e Assinatura Nomeada. Na Assinatura
Annima, o Publicador no possui nenhuma informao sobre os Assinantes. Essas
informaes sero passadas ao Distribuidor no momento da replicao. J nas Assinaturas
Nomeadas, as Assinaturas so explcitas no Publicador e podem ser do tipo push ou pull. Nas
Assinaturas Nomeadas do tipo push, apenas o publicador pode fazer alteraes nas
Publicaes. J nas Assinaturas Nomeadas do tipo pull, os Assinantes pode solicitar alteraes
nas Publicaes. Essas Alteraes so enviadas ao Publicador e a todos os Assinantes na
prxima sincronizao.
Agentes
Os Agentes so quem realizam quase todo o trabalho. So responsveis por coletar os
dados e executar as aes necessrias. Funcionam como Jobs do SQL Server, dentro do
diretrio de replicao. O SQL Server possui cinco Agentes: Snapshot Agent, Log Reader
Agent, Distribution Agent, Merge Argent e Queue Reader Agent.
Os tpicos abaixo descrevem cada um dos Agentes apresentados nesse tpico.
Snapshot Agent
Esse Agente responsvel por criar o arquivo de snapshot e utilizado em todos os
tipos de replicao. O Snapshot Agent captura o schema e os dados que sero replicados; e
cria o arquivo de Snapshot no Distribuidor. Em seguida ele avisa sobre a sincronizao ao
Distribuidor.
Log Reader Agent
Esse Agente utilizado na replicao do tipo Transactional. Ele captura logs de
transao de alteraes em dados que esto marcados para replicao. Aps capturar os logs,
armazena na base de distribuio, no Distribuidor.
Distribution Agent
29
O Distriution Agent responsvel por enviar os snapshots ou transaes
guardadas aos Assinantes. Esse Agente utilizado nas replicaes Snapshot e Transactional.
Merge Agent
Esse Agente usado apenas na replicao do tipo Merge, e executado no
Distribuidor. O Merge Agent responsvel por aplicar o snapshot inicial nos Assinantes,
monitorar e mesclar as atualizaes aps a sincronizao inicial, e resolver conflitos.
Queue Reader Agent
Esse Agente usado na replicao Transactional para atualizar as mensagens que
foram guardadas numa fila. Na replicao Transactional existem duas opes: atualizar
imediatamente as alteraes ou atualizar quando os Assinantes estiverem disponveis. Para
atualizar imediatamente, o Publicador e o Assinante precisam estar em constante conexo.
Para atualizar quando os Assinantes estiverem disponveis, a mensagem salva numa fila e
so entregues a cada assinante pelo Queue Reader Agent quando os mesmos estiverem
disponveis.
A prxima seo apresenta os tipos de replicao que o SQL Server implementa.
Tipos de Replicao
O tipo de replicao que voc escolhe para um sistema de informao depende de
30
Snapshot Replication
Nesse tipo de replicao todos os dados so replicados exatamente como esto no
Publicador, sem fazer rastreamento de alteraes. Dessa forma, os dados replicados pelo
Publicador sobrescrevem os dados do Assinante.
A replicao Snapshot s indicada em casos onde a aplicao permita a existncia de
bases desatualizadas, quando existem poucas alteraes de dados ou o volume total de dados
pequeno.
O SQL Server utiliza alguns componentes para implementar esse tipo de replicao.
Um dos componentes o Snapshot Agent, que responsvel por preparar os arquivos da
replicao, armazen-los na pasta de distribuio e registrar uma nova replicao no banco de
dados do Distribuidor. A pasta de distribuio escolhida assim que configurado o
Distribuidor, podendo ser uma pasta local ou remota. Geralmente, os Snapshots so gerados e
replicados assim que a publicao assinada. Em seguida, um outro servio acionado, o
Distribution Agent. Esse servio tambm executa no Distribuidor e responsvel por
propagar a distribuio para todos os Assinantes. A Figura 8 mostra como funciona a
replicao Snapshot.
31
Este tipo de replicao gera um grande conjunto de dados contendo todos os objetos
que sero replicados, o que pode tornar esse processo lento, e consumir muitos recursos do
servidor. Por este motivo, replicao Snapshot no apropriada para bases de dados que
sofrem muitas alteraes.
Transactional Replication
Esse tipo de replicao iniciado com uma replicao Snapshot para sincronizar todas
as bases e assegurar que estaro idnticas. Com a replicao Snapshot concluda, todas as
32
alteraes que so feitas no Publicador so imediatamente replicadas para os
Assinantes, na mesma ordem e limite de transao, assegurando a integridade das bases de
dados dos Assinantes.
Essa replicao indicada quando a aplicao requer um intervalo de tempo mnimo
entre as mudanas feitas no Publicador e nos Assinantes; a replicao seja feita de forma
incremental; e guarda todos os estados dos Artigos replicados. Por exemplo, se um Artigo
sofre 3 alteraes em um intervalo pequeno de tempo, os trs estados sero replicados ao
invs de apenas o ltimo.
Nessa replicao, o SQL Server utiliza, alm dos componentes Snapshot Agent e
Distribution Agent, o componente Log Reader Agent. O Snapshot agente s executado
quando a assinatura iniciada e executa as mesmas operaes da replicao Snapshot . Em
seguida o Distribution Agent se encarrega de fazer a distribuio para todos os Assinantes.
Com todos os Assinantes sincronizados, o servio Log Reader Agent acionado. Esse servio
monitora o log de transaes de cada banco de dados configurado para a replicao
Transactional e copia as transaes marcadas para replicao do log de transaes no banco
de dados de distribuio, que atua como uma fila confivel para armazenar e avanar. Sempre
que o Log Reader Agent identifica uma nova atualizao e armazena no banco de dados do
Distribuidor, essa atualizao j pode ser distribuda pelo Distribution Agent aos Assinantes,
de acordo com o intervalo de tempo que foi configurado no Distribuidor. Os Assinantes
recebem as transaes na mesma ordem em que foram aplicados no Publicador. Se uma
assinatura estiver marcada para validao, o Distribution Agent tambm verificar se os dados
do Publicador e do Assinante coincidem. A Figura 9 demonstra como o Transactional
Replication funciona.
33
Merge Replication
A replicao to tipo Merge Replication inicia como a replicao to tipo Transactional,
34
ser rastreadas. Sempre que o Assinante est conectado rede, as alteraes feitas
aps a ltima sincronizao so replicadas do Publicador para o Assinante. A Figura 10
demonstra o funcionamento da Merge Replication.
35
replicao Snapshot e bastante utilizado em aplicaes que requerem muitas
alteraes de dados. Por permitir alteraes de diferentes locais, podem ocorrer conflitos na
sincronizao quando o mesmo dado alterado em mais de um local. Os conflitos podem ser
resolvidos
com
criao
de
uma
poltica
de
conflitos
no
Conflict
Policy
36
37
Na janela que se abrir, ser escolhido o prprio servidor (windows7-1) para ser o
Distribuidor, selecionando a primeira opo, como mostra a Figura 13.
38
Na prxima tela, como mostra a Figura 14, ser escolhida a pasta que guardar o
arquivo de snapshot do Distribuidor
39
Em seguida devem ser escolhidas as pastas onde ficaro os arquivos de log e o arquivo
da base de dados do Distribuidor, como tambm o nome da base do Distribuidor. Figura 15.
40
Na prxima tela, Figura 16, ser escolhido um ou mais Publicadores para ter acesso ao
Distribuidor. Como definido anteriormente, o publicador adicionado ser o servidor
windows7-1.
41
Na prxima tela, Figura 17, ser escolhida a opo configure distribution para que a
configurao seja executada.
42
Se tudo ocorrer bem, a prxima tela dever ser igual a Figura 18.
43
A prxima etapa ser criar uma Publicao. Para criar uma nova Publicao deve-se
clicar com o boto direito do mouse na pasta Replication e em seguida clicar em
New/Publication... (Figura 19).
44
Na janela que se abrir, dever ser escolhida a base de dados onde esto os Artigos a
serem replicados (Figura 20).
45
A prxima tela a parte mais importante da configurao. Nela ser definido o tipo de
replicao a ser criado. Neste trabalho optamos pela Snapshot Replication. Ento, como
mostra a Figura 21, dever ser selecionada a opo snapshot publication.
46
Na tela representada pela Figura 22, sero escolhidas as tabelas e/ou colunas que se
deseja replicar.
47
Na tela seguinte possvel escolher um filtro os dados que sero replicados. Como
queremos replicar todos os dados, deixe em branco, como na Figura 23.
48
Como mostra a Figura 24, na tela seguinte possvel optar por uma nica replicao
imediata, e/ou replicaes programadas.
49
50
O prximo passo ser localizar o servidor onde se encontra o Snapshot Agent. Nesse
caso o Snapshot Agent se encontra no servidor windows7-1, que onde se localiza o
Distribuidor. Esse passo demonstrado na Figura 26 e Figura 27.
51
52
53
54
O prximo passo configurar uma nova Assinatura. nessa etapa que ser definido os
Assinantes da Publicao que criamos. Para adicionar uma nova Assinatura, deve-se clicar
com o boto direito do mouse em Replication e escolher a opo New/Subscriptions...,
como mostra a Figura 30.
55
Na primeira tela ser pedido pra informar de qual Publicao ser a Assinatura. Como
queremos assinar a Publicao que foi criada nos passos anteriores, dever ser escolhida a
publicao base_replicacao_snapshot, como na Figura 31.
56
A tela seguinte pedir pra escolher entre Assinatura Pull ou Push. A diferena principal
o local onde ficaro os Agents. Na Assinatura Pull os Agents executaro no Distribuidor,
centralizando e tornando mais fcil a sincronizao dos Assinantes. J na Assinatura Push,
teremos um Agent executando em cada Assinante, fazendo com que cada Assinante seja
responsvel por sua sincronizao, diminuindo a sobrecarga no Distribuidor. Escolheremos a
Assinatura Push, como mostra a Figura 32.
57
58
Figura 33 - Assinantes
59
60
61
A tela exibida na Figura 38 apresentar duas opes para Agent Scheduler, que como
o Agente deve executar. As opes so run continuously para executar continuamente, ou
run on demand para executar sob interveno do DBA. Escolheremos a opo run
continuously. As telas seguintes finalizam a configurao do Assinante. Se no acontecer
nenhuma falha, a ultima tela deve ser exibida como na Figura 40.
62
63
64
65
Depois de seguir esses passos a configurao est concluda. Como mostra a Figura
41, possvel ver na mquina windows7-2 (Assinante) que o snapshot inicial j foi carregado
e o Assinante j possui as tabelas e os dados exatamente como no Publicador.
Para configurar as Replicaes Transactional e Merge, na tela que representada pela
Figura 21, deve-se escolher o tipo de publicao desejada: Transactional publication,
Transactional publication with subscriptions ou Merge publication. A diferena entre as
opes Transactional publication e a Transactional publication with subscription que na
segunda opo as alteraes feitas pelos Assinantes so replicadas para o Publicador e os
demais Assinantes. O restante da configurao idntico ao que foi apresentado neste
captulo.
66
4.2 Consideraes
O SQL Server 2008 utiliza uma arquitetura de replicao muito prxima do modelo
tradicional Primary Copy. Porm, h casos em que a replicao pode partir de uma cpia
secundria para a cpia primria, ferindo o modelo proposto pela literatura.
Apesar de implementar apenas a estratgia Lazy Replication, o SQL Server 2008
explora bastante essa estratgia com trs tipos de replicao que podem atender a maioria das
situaes em que necessrio uma replicao de base de dados.
Os pontos positivos encontrados no SQL Server so: a facilidade de configurar e
montar um ambiente de replicao; facilidade de personalizar a replicao atravs da
mudana de
67
PostgreSQL
O PostgreSQL um SGBD objeto-relacional que surgiu como evoluo do
5.1 Pgpool-II
Pgpool-II na realidade um middleware entre o servidor de banco de dados
PostgreSQL e seus clientes, atuando de forma transparente tanto para o cliente como para o
servidor (PGPOOL, 2010). Isso significa que o cliente enxerga o pgpool-II como se fosse o
servidor PostgreSQL, enquanto que o servidor o enxerga como um de seus clientes. Essa
abordagem permite que aplicaes utilizem o pgpool-II praticamente sem nenhuma
modificao em seus cdigos. (PGPOOL, 2009). A Figura 42 demonstra como o Pgpool-II
interage com o PostgresSQL.
68
69
conexo com parmetros idnticos, diminuindo a quantidade de conexes diretas no
banco de dados.
No modo Replication, o Pgpool replica todas as alteraes de dados feitas na cpia
primria, para as demais cpias secundrias. Como sugere o modelo Eager Primary Copy,
todas as atualizaes so replicadas instantaneamente para as cpias secundrias.
No modo parallel, as consultas grandes so divididas em partes menores e distribudas
entre todas as cpias nas quais sero executadas, gerando um balanceamento de carga, o que
aumenta o desempenho em consultas mais pesadas, e diminuindo a utilizao de memria de
cada servidor.
O modo Master/Slave (Mestre/Escravo) oferece uma alternativa de replicao, na qual
os dados sero atualizados na cpia principal (Mestre) e, quando possvel, replicados nas
cpias secundrias (Escravo). Para oferecer suporte a este tipo de replicao, o Pgpool precisa
trabalhar em conjunto com outra ferramenta, o Slony-I. Os ganhos de performance no modo
mestre/escravo so superiores aos ganhos obtidos no modo paralelo (PARTIO, 2007).
A extenso pgpool-II apresenta uma srie de limitaes, se comparada a um servidor
PostgreSQL padro, como, por exemplo, no possuir um sistema de controle de acesso. Caso
o acesso via TCP/IP ao servidor PostgreSQL esteja habilitado, pgpool-II aceitar conexes
provenientes de qualquer host, sendo necessria a utilizao de outro mtodo de controle
para limitar o acesso (iptables, por exemplo). (PGPOOL, 2009)
70
comportamento padro, como o diretrio de instalao. O diretrio padro
/usr/local. Make um comando que compila o cdigo fonte e make install ir instalar os
executveis. Voc deve ter permisso de escrita no diretrio de instalao. Ser tomado como
suposio que foi escolhido o diretrio padro.
O pgpool-II exige biblioteca libpq do PostgreSQL 7.4 ou superior. Se o script de
configurao exibir uma mensagem de erro informando que falta tal biblioteca, a biblioteca
libpq no est instalada, ou no a verso 3.
Os parmetros de configurao do pgpool-II so salvos no arquivo pgpool.conf . O
arquivo no formato: "parameter = value". Quando pgpool-II instalado, pgpool.conf.sample
criado automaticamente. recomendado copiar e renomear para pgpool.conf , e edit-lo
como quiser, pois o pgpoll ir buscar a configurao no arquivo pgpool.conf.
$ cp/usr/local/etc/pgpool.conf.sample/usr/local/etc/pgpool.conf
pgpool-II s aceita conexes a partir do host local usando a porta 9999. Se desejar
receber conexes de outras mquinas, preciso definir listen_addresses para '*'.
listen_addresses = 'localhost'
port = 9999
preciso configurar os servidores de backend do PostgreSQL para o pgpool-II. Esses
servidores podem ser colocados dentro do mesmo host que o pgpool-II, ou em mquinas
separadas. Se voc decidir colocar os servidores na mesma mquina, devem ser atribudos
nmeros de porta diferentes para cada servidor. Se os servidores so colocados em mquinas
separadas, eles devem ser configurados corretamente para que possam aceitar conexes de
rede do pgpool-II.
Neste trabalho, vamos colocar trs servidores dentro do mesmo host que o pgpool-II, e
atribuir as portas 5432, 5433, 5434, respectivamente. Para configurar pgpool-II, editar
pgpool.conf como mostrado abaixo.
backend_hostname0 = 'localhost'
backend_port0 = 5432
backend_weight0 = 1
backend_hostname1 = 'localhost'
backend_port1 = 5433
71
backend_weight1 = 1
backend_hostname2 = 'localhost'
backend_port2 = 5434
backend_weight2 = 1
Para backend_hostname, backend_port, backend_weight, ser definido o hostname do
n, nmero de porta, e a razo para balanceamento de carga. No final de cada seqncia de
parmetro, O ID do n deve ser especificado pela adio de nmeros inteiros positivos a partir
de 0 (ou seja, 0, 1, 2, ...).
Os parmetros backend_weight so todos 1, o que significa que consultas SELECT
so igualmente distribudos entre os trs servidores, caso seja ativado o balanceamento de
carga. Para iniciar o processo pgpool-II, o comando a seguir deve ser executado no terminal.
$ Pgpool
O comando acima no imprime mensagens de log. Se voc quer mostrar as mensagens
de log do pgpool, voc passa o parmetro -n para o comando pgpool. pgpool-II no executa
em segundo plano e deve ser iniciado pelo terminal.
$ Pgpool -n
As mensagens de log so impressas no terminal, por isso as opes recomendadas para
uso so como a seguir.
$ Pgpool-n -d> / tmp/pgpool.log 2> & 1 &
A opo -D permite que as mensagens de depurao sejam geradas.
Para parar o pgpool-II, execute o seguinte comando.
$ Pgpool stop
Se algum cliente ainda est conectado, pgpool-II espera por eles para desligar, em
seguida, encerrar-se. O comando a seguir fora a parada do pgpool-II.
$ Pgpool-m fast stop
Para habilitar as funes de replicao e balanceamento de carga, preciso setar o
valor true nos parmetros replication_mode e load_balance_mode, no arquivo de
72
configuraes. Aps configurar e reiniciar o Pgpool, a replicao deve ser testada.
Para testar, preciso criar uma nova base no servidor principal e observar se foi replicado nos
outros servidores. Abaixo segue um exemplo, em um ambiente onde foi criada uma base
banco_replicacao.
$ Createdb p 9999 banco_replicacao
$ Pgbench i p 9999 banco_replicacao
O script acima cria uma base banco_replicacao com tabelas e dados padro do
PostgresSQL. O script a seguir verifica que a base foi replicada nos outros servidores.
$ for port in 5432 5433 5434; do
>
echo $port
>
>
echo $table_name
>
bench_replication
>
done
> done
Aps executar esses passos, a replicao com o Pgpool-II est configurada e
executando.
5.2 Slony-I
O Slony-I uma ferramenta que estende o PostgreSQL e implementa Lazy Replication
em uma arquitetura Primary Copy, utilizando Triggers (PARTIO, 2007).
As atualizaes so feitas diretamente na cpia primria. Quando uma atualizao
feita, uma trigger executada. A trigger salva um log com as alteraes. Ao perceber as
alteraes no log, o servidor principal notifica os servidores secundrios sobre as atualizaes
e grava o evento de notificao na tabela sl_event (tabela de eventos especfica do Slony-I).
Ao receber a notificao, o servidor secundrio l o arquivo de logs, aplica as alteraes e em
seguida e notifica o mestre, que remove o evento da tabela.
73
O Slony-I a nica soluo para replicao assncrona no PostegreSQL
sendo mantida. Tambm apontada pelo site do PostgreSQL como a melhor soluo para
replicao assncrona e vem inclusa no pacote de instalao oficial do PostegreSQL.
port=5432
user=postgres
dbname=master
74
Foi criado um arquivo para cada banco e ajustado o dbname. Em seguida
cada arquivo de configurao foi carregado.
su - postgres
slon -f /var/lib/postgresql/slony/master.conf > master.log 2>& 1 &
slon -f /var/lib/postgresql/slony/slave1.conf > slave1.log 2>& 1 &
slon -f /var/lib/postgresql/slony/slave2.conf > slave2.log 2>& 1 &
75
Database: master
Cluster name: pgbench
Local node: 20 Slave node 2
Admin node: 99 - Admin node
Foi criado no master, paths para ambos os slaves e em cada slave a volta para o master.
Em seguida os paths sob cada n no master usando a string de conexo do script de
configurao.
host=127.0.0.1 port=5432 user=postgres dbname=master password=postgres
host=127.0.0.1 port=5432 user=postgres dbname=slave1 password=postgres
host=127.0.0.1 port=5432 user=postgres dbname=slave2 password=postgres
Observao: No banco master, no N master foram criados dois paths, um para cada
slave. Em cada N Slave, um path para o master. Repetir o procedimento para os bancos
slaves. Em seguida, foi criado um Replication Set no master usando as seguintes
configuraes:
ID: 1
Comment: pgbench set
Em seguida foram adicionadas as tabelas para o Replication set (master) com
as configuraes:
Table: public.accounts
ID: 1
Index: accounts_pkey
Table: public.branches
ID: 2
Index: branches_pkey
Table: public.history
ID: 3
Index: history_pkey
76
Table: public.tellers
ID: 4
Index: tellers_pkey
No master node foi criada uma nova subscrio para cada slave usando as seguintes
opes:
Origin: 1
Provider: 1 - Master node
Receiver: 10 - Slave node 1
Origin: 1
Provider: 1 - Master node
Receiver: 20 - Slave node 2
5.3 PGCluster
O PGCluster uma ferramenta que oferece o modelo de replicao Eager Primary
Copy (CIPRIANI, 2009).
PGCluster composto por trs tipos de servidores distintos: o servidor de replicao
(Replication Server), o balanceador de carga (Load Balance Server) e o servidor PostgreSQL
em si. O balanceador de carga no necessrio apenas para realizar o balanceamento de carga
entre os servidores, mas tambm para criar um cluster de alta disponibilidade (PGCLUSTER,
2009).
O servidor de replicao envia as atualizaes para os demais servidores, sempre
verificando a disponibilidade do mesmo. Quando um servidor secundrio est indisponvel,
ele removido do cluster, at que seja corrigido. J o servidor de balanceamento de carga
envia as solicitaes de consultas para o servidor que tiver o menor nmero de conexes
ativas, pois este representa o servidor com menor carga.
77
O PGCluster opera em dois modos: normal e confivel. No modo normal o
balanceador de carga retorna o resultado de uma operao para o cliente assim que ele receber
a resposta do servidor PostgreSQL que a executou. No modo confivel o balanceador de carga
devolve a resposta ao cliente somente depois que a operao foi executada em todos os
servidores PostgreSQL do cluster (PGCLUSTER, 2009).
A principal vantagem do PGCluster sobre o Slony-I que o PGCluster um patch que
se integra ao PostgreSQL, passando a fazer parte dele. Isso faz com que o PGCluster tenha
acesso a todos os recursos do PostgreSQL com facilidade, no precisando implementar a
replicao atravs de triggers. Alm disso, o PGCluster indicado pelo site do PostgreSQL
como a principal ferramenta para este tipo de replicao.
78
necessrio criar editar criar ou editar ou ambos o arquivo /etc/hots em
todas as mquinas que iro compor o sistema. Abaixo segue um exemplo de configurao.
# Balanceador de carga
192.168.0.1 loadbalancer
# Ns de armazenamento
192.168.0.11 cluster_1
192.168.0.12 cluster_2
192.168.0.13 cluster_3
# Servidores de replicao
192.168.0.21 replicate_upper
92.168.0.22 replicate_lower
necessrio editar trs arquivos de configurao: pgreplicate.conf, arquivo de
configurao do servidor de replicao; pglb.conf, arquivo de configurao do servidor de
balanceamento de carga; cluster.conf, arquivo de configurao do n de armazenamento.
Esses arquivos estaro no diretrio etc na pasta de instalao do PostgreSQL.
A configurao do pglb.conf ficar como descrito abaixo.
#==================================================
# Configuracao dos ns de armazenamento
#=================================================
<Cluster_Server_Info>
<Host_Name> clusterdb1 </Host_Name>
<Port> 5432 </Port>
<Max_Connect> 30 </Max_Connect>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> clusterdb2 </Host_Name>
79
<Port> 5432 </Port>
<Max_Connect> 30 </Max_Connect>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> clusterdb3 </Host_Name>
<Port> 5432 </Port>
<Max_Connect> 30</Max_Connect>
</Cluster_Server_Info>
#==================================================
# Configuracao do servidor de balanceamento de carga
#==================================================
<Receive_Port> 5432 </Receive_Port>
<Recovery_Port> 6101 </Recovery_Port>
<LifeCheck_Port> 6201 </LifeCheck_Port>
<Max_Cluster_Num> 128 </Max_Cluster_Num>
<Use_Connection_Pooling> no </Use_Connection_Pooling>
Agora ser necessrio configurar dois arquivos padro
/usr/local/pgsql/data/pg_hba.conf e /usr/local/pgsql/data/postgresql.conf
O arquivo pg_hba.conf ficar como o apresentado a seguir.
all
all
trust
all
all
all ::1/128
trust
do PostgreSQL,
80
# incluir no final do arquivo (referente sua rede)
host
all
81
#-----------------------------------------<Recovery_Port> 7101 </Recovery_Port>
<LifeCheck_Port> 7201 </LifeCheck_Port>
<Rsync_Path> /usr/bin/rsync </Rsync_Path>
<Rsync_Option> ssh -1 </Rsync_Option>
<When_Stand_Alone> read_only </When_Stand_Alone>
<Status_Log_File> /var/log/pgcluster/cluster.sts </Status_Log_File>
<Error_Log_File> /var/log/pgcluster/cluster.err </Error_Log_File>
<Not_Replicate_Info>
<DB_Name>Local_DB</DB_Name>
<Table_Name>Log_Table</Table_Name>
</Not_Replicate_Info>
Configurao do arquivo pgreplicate.sql:
<Cluster_Server_Info>
<Host_Name> clusterdb1 </Host_Name>
<Port> 5432 </Port>
<Recovery_Port> 7101 </Recovery_Port>
<LifeCheck_Port> 7201 </LifeCheck_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> clusterdb2 </Host_Name>
<Port> 5432 </Port>
<Recovery_Port> 7101 </Recovery_Port>
<LifeCheck_Port> 7201 </LifeCheck_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> clusterdb3 </Host_Name>
82
<Port> 5432 </Port>
<Recovery_Port> 7101 </Recovery_Port>
<LifeCheck_Port> 7201 </LifeCheck_Port>
</Cluster_Server_Info>
#-------------------------------------------------------------------# Configuracao do servidor de balanceamento de carga
#-------------------------------------------------------------------<LoadBalance_Server_Info>
<Host_Name> LoadBalance1 </Host_Name>
<Recovery_Port>8101</Recovery_Port>
<LifeCheck_Port>8201</LifeCheck_Port>
</LoadBalance_Server_Info>
<LoadBalance_Server_Info>
<Host_Name> LoadBalance2 </Host_Name>
<Recovery_Port>8101</Recovery_Port>
<LifeCheck_Port>8201</LifeCheck_Port>
</LoadBalance_Server_Info>
83
<Use_Replication_Log> no </Use_Replication_Log>
<Reserved_Connections> 1 </Reserved_Connections>
Com essas configuraes o ambiente est pronto. A seguir ser descrito alguns
comandos para iniciar, parar e reiniciar os servios.
Cluster
o Iniciando
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -o "-i" start
o Parando
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
o Reiniciando
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data restart
Balanceamento
o Iniciando
$ /usr/local/pgsql/bin/pglb -D /usr/local/pgsql/etc
o Parando
$ /usr/local/pgsql/bin/pglb -D /usr/local/pgsql/etc stop
o Reiniciando
$ /usr/local/pgsql/bin/pglb -D /usr/local/pgsql/etc restart
Replicao
o Iniciando
$ /usr/local/pgsql/bin/pgreplicate -D /usr/local/pgsql/etc
o Parando
$ /usr/local/pgsql/bin/pgreplicate -D /usr/local/pgsql/etc stop
o Reiniciando
$ /usr/local/pgsql/bin/pgreplicate -D /usr/local/pgsql/etc restart
5.4 Postgres-R
Postgres-R uma extenso ao servidor de banco de dados PostgreSQL que fornece
replicao sncrona (vrios mestres) e foi projetada para ser o mais transparente possvel para
o cliente (WANNER, 2008). Comparado a um sistema de banco de dados de um nico n, um
cluster Postgres-R mais confivel e pode ser ampliado facilmente, alm de ser mais barato e
84
flexvel (POSTGRESQL, 2008). O Postgres-R adicionado ao PostgreSQL como
um patch que adiciona funcionalidades ao banco de dados.
A principal funo do Postgres-R criar um Cluster de alta disponibilidade com baixo
custo, pois no ser necessrio o uso de equipamentos especiais para esta finalidade.
Assim como a extenso PGCluster, a Postgres-R um patch para o cdigo fonte do
PostgreSQL. Postgres-R disponibilizada sob a mesma licena do servidor PostgreSQL,
eliminando completamente quaisquer problemas relacionados a incompatibilidade de licenas
entre os cdigos (POSTGRESQL, 2008).
A instalao do Postgres-R pode ser encontrada em (CIPRIANI, 2009).
5.5 Consideraes
O PostgreSQL, por ser uma ferramenta de cdigo aberto com muitos colaboradores,
possui mais solues de replicao. O PostgreSQL, alm de ferramentas que implementam
todos os esquemas de replicao apresentados no trabalho, possui ferramentas que trabalham
com conceitos mais avanados, como clustering.
Apesar de implementar replicao apenas
85
86
Referncias
PGCluster.
PgFoundry,
2009.
Disponivel
em:
Disponivel
em:
PGPOOL.
PgFOundary,
2009.
Pgpool
Official
Documentation.
Pgpool,
2010. Disponivel
em:
em:
<http://www.postgresql.org/files/documentation/pdf/8.3/postgresql-8.3-
PostgreSQL,
2005.
Disponivel
em:
87
WANNER, R. Postgres-R: a database replication system for. Postgres
Global Development Group. ed. [S.l.]: [s.n.], 2008.
WIESMANN,
M.
Database
Replication
Techniques: A Three
Parameter