Configurando o Slony na manha…

Faz uns 2 anos que eu escrevi um script em shell para facilitar a vida na configuração do slony-I. Bem, para quem ja mecheu com o Slony, ele tem uma linguagemzinha propria de configuração o slonik (chamado de pequeno elefante). Então … para configurar o slony eu tenho que saber o básico do slonik hehehe!!!

O problema de se configurar o slony, na minha opinião é que se você tiver várias, tabelas, sequences no seu banco de dados, que é comum encontrarmos um banco com 300 tabelas e tanana e tanana entao no seu arquivo de CONF você terá uma entrada para cada tabela ou sequence replicada… e como ja foi dito existe uma sintaxe toda própria para tal tipo de configuracao.

PS: O Script é só um ponta-pé inicial para a configuração do slony, e não uma interface de gerenciamento do mesmo. Você pode alterar o código fonte e melhorá-lo, sim ele precisa de melhorias hehehhe, portanto sinta-se a vontade!!!! HÁAA eu nao coloquei no codigo fonte mas é GPL , vou colocar o mais rapido

Mas para que serve o danado do Script?

Bem … para faciltar!!!! 🙂

O bom do script é que ele é baseado em DIALOG, ou seja preenchendo as caixas de dialogo você vai configurando o slony intuitivamente sem a necessidade de meter as mãos nos Confs. Ou seja, Com menus e outros objetos você seleciona quais os bancos de dados deseja replicar, quais as tabelas que serão replicadas, quais as sequences, e o mais legal, qual será a topologia do seu Cluster.

Pode parecer mágica, magia negra, curandeirismo mas não é hehehhe. Sim você terá um banco de dados replicado em menos de um minuto não importanto a quantidade de objetos que devam ser replicados e ainda de brinde MAN ganhas um “OOOOO mas como você fez isso tão rápido” do seu chefe!!!

Replicando um banco de dados Postgresql em menos de 1 minuto!!!!

Pré-requisito

O pré-requisito não entra no 1 minuto hehehhe!!! Logicamente são os mesmos pré-requisitos do Slony-I

Postgresql instalado em cada nó.

slony-I instalado em cada nó.

o pacote Dialog instalado em um computador para gerar a configuração de preferência em um dos nós. (O script utiliza o Dialog como ja foi dito)

No nó que for rodar o script, certifique-se que o psql esteja no $PATH (preguiça minha mas vou alterar isso no script hehehhe)

Preparando o ambienteno seu banco de dados

crie um banco de dados chamado bd1 e bd2;

create database bd1;
create database bd2;

De suporte a plpgql em cada um dos bancos de dados… Lição de casa, se vc esta querendo mecher com slony entao isso tranquilo….

No nosso exemplo vamos replicar somente 2 bancos de dados em um mesmo computador, questões de muuuuita preguiça mesmo.

Vamos criar 20 tabelas em cada banco de dados da seguinte forma tabela1…. tabela20 com os seguinte campo tabela1(id integer primary key)…… Isso é só para ilustraaaaaaaaar gente!;

for i in $(seq 1 20)
do
psql -U postgres -h localhost -c ” create table tabela$i(id integer primary key)” bd1;
psql -U postgres -h localhost -c ” create table tabela$i(id integer primary key)” bd2;
done

Beleza bd1 e bd2 criados ambos com 20 tabelas!!!!
To com ódio na ferramenta, como diria o filósofo MC catra!!! Então bora nessa.
Com o script em maos, de permissao no danado de execução e rode ele!!

Rodando o Script!!!

./slony.sh

Informe um nome para o cluster: primeiro_cluster
Esse não é um how to sobre slony, entao nao vou explicar muito…. Ta bom….. todo um cluster do slony tem que ter um nome ok?:

O seu primeiro nó a ser cadastrado será o no de origem de toda a replicação, chamado de origin node!!!
No nosso caso o no1…

Digite um nome para o no: no1

Qual o ip do no1?? Bem como ja vamos rodar na maquina local os dois bancos colocaremos: localhost
PS: como estamos em um exemplo simples posso colocar localhost, mas prefira sempre colocar o Endereço ip correspondente da maquina.

Digite o nome do usuário para se conectar no no1: tasca o postgresql…

Qual o banco do nó no1 que eu desejo replicar?? Seria o BD1??? sim sim sim

Cadastre outro nó meu jovem!!!!

Rapaz que cabra inteligente…. Cadastrei o meu primeiro nó, o nó de origem entao todos os meus outros nós que irei cadastrar serão nós que receberam a replicação. A telinha informa: Agora meu jovem vamos cadastrar os nós que receberão a replicação.

Digite um nome para o nó: no2

Digite o ip onde esta o no2: Localhost

postgres … ( to cansando pgcon lá vou eu!!!)

Escolha o bd2, é onde os dados do b1 serão replicados para o bd2!!!

Devemos cadastrar outro nó?? Não Não…..

Eita eu posso até escolher o esquema em que meus objetos estao!!! Sim as nossas 20 tabelas estao no esquema public, entao vamos escolher o esquema publico!!!

Vamos configurar para replicar as 20 tabelas do banco bd1 para o bd2!!! Escolha as 20 tabelas!!!

Atenção, que vai ser o meu provedor para o no2?? no nosso Exemplo só temos o nó1. Se tivessemos cadastrados mais nós, é nesse menu que eu ia definir a minha topologia. Marcamos o no1. Ou seja o meu no2 irá replicar através do no1. Mais uma vez, é aqui que definimos quem vai cascatear de quem…


Beleza a configuração do slony realmente já esta feita, mas vamos colocar o trem pra funfar, que é o que interessa….

Acabou….. boa sorte………

Depois que rodamos o script ele gerou uns arquivos de configuração do slony (Aconselho dar uma bizoiada neles para ver o trabalho que dá configurar o bicho na unha):
addPath.sk createSet.sk subscribe.sk iniCluster.sk no1.slon no2.slon pg_service.conf preamble.sk

Não irei entrar em detalhes desses arquivos e sua configuração, mesmo porque o script já fez a configuração todinha…

vamos la:

copie o arquivo pg_service.conf para ../pgsql/etc no meu caso /usr/local/pgsql/etc, provavelmente não existe o diretório etc dentro do /usr/local/pgsql/, crie ele e não se esqueça de manter a permissão do diretório e do arquivo para postgres. Isso em todos os hosts, ou seja todos os nós do cluster.

chmod 750 *.sk , com isso tornarei todos os meus scripts executaveis

rode os scrips na seguinte ordem:
./iniCluster.sk
./addPath.sk
./createSet.sk iniCluster.sk
./subscribe.sk

Rode o deamon dos slony:
no caso como faremos localmente abra 2 terminais:
terminal 1: slon -f ../caminho../no1.slon
terminal 2: slon -f ../caminho../no2.slon

Para finalizar…..

Para quem quiser fazer um shell para inserir 10000 linhas na tabela1 do banco1
for i in $(seq 1 10000)
do
psql -U postgresql -h localhost -c” insert into tabela1 values($i);” bd1
done

ou insira na mao alguns registros.
Depois conecte-se no banco bd2 e:
select count(*) from tabela1;