Lançamos mais 04 novos projetos que serão mantidos por este site! Visite a seção Projetos e saiba mais!
 

Pesquisar

Login






Esqueceu sua senha?
Replicação em PostgreSQL Imprimir
Por Alexandre Otelo   
10 de dezembro de 2007
Image

Introdução

Muitas pessoas se perguntariam para quê migrar a sua aplicação de uma solução proprietária para uma solução livre, somente pelo custo da licença? E a formação de pessoal especializado e o suporte técnico, como fica, e as ferramentas de administração, replicação, backup, performance e outros.

É fato que as ferramentas proprietárias são melhores como um todo, mas cresce no mundo todo pessoas que desenvolvem soluções e as publicam, tornando cada vez mais robusta, esta por definição é SOFTWARE LIVRE. Você é livre para escolher, o suporte vêm pela internet até mesmo em poucas horas, e não leva dias como em soluções proprietárias. Você é livre para desenvolver a sua própria solução para o seu negócio, você é livre para distribuí-la, mantendo os direitos que recebeu. Não podemos dizer que a ferramenta é instável, por que não existe ainda no mundo auditoria tão severa como a de estar com o código fonte aberto para o mundo.

A medida que se estuda mais este sistema, encontramos novos horizontes que existem na sua maioria das ferramentas proprietárias já são realidade. Neste documento procurei despejar a melhor didática para o estudo de caso com Slony.

1. PostgreSQL


PostgreSQL é um Sistema Gerenciador de Banco de Dados, Objeto-Relacional, com licença BSD, ou seja, gratuito e aberto, multiplataforma, que vem crescendo muito o número de adeptos ao seu uso pela suas vantagens, principalmente a sua robustez.


2- Replicação


2.1 – Conceitos de replicação

Replicação de banco de dados é a cópia dos dados de uma base de dados original para outra base. Isto permite que possa disponibilizar os dados em um ou mais sites. Isto melhora a disponibilidade dos dados. A cópia destes dados podem ser parcial ou total.

Areplicação poderá ser usada para Sistemas distribuídos, Sistema de alta disponibilidade, ou talvez em processo de ETL em Data Warehouse.

Nos conceitos atuais de replicação a primeira classificação das ferramentas é relativo a sua arquitetura é síncrona ou assíncrona.

Replicação síncrona é uma cópias fiel em qualquer momento dos dados e transações. No mecanismo assíncrono, o servidor Master assume toda carga de escrita, atualização, deleção e leitura, com a diferença que o Slave apenas disponibiliza leitura da base conforme a figura 2.

Nos servidores Master podem ocorrer transações de leitura, escrita, atualização e deleção, já no servidor Slave, poderá ocorrer apenas operações de leitura, conforme figura 1.

Entre servidores Multimaster você poderá ter síncrono ou assíncrono, já em servidores Master e Slave, assíncrono. Isto é determinado pela ferramenta utilizada, e o que determina qual arquitetura será utilizada é o objetivo de implementação. Segue abaixo um comparativo de ferramentas para replicação no PostgreSQL:



Slony-I

Mamooth

Postgres-R

PG-Replicator

Tipo:

Assíncrono

Assíncrono

Síncrono

Assíncrono

Uso:

Master - multislave

Master - multislave

MultiMaster

Multimaster

Propaga DDL

Não

Não

Não

?

Sist. Operacional

Todos

Todos

Todos

Linux

BLOB

Não

?

?

Sim


Nestas três arquiteturas propostas acima, cada uma tem uma aplicabilidade específica preferencial.

  • Síncrono Multimaster: Balanceamento de carga ou alta disponibilidade;

  • Assíncrono Multimaster: Alta disponibilidade;

  • Assíncrono Master-Slave: Relatórios diversos níveis.




Image
Fig1 – Servidores Master estão ambos sincronizados transmitindo escrita, atualizações e deleções em tempo real.


Image
Fig2 - Servidores Master e Slave estão ambos sincronizados transmitindo escrita, atualizações e deleções em tempo real do Master para o Slave.


Para quem ainda não está familiarizado com as particularidades do mecanismo síncrono ou assíncrono talvez se pergunte o que aconteceria se um “Servidor A” replicasse assincronamente ao “Servidor B” e vice versa, isto não seria parecido com o mecanismo síncrono? A resposta disso é imediata, o servidor Slave é atualizado apenas e exclusivamente pelo mecanismo de sincronização. Isto provocaria um “lock”, travamento, de entrada de dados em ambos os servidores, ficando ambos apenas disponível para leitura, o que é logicamente um erro.

A maior aplicabilidade dos mecanismos síncronos são para proporcionar alta disponibilidade, enquanto o mecanismo assíncrono pode ser usado para melhoria de performance e disponibilidade de relatórios complexos, e por que não dizer parte constituinte de um Data Warehouse, no processo de Extração, Transformação e Carga(ETL).

A alta disponibilidade é desejável em sistemas críticos que não podem parar. Em caso de crash de um servidor, outro servidor assume de forma transparente para o usuário final do sistema.

Para nosso primeiro exemplo de replicação imaginem uma empresa matriz no Distrito Federal e com filiais nos estados do Rio de Janeiro e São Paulo. A estrutura de rede necessariamente uma máquina deve “enxergar” a outra, seja por IP fixo, VPN ou outra. A matriz possui a gerência de material e recursos humanos da empresa toda e as filiais estão on-line podendo acompanhar atualizações na gestão de material e dos recursos humanos. Se houver uma queda temporária da rede a(s) filial(ais) estarão com o último estado consistente da base de dados, podendo manter seus serviços com menor risco, como por exemplo de vender algo que já foi vendido pela matriz ou outra filial, ou de não vender por não saber que o estoque já foi renovado e está disponível.


Image
Fig3 – Distribuições entre filiais, em residências ou em escritórios pelos gestores.


Dentre os mecanismos de replicação iremos no capítulo seguinte mostrar o Slony, atualmente é o mais conhecido pela internet e aparentemente é o projeto que ganha mais adeptos.



2.2- Slony no Windows.

Algumas características do Slony são:


  • Replicação Master Multislave;

  • Assíncrono;

  • Multiplataforma;

  • A definição da tabela a ser replicada na base “Master” deve ser idêntica a “Slave”;

  • Replicação de tabelas e seqüências. Os demais objetos devem ser importados na base Slave de acordo com a necessidade do usuário;

  • Em caso de falha o servidor slave não para, e quando retomada a comunicação, o banco slave retorna automaticamente a forma do master em “pouco tempo”;

  • Slony deve ser instalado em cada servidor que desejar ser master ou slave;

  • Baixo tráfego pela rede;

  • As tabelas e seqüências slave ficam permanentemente com lock para escreta, atualização ou deleção. Qualquer tratamento deve ser feito pelo banco através de functions ou triggers;

  • Inadequado para clusters multimaster;

2.2.1- Conceitos no Slony


O Slony é um um replicador Master multi-Slave, assíncrono, e é multi-plataforma, ou seja, podemos instalá-lo no Windows, Linux, UNIX, Free BSD, e outros. Para nosso estudo de caso, adotamos a instalação no Windows pela familiaridade da maioria dos usuários, usando ferramenta de administração PgAdmin3 e neste caso o PostgreSQL 8.2, ou seja, apenas ferramentas livres em um sistema operacional proprietário. A seguir será mostrado screenshots de passo a passo da instalação e configuração do servidor de banco de dados e replicação.


2.2.2– Preparação do Sistema Operacional


Para aquisição do PostgreSQL na internet o usuário poderá buscar o site oficial: www.postgresql.org

Com o download do instalador do PostgreSQL para Windows é relativamente pequeno, aproximadamente 25MB, você estará com com todas as ferramentas necessárias para continuar nosso estudo. Lembro que no entanto que para instalar o PostgreSQL no Windows, é necessário usar Sistema de Arquivo NTFS. Para maiores detalhes a documentação está disponível para consulta no site.

A instalação do PostgreSQL é relativamente simples. Deve-se tomar o cuidado de instalar o módulo do Slony neste momento. Caso o usuário esteja aprendendo, recomento um nome fácil para senha do usuário postgres. No caso a senha que usarei no exemplo é 'postgres', mas isto é uma sugestão apenas didática, mas nada segura!


Image
Fig4 – Seleção do Slony no momento de instalação do PostgreSQL.


Após a instalação do PostgreSQL, falta a instalação do serviço Slony. É uma boa prática a utilização de ferramentas gráficas para administração, mas a instalação do serviço Slony é inevitavelmente na linha de comando. No entanto não se assuste, pois é bem fácil. O Slony é o serviço que rodará paralelo ao serviço de Servidor, que fará a ligação e replicação entre as bases de dados “Master” e “Slave”. Sem o serviço não há comunicação entre as bases de dados.

Uma vez instalado e configurado o serviço, “nunca mais” será necessário ficar mexendo neste serviço, mesmo que a rede sofra interferência e volte a funcionar, mesmo que o computador servidor reinicie os serviços.

Próximo passo é começar a configurar engines, do Slony. Para isto recomento a criação de uma pasta(folder) na raiz: C:\slony\

Os engines precisam construídos e dessa forma fica melhor de administrar caso precise aumentar a criação de bases replicadas. Estes engines são arquivos de texto, que sugiro o nome: [base de dados].conf. Exemplo: Master.conf.

O conteúdo do engine é bem simples, pois é somente para o Slony saber qual base ele deverá gerenciar. O conteúdo do engine é simplesmente a indicação do: cluster_name, e do conn_info. Veja o exemplo abaixo:


Image
Fig5 – Engine Master.conf dentro de C:\slony\


Agora repita este procedimento para o Slave.conf.

Ao final deste passo você deverá ter os dois arquivos engines do serviço Slony. Master.conf e Slave.conf.

Próximo passo é instalar o serviço Slony no Sistema Operacional Windows neste caso, mas que poderia ser outro sistema operacional. Para isto, vamos abrir o Prompt, e abrir o diretório: “C:\Program Files\Postgresql\8.2\bin”


Image
Fig6 – Tela inicial para instalação do serviço Slony no Windows.


Esta é a única parte que é nescessário mexer nas linhas de código, muitas pessoas não gostam, respeito, mas garanto que é bem fácil esta parte.

O comando SLON é chefe disso tudo e seus parâmetros são bem simples:

  • regservice [nome do serviço]: Registra serviço Slony;

  • unregservice [nome do serviço]; Destrói serviço Slony;

  • addengine [nome do serviço] [path para engine]; Acrescenta engine ao serviço Slony;

  • delengine [nome do serviço] [path para engine]; Exclui logicamente engine ao serviço;

  • listengines [nome do serviço]; Lista todos engines do serviço Slony.


Sabendo disso siga os passos para continuar a instalação do serviço:

  1. slon -regservce Slony-I

  2. slon -addengine Slony-I C:\slony\Master.conf

  3. slon -addengine Slony-I C:\slony\Slave.conf

  4. slon -listengines Slony-I (opcinal)


Seu serviço está instalado e disponível conferir em Painel de Controle> Ferramentas Administrativas> Serviços.



Image
Fig7 – Lista de serviços do Sistema Operacional no caso do Windows.


É uma boa prática trocar a inicialização de Automático para Manual, em caso de desktop pessoal, mas em servidor de teste ou produção sim, este deverá ser automático. No momento o serviço não precisa ser iniciado, mas quando precisar iniciar, parar ou reinicializar, poderá ser feito nesta tela.

Este passo terminou, como resultado final do sucesso é o serviço Slony-I.

2.2.2- Implementando Slony

Chega de brincar com linhas de comando, a partir de agora toda as ações de administração do Slony será com PgAdmin3, para alívio de alguns e desespero de outros mais conservadores. Acontece que quando a quantidade de replicação começam a crecer, começa ficar complicado a administração por linha de código.

Para começar a interação entre PgAdmin3 e o Slony, é nescessário a indicação de um caminho nas opções do PgAdmin3.

Image
Fig8 – Configuração PgAdmin3 com Slony.


Escrevendo o caminho: C:\Program Files\PostgreSQL\8.2\share de acorco com a figura 8, o PgAdmin3 está preparado para começar o cluster.

O próximo passo, iremos criar uma base de dados Master e uma Slave, para fins didático.


Image
Fig9 – Base de dados criadas.

Crie um cluster “cl_teste” conforme os moldes passados na figura 10.

Image
Fig10 – Cluster na base Master.

Image
Fig11 – Cluster na base Slave.

Crie uma tabela de teste em ambas as bases:


create table t (name text not null primary key);


Próximo passo é mostrar para cada um dos nós, Master node e Slave node no nosso exemplo, os caminhos entre si, estes caminhos são chamados de path. Abrindo a árvore das bases de dados, Master, replicação, cl_teste, encontraremos os nodes.

Na base Master, o caminho do Master node deverá ser mostrado para enxergar o Slave node com a string “host=localhost dbname=Slave user=postgres password=postgres”. A demonstração de como se faz isto está na figura 12.

ImageFig12 – Digitação do path na base Master, no Master node


Uma base Master somente precisa o path no Master node. O Slave node não precisa ser preenchido por que não trata-se de cascateamento, ou seja, “Master” replica para “Slave1” que por sua vez replica para “Slave1a”.


Este processo deve ser repetido na base Slave no Slave node para enxergar o Master node. O node de administração serve como um concentrador de todos os paths daquele cluster. Você após ter digitado o path no Master node na base Master e Slave node na base Slave esta etapa está completa e seguiremos para o próximo passo. O Listens aparecerão automaticamente, não há nada a ser mexido nele, ele simplesmente surgirá com a criação do path nos padrões corretos.

Neste próximo passo é a hora de iniciar ou reiniciar o serviço Slony no sistema, então vamos lá. Vá ao Painél de controle do Windows, Ferramentas Adminstrativas, Serviços, procure o serviço Slony-I e inicie ou reinicie neste momento.

Image
Fig13 – Momento de reiniciar o serviço Slony-I.


Para fins de monitoria do que está acontecendo com o serviço Slony-I, é uma boa prática abrir o Visualizador de Eventos do Windows para ver alguma possível falha até o momento. Este visualizador fica em Painel de Controle, Ferramentas Administrativas e finalmente, Visualizador de Eventos. Vá em Aplicações e lá mostrará o serviço Slony-I e seus logs no sistema.

Image
Fig14 – Visualizador de eventos para saber eventual problema no processo.


Próximo passo é a criação do Set. Nele define tabelas e seqüências que serão replicadas. Isto ocorrerá na base Master, não sendo necessário na base Slave, isto por que o Slony entende que seja na igualmente correspondente naquela base.

O Slony replica apenas tabelas e seqüências, isto por que as functions, views , triggers, e outros fazem neste contexto parte da DDL do banco, mas que a partir da replicação das dependências de cada um destes objetos, seus resultados serão iguais às da base Master.

Image
Fig15 – Criação de um SET.


Agora falta pouco para vermos a nossa base Master replicada. Próximo passo é a inclusão das tabelas e seqüências no set.

Image
A(s) tabela(s) necessariamente deverão possuir um campo chave unique que será “a chave” para replicação. Em outras palavras, se houver atualização, deleção ou inserção de registro, o Slony vai busca-lo por esta chave. Por este motivo o set pedirá estas informações no caso da tabela. Nas seqüências, o mecanismo é parecido, mas sem precisar se preocupar com o campo chave. Você poderá fazer uso de nenhuma ou várias tabelas em um único set, e isto também vale para as seqüências.


Fig 16 – Demonstração de uma tabela inserida no SET.

Por fim, a última etapa para vermos o nosso mecanismo funcionar, falta apenas a criação do Subscription. Isto ocorrerá na base Master, indicando origem, destino.

Clicando com o botão direito em cima do Master set, procure a criação de um novo objeto. A sua opção desejada estará lá, New Subscription.

Image
Fig17 – Criação do Subscription.


Nosso produto final é esta fotografia:


Fig18 – Fotografia final do exercício.


Agora falta o teste. Vamos fazer dois testes para começarmos entender.


Primeiro teste: Teste da carga, vá a base Master e de carga com vários nomes a sua escolha, pode escrever quantos quiser.

Ao termino, o teste consiste em estes mesmos nomes estarem em seu correspondente na base Slave. Repita esta operação atualizando os campos e se quiser, apagando os campos também na base Master. Lembre-se que as tabelas envolvidas na replicação na base Slave agora possuem lock de qualquer tipo de operação de atualização, escrita ou deleção, serve apenas para leitura, mas as demais não envolvidas permanecem unlock.

Segundo teste: Vá aos serviços do Windows e PARE o Slony-I. Com isto simulamos uma “queda de rede” entre base Master e Slave.

Atualize os registros na Master e observe o que acontece no Slave. Claro que a Slave ficará com a última “fotografia” consistente, mas isto não impede que a base Master saia de produção ou dependa de qualquer favor da base Slave.

Por fim, reinicie o serviço Slony-I e observe o que acontecerá com a base Slave. Se tudo estiver certo, ele tomará imediatamente o aspecto do Master.

Agora que você teve um primeiro contato com Slony-I na prática, está livre para inventar desafios, dificuldades e transpor-las. Isto é um excelente exercício para conhecimento principalmente dos conceitos de síncrono e assíncrono, com o tempo o que pode parecer parecido, pode apresentar vantagens e desvantagens impactantes para o sua administração do banco.

Bibliografia

  • http://slony.info/ - Site oficial do projeto Slony; Acesso em out/2007.
  • http://www.postgresql.org/ - Site oficial do PostgreSQL; Acesso em out/2007.
  • http://www.pgadmin.org/ - Site oficial do PgAdmin3; Acesso em out/2007.
  • http://pgreplicator.sourceforge.net/ - Site oficial Pg Replicator; Acesso em out/2007.
  • http://www.commandprompt.com/products/postgresqlcore – Site do Mamooth PostgreSQL; Acesso em out/2007.
  • http://pgpool.projects.postgresql.org/ - Site oficial PGPOOL; Acesso em out/2007;
  • http://www.postgresql.org.br/ - Site PostgreSQL no Brasil; Acesso em out/2007;
  • Elmasri e Navathe “Sistemas de Banco de Dados – Fundamentos e Aplicações - 3a edição”



Gostou do artigo? Então compartilhe!
Digg!Reddit!Del.icio.us!Google!Technorati!StumbleUpon!Add this social bookmarking functionality to your website! title=
Última Atualização ( 12 de dezembro de 2007 )
 

Itens Relacionados





Add to Technorati Favorites

Feed