Domingo Mai 02, 2010

Slony para os preguiçosos

Encontrei alguns tutoriais para configurar a replicação Master / Slave do PostgreSQL com Slony, mas todas elas eram relativamente grandes e cheias de conceitos.

Esse post pretende ser o mais enxuto possível sem explicar os detalhes. Estou assumindo que a instalação seja de gente grande, com SSL ligado e instalado via pacote RPM (eu criei baseado no spec que vem no pacote, mas tive que fazer algumas adaptações).

O que será replicado

Base de dados: base1

Tabelas: tabela1, tabela2

Em cada máquina

psql -c "create user elefante superuser password 'senha';"
psql base1 -c "create language plpgsql;"

Configurando a replicação

Arquivo /etc/slon_tools.conf (em uma das máquinas):

if ($ENV{"SLONYNODES"}) {
require $ENV{"SLONYNODES"};
} else {
# nome qualquer para o cluster de replicacao. Usado no daemon
$CLUSTER_NAME = 'replication';
$LOGDIR = '/var/log/slony1';
$MASTERNODE = 1;
$DEBUGLEVEL = 2;
# Nos do cluster. Novos nos devem ser adicionados aqui. Nao mudar o node nunca
add_node(node => 1,
host => '172.16.0.2',
dbname => 'base1',
port => 5432,
user => 'elefante',
password => 'senha',
sslmode => 'require');
add_node(node => 2,
host => '172.16.0.3',
dbname => 'base1',
port => 5432,
user => 'elefante',
password => 'senha',
sslmode => 'require');
}
$SLONY_SETS = {
"set1" => {
# id a ser passado nos comandos do slonik
"set_id" => 1,
# replicar tabelas e sequencias
"table_id" => 1,
"sequence_id" => 1,
"pkeyedtables" => [
'tabela1',
'tabela2',
],
"sequences" => ['tabela1_id_seq',
'tabela2_id_seq',
],
},
};
if ($ENV{"SLONYSET"}) {
require $ENV{"SLONYSET"};
}
1;

/etc/slon.conf - configuração do daemon que fará a replicação (em cada máquina)

cluster_name='replication'
conn_info='host=172.16.0.2 dbname=base1 user=elefante port=5432 password=senha sslmode=require'

Ligando a replicação

slonik <(slonik_init_cluster)
service slon start
# iniciar o slon nos slaves também
slonik <(slonik_create_set 1)
slonik <(slonik_subscribe_set 1 2)

*Tudo* isso é o suficiente para ter uma base slave com os dados das duas tabelas no master.

Comments:

Post a Comment:
  • HTML Syntax: Allowed