Acima, é mostrada uma visão geral sobre a replicação assíncrona do Slony-I em resumo. Para mais informações, a documentação do Slony-I é sua melhor amiga :).
Vamos começar com os métodos de replicação, no método perltools, você precisa configurar o slony no momento da instalação do código-fonte para habilitar scripts perl integrados. Esses scripts começam com “SLONIK_” e são projetados para realizar tarefas administrativas de replicação.
Minha demonstração para dois métodos shell(slonik) &Perl está em Localhost Single instance(5432) com dois bancos de dados Master &Slave replicando uma tabela “rep_table”. Para replicação, mestre/escravo deve manter a mesma estrutura de tabela. Se você tiver muitas tabelas, use a opção de dump de estrutura pg_dump/pg_restore. Como estou replicando uma tabela, acabei de criar a mesma no Master/Slave.
Nota:Defina variáveis de ambiente como PGDATA,PGPORT,PGHOST,PGPASSWORD &PGUSER.
Instalação de origem:
Baixe a fonte do Slony-I 2.1(http://slony.info/downloads/)
#bunzip2 slony1-2.1.0.tar.bz2
#tar -xvf slony1 -2.1.0.tar
# cd slony1-2.1.0
#./configure --prefix=/opt/PostgreSQL/9.1/bin
--with-pgconfigdir=/opt/ PostgreSQL/9.1/bin
--with-perltools=/opt/PostgreSQL/9.1/bin
// Excluir --with-perltools se não for necessário
# make
# make instalar
Configuração básica no mestre/escravo
createdb -p 5432 master
createdb -p 5432 slave
psql -p 5432 -d master -c "criar tabela rep_table(id int chave primária);"
psql -p 5432 -d slave -c "criar tabela rep_table(id int chave primária);"
Inserir alguns dados no mestre para replicar para o escravo
psql -p 5432 -d master - c "inserir em valores rep_table(generate_series(1,10));"
Método 1:–with-perltools :
1. Crie no arquivo .conf padrão, com informações como, localização do log, número de nós, conjunto de tabelas etc.,
$CLUSTER_NAME ='myrep';
$LOGDIR ='/opt/PostgreSQL/9.1/slonylogs';
$MASTERNODE =1;
$DEBUGLEVEL =2;
&add_node(node => 1,host => 'localhost',dbname => 'master',port => 5432,user => 'postgres',password => 'postgres');
&add_node (node => 2,host => 'localhost',dbname => 'slave',port => 5433,user => 'postgres',password => 'postgres');
$SLONY_SETS =
{
"set1" =>
{
"set_id" => 1,
"table_id" => 1,
"pkeyedtables" =>
[rep_table,],
},
};
Inicializar, criar e assinar, essas são as três fases da replicação slony. Para cada fase, são criados scripts perl “slonik_” no local mencionado no momento da instalação do código-fonte com a opção “–with-perltools”. No meu caso é “/opt/PostgreSQL/9.1/bin”. O arquivo CONF acima é usado em todas as fases.
2. Inicialize o cluster. Aqui slonik, verifica a conexão dos nós.
cd /opt/PostgreSQL/9.1/bin
./slonik_init_cluster -c slon.conf
./slonik_init_cluster -c slon.conf| ./slonik
3. Criar um conjunto, significa qual conjunto de tabelas replicar do Nó 1 para o Nó 2.
./slonik_create_set -c slon.conf 1
./slonik_create_set -c slon.conf 1|./slonik
4. Inicie os daemons do Slon. Cada nó terá dois processos slon para realizar o trabalho. Cada processo de slon de nó deve ser iniciado.
./slon_start -c slon.conf 1
./slon_start -c slon.conf 2
5. Subscribe Set, daqui o slony mantém a consistência dos dados entre dois nós, permitindo Master para todos os DMLs e negando-os no Slave.
./slonik_subscribe_set -c slon.conf 1 2
./slonik_subscribe_set -c slon.conf 1 2|./slonik
Após os passos acima agora seu slave terá dados replicados.
Método 2:com scripts padrão:
Nos métodos de script padrão, há muitas maneiras de implementar, mas para entender claramente eu dividi da mesma forma que Perl fizemos acima, como Initialize, create-set &subscribe set. Todos os scripts são vinculados ao comando SLONIK.
1. Crie dois arquivos .conf para o nó mestre e escravo.
vi master_slon.conf
cluster_name=myrep
pid_file='/opt/PostgreSQL/9.1/data/master_slon.pid'
conn_info='host=localhost dbname=master user=postgres port=5432'
vi slave_slon.conf
cluster_name=myrep
pid_file='/opt/PostgreSQL/9.1/data/slave_slon.pid'
conn_info=' host=localhost dbname=slave1 user=postgres port=5432'
2. Inicialize o cluster.
#!/bin/bash
# Inicializar cluster (init_cluster.sh)
slonik <<_eof_
nome do cluster =myrep;
node 1 admin conninfo ='host=127.0.0.1 dbname=master user=postgres port=5432';
node 2 admin conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432';
#Add Node
init cluster (id =1, comment ='Primary Node For the Slave postgres');
store node (id =2, event node =1, comment ='Slave Node For The Primary postgres');
#Setting Store Paths ...
echo 'Armazenou todos os nós nos catálogos slony';
store path(server =1, client =2 , conninfo='host=127.0.0.1 dbname=master user=postgres port=5432');
store path(server =2, client =1, conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432');
_eof_
$./init_cluster.sh
3. Crie um conjunto.
#!/bin/bash
# Criar conjunto para conjunto de tabelas (create-set.sh)
slonik <<_eof_
nome do cluster =myrep;
no 1 admin conninfo='host=127.0.0.1 dbname=master user=postgres port=5432';
nodo 2 admin conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432';
try { create set (id =1 ,origin =1 , comment ='Set for public'); } on error { echo 'Não foi possível criar set1'; exit 1;}
set add table (set id =1 , origin =1, id =1, full qualificado name ='public.rep_table1', comment ='Table action with primary key');
_eof_
$./create-set.sh
4. Para iniciar os daemons do Slon, use o script customizado que vem junto com o tarbal de origem em “/tools” local “start_slon.sh”. Modifique o script alterando os locais dos arquivos .conf para scripts de inicialização mestre/escravo. Este script dará flexibilidade para usar e rastrear todo o processo do slon com a ajuda dos PID's mencionados no arquivo .conf.
Uso:./master_start_slon.sh [start|stop|status]
-bash-4.1$ ./master_start_slon.sh start
-bash-4.1$ ./slave_start_slon.sh start
Saída de STATUS de amostra:
-bash-4.1$ ./master_start_slon.sh status
---------- -------
Arquivo de configuração do Slony:/opt/PostgreSQL/9.1/slony_scripts/bash_slony/master_slon.conf
Slony Bin Path:/opt/PostgreSQL/9.1/bin
Slony Status de execução:Em execução...
Slony Running (M)PID:28487
---------------------
4. Assine o conjunto.
#!/bin/bash
# Subscribe Set (subscribe-set.sh)
slonik <<_eof_
cluster name =myrep;
node 1 admin conninfo='host=127.0.0.1 dbname=master user=postgres port=5432';
node 2 admin conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432';
tente { subscribe set (id =1, provider =1 , receiver =2, forward =yes, omit copy =false); } no erro { saída 1; } echo 'Nós inscritos para definir 1';
_eof_
$./subscribe-set.sh
Agora seu banco de dados escravo terá dados replicados na tabela “rep_table”.
Esses dois métodos ajudarão a entender a configuração básica da replicação slony. Estará de volta com conceitos slony mais avançados.