Powyżej pokazano w skrócie omówienie replikacji asynchronicznej Slony-I. Aby uzyskać więcej informacji, dokumentacja Slony-I jest Twoim najlepszym przyjacielem :).
Zacznijmy od metod replikacji, w metodzie perltools należy skonfigurować slony w czasie instalacji źródła, aby włączyć wbudowane skrypty perla. Skrypty te zaczynają się od „SLONIK_” i są przeznaczone do wykonywania zadań administracyjnych związanych z replikacją.
Moje demo dla dwóch metod shell(slonik) i Perl jest na Localhost Single instance(5432) z dwiema bazami danych Master i Slave replikujące jedną tabelę „rep_table”. W przypadku replikacji master/slave powinien posiadać taką samą strukturę tabeli. Jeśli masz wiele tabel, użyj opcji zrzutu struktury pg_dump/pg_restore. Ponieważ replikuję jedną tabelę, właśnie stworzyłem ją na Master/Slave.
Uwaga:Ustaw zmienne środowiskowe, takie jak PGDATA,PGPORT,PGHOST,PGPASSWORD i PGUSER.
Instalacja źródłowa:
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
Podstawowa konfiguracja na 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));"
Metoda 1:–with-perltools :
1. Utwórz na standardowym pliku .conf, z informacjami takimi jak lokalizacja dziennika, liczba węzłów, zestaw tabel itp.
$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,],
},
};
Zainicjuj, utwórz zestaw i zasubskrybuj zestaw, to są trzy fazy replikacji slony. Dla każdej fazy skrypty perla „slonik_” są tworzone w lokalizacji wymienionej podczas instalacji źródła z opcją „–with-perltools”. W moim przypadku jest to „/opt/PostgreSQL/9.1/bin”. Powyższy plik CONF jest używany we wszystkich fazach.
2. Zainicjuj klaster. Tutaj slonik sprawdza połączenie węzłów.
cd /opt/PostgreSQL/9.1/bin
./slonik_init_cluster -c slon.conf
./slonik_init_cluster -c slon.conf| ./slonik
3. Utwórz zestaw, czyli który zestaw tabel replikować z węzła 1 do węzła 2.
./slonik_create_set -c slon.conf 1
./slonik_create_set -c slon.conf 1|./slonik
4. Uruchom demony Slon. Każdy węzeł będzie miał dwa procesy slon do wykonania pracy. Każdy proces slon węzła powinien zostać uruchomiony.
./slon_start -c slon.conf 1
./slon_start -c slon.conf 2
5. Zestaw subskrypcji, stąd slony utrzymuje spójność danych między dwoma węzłami, zezwalając Master na wszystkie DML i odrzucając je na Slave.
./slonik_subscribe_set -c slon.conf 1 2
./slonik_subscribe_set -c slon.conf 1 2|./slonik
Po wykonaniu powyższych kroków teraz twój slave będzie miał zreplikowane dane.
Metoda 2:ze standardowymi skryptami:
W standardowych metodach skryptowych istnieje wiele sposobów implementacji, ale aby jasno zrozumieć, podzieliłem się tak samo jak Perl, który zrobiliśmy powyżej, np. Initialize, create-set &subscribe set. Wszystkie skrypty są powiązane z poleceniem SLONIK.
1. Utwórz dwa pliki .conf dla węzła Master i 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. Zainicjuj klaster.
#!/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. Stwórz zestaw.
#!/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. Aby uruchomić demony Slon, użyj niestandardowego skryptu, który jest dostarczany wraz z archiwum źródłowym w lokalizacji „/tools” „start_slon.sh”. Zmodyfikuj skrypt, zmieniając lokalizacje plików .conf dla skryptów uruchamiania Master/Slave. Ten skrypt zapewni elastyczność w użyciu i śledzeniu wszystkich procesów slon za pomocą PID wymienionych w pliku .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. Subskrybuj zestaw.
#!/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
Teraz twoja baza danych slave będzie zawierała zreplikowane dane w tabeli „rep_table”.
Te dwie metody pomogą zrozumieć podstawową konfigurację replikacji slony. Wrócimy z bardziej zaawansowanymi koncepcjami slony.