Академический Документы
Профессиональный Документы
Культура Документы
Resumo
Esse artigo serve como passo-a-passo para configuração de um Cluster
de banco de dados Postresql utilizando o Slony-I, sistema de replicação
assı́ncrono,master to multiple slaves com cascateamento e failover.
1
Sumário
1 O que é Slony-I? 1
1.1 Caracterı́sticas do Slony-I . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Limitações do Slony . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Instalando o Postgresql 1
2.1 Testando o servidor Postgresql . . . . . . . . . . . . . . . . . . . 2
4 Instalando o Slony-I 1
6 Plano de Configuração 1
12 Definindo a Topologia 9
13 Alterando a topologia! 1
2
1 O que é Slony-I?
Slony-I é um projeto open-source que tem como objetivo prover replicação entre
banco de dados Postgresql. É isso que o slony se propõe a fazer, replicação de
dados nada mais além disso. Slony-I não é um software para gerenciamento de
redes, alta disponibilidade ou qualquer outra necessidade diferente de replicação
entre banco de dados Postgresql.
Existem Outras opções de replicação entre banco de dados Postgresql, pg-
pool,pgcluster, cada qual com sua caracterı́stica especı́fica. O Slony vem se
destacando por ser um projeto considerado estável e maduro.
A tı́tulo de curiosidade Slony significa manada de elefantes em russo, um nome
bastante interessante, visto que em um cluster da banco de dados Postgresql
teremos vários elefantes!
• Replicação Assı́ncrona:
A replicação entre os banco de dados não ocorrem em tempo real entre
os nós do cluster. Sendo mais claro, isso significa que, se uma alteração é
realizada em um nó, existe um atraso para atualização se propagar entre
os outros nós que fazem parte do nosso cluster.
• Permite Fail-over.
Se o seu nó de origem cair, você pode fazer um nó escravo assumir a
posição do nó de origem. Cabe salientar que: O slony não é um programa
de gerenciamento de rede ou alta disponibilidade, isso é feito manualmente!
• Solução escalável
Pode-se ter dezenas de nós.
1.2 Limitações do Slony
• Não replica DDL.
Já foi explicado acima
2
2 Instalando o Postgresql
Um dos pré-requisitos para se ter o Slony-I rodando é ter instalado o Postgresql
em cada máquina do cluster. A instalação do Postgresql é extremamente simples
como iremos observar nos passos abaixo:
3. ./configure
Se por acaso a instalação reclamar das libs readline ou zlib, execute ./confi-
gure –without-readline –without-zlib ou instale os pacotes libreadline5-dev
e zlib1g-dev
4. make
5. make install
6. useradd postgresql
Cria o usuario postgresql no sistema.
8. su postgresql
Muda para o usuário postgresql.
9. /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
Cria o diretório de dados do postgresql.
2
3 Entendendo um pouco mais sobre o Slony-I
Existem alguns conceitos que devem ser entendidos antes da instalação e uso do
slony-I.
1. Cluster
Agrupamento de todos os nós que fazem parte do sistema de replicação.
2. Node
Cada host que compõe o sistema de replicação e consequentemente formam
o cluster.
3. Origem
Nó origem de todo o esquema de replicação.
4. Provider
Um nó provider é um nó que vai prover replicação ao próximo nó.
5. Subscribe
Um nó que receberá a replicaçao a partir de outro nó.
6. Slonik
Interface de configuração para o Slony-I. Através do Slonik que vamos
configurar o Slony! Ele possue uma sintaxe própria no qual vamos especi-
ficando as caracterı́sticas do nosso Cluster.
Observações:
Um nó que seja Provider ele é orbigatoriamente subscribe também, pois ele é
subscribe de um nó e provider de outro.
Como veremos asseguir, é através do slonik que configuramos o nosso cluster.
Posso configurar sem utlizar o slonik? Pode mas dá um trabalho enorme e
você tem que ter amplo conhecimento dos objetos de banco de dados que são
necessários para o Slony-I rodar(Tabelas,Funcões,Views).
4 Instalando o Slony-I
O slony-I está atualmente na versão 1.2.0 (26/06/2007), e é essa versão que
iremos utilizar.
Baixe o arquivo slony1-1.2.0.tar.bz2 do site www.slony.info/downloads/1.2/source/
.....
1. Nosso Cluster de Banco de dados vai ser formado por 4 máquinas, com os
seguintes ips.
jatiuca(10.1.0.1)
barra(10.1.0.2)
frances(10.1.0.3)
maragogi(10.1.0.4)
2. Em cada host temos um banco de dados chamado bd praias
create database bd praias;
3. Replicaremos as seguintes 9 tabelas entres os nós.
create table tabela1(id integer primary key,nome text);
create table tabela2(id integer primary key, nome text);
create table tabela3(id integer primary key, nome text);
.....
create table tabela10(id integer primary key,nome text);
6 Plano de Configuração
Deveremos seguir alguns passos para configuração sem erros,e que nos propor-
ciona fácil manutenção.
1. Configurar as conexões dos nós e o nome do nosso Cluster.
2. Configurar quem é o nó Master e sãos os nós Escravos.
3. Configurar a comunicação entre os nós.
4. Configurar quais tabelas e sequências devem ser replicadas.
5. Colocar o slon pra rodar!
6. Configurar quem é Provider de quem( Topologia )
Essas tarefas são realizadas através do slonik.
7 Configurando as conexões dos nós
Devemos criar um arquivo chamado pg service.conf e deve ser copiado para a
pasta $PGDATA/etc
( Deve-se criar o diretório $PGDATA/etc ).
Arquivo pg service.conf
—————————————————————————–
[jatiuca]
dbname=db praias
host=10.1.0.1
user=postgres
[barra]
dbname=db praias
hots=10.1.0.2
user=postgres
[frances]
dbname=db praias
host=10.1.0.3
user=postgres
[maragogi]
dbname=db praias
host=10.1.0.4
user=postgres
—————————————————————————–
Devemos criar um arquivo chamado preamble.sk. É esse arquivo que vai
possibilitar o slonik (que já foi comentado acima! ) se conectar nos hosts e
construir toda a estrutura de replicação necessária. Devemos observar que as
entradas do arquivo pg service.conf serão utilizadas nesse arquivo.
Arquivo preamble.sk
————————————————————————————
define CLUSTER teste;
define jatiuca 1;
define barra 2;
define frances 3;
define maragogi 4;
define fqn fully qualified name;
2
————————————————————————————
Observações:
A sintaxe poderia ser:
————————————————————————————
#!/usr/local/pgsql/bin/slonik
include preamble.sk
### Adivinha o motivo desse include? fica de lição de casa!
### init cluster(id=id-origem,comment=’comentario’);
### Indica quem é o nó de origem da replicação
————————————————————————————
3
Arquivo path.sk
————————————————————————————
#!/usr/local/pgsql/bin/slonik
include preamble.sk
### Já sabe o motivo do include?
# store path(server=id-no , client=id-no , conninfo=’string-de-conexao’);
————————————————————————————
Observações:
O caminho entre 2 nós tem sempre a ida e a volta. Se eu estabeleço um caminho
entre um nó X ao nó Z então faço o contrário, do nó Z ao nó X.
Viu como é mais fácil o uso do preamble.sk? nao??? Então olha como é legal
fazer a manutenção nisso!
Imagina um Cluster com dezenas de nós?
4
2. Dentro do set informamos quais tabelas e sequências devem ser replicadas.
Arquivo sets.sk
————————————————————————————
#!/usr/local/pgsql/bin/slonik
include preamble.sk
### Já sabe o motivo do include?Ainda não? Sério?
# create set(id=id-do-set , origin=id-no-origem , comment=’comentario’);
————————————————————————————
Observações:
Recapitulando... Primeiro criamos o SET, depois definimos quais
objetos vão ser replicados.
Necessariamente as tabelas devem ter chaves primárias..
Se as tabelas não tiverem chave primária (Bem segundo o modelo
relacional .... mas isso e outra tema)devem ter indices únicos e você
deve informar ao slony qual o campo, adicionando o KEY no set
add table
set add table(set id = ’id-do-set’ ...... key=’nome-do-indice’)
5
11 Colocando o slony pra rodar
Acho que você leitor, (acho isso comédia demais!) já deve estar ancioso pra
replicar uma única tabela! calma vamos lá!
No momento temos os seguintes arquivos:
pg service.conf
preamble.sk
initcluster.sk
path.sk
sets.sk
6
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit
index ”sl path-pkey”for table ”sl path”
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit
index ”sl listen-pkey”for table ”sl listen”
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit
index ”sl subscribe-pkey”for table ”sl subscribe”
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit
index ”sl event-pkey”for table ”sl event”
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit
index ”sl registry pkey”for table ”sl registry”
Algumas mensagens vão surgir na sua tela! O que o slonik esta fazendo é o
seguinte:
Ele se conecta nos bancos de dados que participarão na replicação, cria um es-
quema novo com o nome do Cluster que nós definimos láaaaa no começo, no
arquivo pg service.conf, no parametro cluster name.,precedido por ( no nosso
caso teremos um esquema TESTE) e dentro desse esquema cria toda a es-
trutura de replicação necessária para o funcionamento, totalizando 25 objetos
dentro desse esquema entre tabelas,sequências e views. Conecte nos seus bancos
de dados e observem o schema e os objetos criados!
Digite: ./paths.sk
Digite: ./set.sk
7
Jatiuca.slon
————————————————————————————
————————————————————————————
barra.slon
————————————————————————————
————————————————————————————
frances.slon
————————————————————————————
————————————————————————————
maragogi.slon
————————————————————————————
————————————————————————————
8
12 Definindo a Topologia
Para definirmos a topologia, criamos um arquivo chamado subscribe.sk.
subscribe.sk
————————————————————————————
#!/usr/local/pgsql/bin/slonik
include preamble.sk;
#Sem querer ser chato, ainda não sabe o porque desse include?
# subscribe set(id=id-do-set,provider=id-do-no,receiver=id-do-no,
#forward= TRUE ou FALSE );
# Nosso host jatiuca sera origem de toda a replicação
# e todos os nós irão replicar a partir dele!
subscribe set(id=1,provide=@jatiuca,receiver=@frances,forward=TRUE);
subscribe set(id=1,provider=@jatiuca,receiver=@barra,forward=TRUE);
subscrive set(id=1,provider=@jatiuca,receiver=@maragogi,forward=FALSE);
————————————————————————————
Ok vamos as explicações!
forward = TRUE ou FALSE, se TRUE o nó subscribe retém uma cópia dos
dados para poder prover para outros nós subscribers, caso contrário false.
9
13 Alterando a topologia!
Agora vamos alterar a topologia do Cluster!
Vamos obter o seguinte cenário!
subscribe.sk
————————————————————————————
#!/usr/local/pgsql/bin/slonik
include preamble.sk;
#Sem querer ser chato, ainda não sabe o porque desse include?
# subscribe set(id=id-do-set,provider=id-do-no,receiver=id-do-no,
#forward= TRUE ou FALSE );
# Nosso host jatiuca sera origem de toda a replicação
# e todos os nós irão replicar a partir dele!
subscribe set(id=1,provide=@jatiuca,receiver=@frances,forward=TRUE);
subscribe set(id=1,provider=@frances,receiver=@barra,forward=TRUE);
subscrive set(id=1,provider=@barra,receiver=@maragogi,forward=FALSE);
————————————————————————————
include preamble.sk
lock set(id=1,origin=@jatiuca);
move set(id=1,old origim=@jatiuca, new origin=@frances);
Quando o comando move set é executado, Slony troca os papéis entre
a antiga origem e a nova origem. A antiga origem ainda faz parte da
replicação mas agora é um simples subscribe!
include preamble.sk
failover(id=@jatiuca, backup node = @frances);