PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Configurazione semplice della replica Slony-I.

Sopra è mostrata una panoramica della replica asincrona Slony-I in breve. Per ulteriori informazioni, la documentazione Slony-I è la tua migliore amica :).

Cominciamo con i metodi di replica, nel metodo perltools, è necessario configurare slony al momento dell'installazione dei sorgenti per abilitare gli script perl integrati. Questi script iniziano con "SLONIK_" e sono progettati per svolgere attività amministrative di replica.

La mia demo per due metodi shell (slonik) e Perl è su Localhost Single instance (5432) con due database Master e Slave che replicano una tabella "rep_table". Per la replica, master/slave deve contenere la stessa struttura della tabella. Se hai molte tabelle, usa l'opzione di dump della struttura pg_dump/pg_restore. Dato che sto replicando una tabella, ho appena creato la stessa su Master/Slave.
Nota:imposta variabili di ambiente come PGDATA,PGPORT,PGHOST,PGPASSWORD e PGUSER.

Installazione sorgente:

Download the Slony-I 2.1 source(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
// Exclude --with-perltools if not needed
# make
# make install

Configurazione di base su Master/Slave

createdb -p 5432 master
createdb -p 5432 slave

psql -p 5432 -d master -c "create table rep_table(id int primary key);"
psql -p 5432 -d slave -c "create table rep_table(id int primary key);"

Insert some data on master to replicate to slave
psql -p 5432 -d master -c "insert into rep_table values(generate_series(1,10));"

Metodo 1:–con-perltools :

1. Crea su un file .conf standard, con informazioni come Posizione del registro, No. di nodi, Insieme di tabelle ecc.,

$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,],
},
};

Inizializza, Crea set e Sottoscrivi set, queste sono le tre fasi della replica slony. Per ogni fase, gli script perl “slonik_” vengono creati nella posizione menzionata al momento dell'installazione del sorgente con l'opzione “–with-perltools”. Nel mio caso è "/opt/PostgreSQL/9.1/bin". Sopra il file CONF viene utilizzato in tutte le fasi.

2. Inizializzare il cluster. Qui slonik, verifica in modo incrociato la connessione dei nodi.

cd /opt/PostgreSQL/9.1/bin
./slonik_init_cluster -c slon.conf
./slonik_init_cluster -c slon.conf| ./slonik

3. Crea un set, indica quale set di tabelle replicare dal Nodo 1 al Nodo 2.

./slonik_create_set -c slon.conf 1 
./slonik_create_set -c slon.conf 1|./slonik

4. Avvia i demoni Slon. Ogni nodo avrà due processi slon per portare il lavoro. Ogni processo di slon del nodo dovrebbe essere avviato.

./slon_start -c slon.conf 1
./slon_start -c slon.conf 2

5. Subscribe Set, da qui slony mantiene la coerenza dei dati tra due nodi consentendo Master per tutti i DML e negandoli su Slave.

./slonik_subscribe_set -c slon.conf 1 2 
./slonik_subscribe_set -c slon.conf 1 2|./slonik

Dopo i passaggi precedenti ora il tuo slave avrà i dati replicati.

Metodo 2:con script standard:

Nei metodi di script standard, ci sono molti modi per implementare, ma per capire chiaramente ho diviso come Perl abbiamo fatto in precedenza come Initialize, create-set &Subscribe set. Tutti gli script sono vincolati con il comando SLONICA.

1. Creare due file .conf per il nodo Master e Slave.

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. Inizializza il cluster.

#!/bin/bash
# Initialize Cluster (init_cluster.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';

#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 'Stored all nodes in the slony catalogs';
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. Crea un set.

#!/bin/bash
# Create Set for set of tables (create-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';

try { create set (id = 1 ,origin = 1 , comment = 'Set for public'); } on error { echo 'Could not create set1'; exit 1;}

set add table (set id = 1 , origin = 1, id = 1, full qualified name = 'public.rep_table1', comment = 'Table action with primary key');
_eof_

$./create-set.sh

4. Per avviare i demoni Slon, usa lo script personalizzato che viene fornito con il tarbal di origine nella posizione "/tools" "start_slon.sh". Modificare lo script modificando le posizioni dei file .conf per gli script di avvio master/slave. Questo script darà flessibilità per utilizzare e tenere traccia di tutti i processi slon con l'aiuto dei PID menzionati nel file .conf.

Usage: ./master_start_slon.sh [start|stop|status]

-bash-4.1$ ./master_start_slon.sh start
-bash-4.1$ ./slave_start_slon.sh start

Sample STATUS output:

-bash-4.1$ ./master_start_slon.sh status
---------------------
Slony Config File : /opt/PostgreSQL/9.1/slony_scripts/bash_slony/master_slon.conf
Slony Bin Path : /opt/PostgreSQL/9.1/bin
Slony Running Status : Running...
Slony Running (M)PID : 28487
---------------------

4. Sottoscrivi il set.

#!/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';

try { subscribe set (id = 1, provider = 1 , receiver = 2, forward = yes, omit copy = false); } on error { exit 1; } echo 'Subscribed nodes to set 1';
_eof_

$./subscribe-set.sh

Ora il tuo database slave avrà i dati replicati nella tabella "rep_table".
Questi due metodi aiuteranno a comprendere l'impostazione di base della replica slony. Torneremo con concetti sciocco più avanzati.