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

Simpel Slony-I-replikeringsopsætning.

Ovenfor er vist en oversigt over Slony-I Asynkron replikering kort fortalt. For mere information er Slony-I-dokumentationen din bedste ven :).

Lad os starte med replikeringsmetoder, i perltools-metoden skal du konfigurere slony på tidspunktet for kildeinstallation for at aktivere indbyggede perl-scripts. Disse scripts starter med "SLONIK_", og de er designet til at udføre administrative replikeringsopgaver.

Min demo for to metoder shell(slonik) &Perl er på Localhost Single instans(5432) med to databaser Master &Slave, der replikerer en tabel "rep_table". Til replikering skal master/slave have samme tabelstruktur. Hvis du har mange tabeller, brug pg_dump/pg_restore struktur dump mulighed. Da jeg replikerer en tabel, har jeg lige oprettet den samme på Master/Slave.
Bemærk:Indstil miljøvariabler som PGDATA,PGPORT,PGHOST,PGPASSWORD &PGUSER.

Kildeinstallation:

Download Slony-I 2.1-kilden(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
// Ekskluder --with-perltools, hvis det ikke er nødvendigt
# make
# make installer

Grundlæggende opsætning på 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 "opret tabel rep_table(id int primær nøgle);"

Indsæt nogle data på master for at replikere til slave
psql -p 5432 -d master - c "indsæt i rep_table values(generate_series(1,10));"

Metode 1:–med-perltools :

1. Opret en standard .conf-fil med oplysninger som logplacering, antal noder, tabeller osv.,

$CLUSTER_NAME ='myrep';
$LOGDIR ='/opt/PostgreSQL/9.1/slonylogs';
$MASTERNODE =1;
$DEBUGLEVEL =2;

&add_node(node ​​=> 1,host => 'localhost',dbname => 'master',port => 5432,bruger => 'postgres',password => 'postgres');
&add_node (node ​​=> 2,host => 'localhost',dbname => 'slave',port => 5433,bruger => 'postgres',password => 'postgres');

$SLONY_SETS =
{
"set1" =>
{
"set_id" => 1,
"table_id" => 1,
"pkeyedtables" =>
[rep_table,],
},
};

Initialize, Create-set &subscribe-set, disse er de tre faser af slony replikering. For hver fase oprettes "slonik_" perl-scripts på det sted, der er nævnt på tidspunktet for kildeinstallation med muligheden "–with-perltools". I mit tilfælde er det "/opt/PostgreSQL/9.1/bin". Ovenstående CONF-fil bruges i alle faser.

2. Initialiser klyngen. Her slonik krydstjekker nodernes forbindelse.

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

3. Opret et sæt, betyder hvilket sæt tabeller, der skal replikeres fra node 1 til node 2.

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

4. Start Slon-dæmoner. Hver node vil have to slon-processer til at udføre arbejde. Hver node-slon-proces skal startes.

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

5. Subscribe Set, herfra opretholder slony datakonsistens mellem to noder ved at tillade Master for alle DML'er og nægte dem på Slave.

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

Efter ovenstående trin vil din slave nu have replikeret data.

Metode 2:Med standardscripts:

I Standard script-metoder er der mange måder at implementere på, men for at forstå klart har jeg delt det samme som Perl, vi gjorde ovenfor som Initialize, create-set &subscribe set. Alle scripts er bundet med SLONIK kommando.

1. Opret to .conf-filer til Master &Slave Node.

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. Initialiser klyngen.

#!/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 ='Primær node for slavepostgres');
butiksknude (id =2, hændelsesnode =1, kommentar ='Slaveknude for The Primary postgres');

#Indstilling af butiksstier ...
echo 'Gemmede alle noder i slørede kataloger';
butiksti(server =1, klient =2 , conninfo='host=127.0.0.1 dbname=master user=postgres port=5432');
butiksti(server =2, klient =1, conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432');
_eof_

$./init_cluster.sh

3. Opret et sæt.

#!/bin/bash
# Opret sæt til tabeller (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';

prøv { create set (id =1 ,origin =1 , comment ='Set for public'); } på fejl { echo 'Kunne ikke oprette sæt1'; exit 1;}

sæt tilføjelsestabel (sæt id =1, oprindelse =1, id =1, fuldt kvalificeret navn ='public.rep_table1', comment ='Tabelhandling med primærnøgle');
_eof_

$./create-set.sh

4. For at starte Slon-dæmoner, brug brugerdefineret script, som kommer sammen med kildens tarbal under "/tools"-placeringen "start_slon.sh". Rediger scriptet ved at ændre .conf-filplaceringer for Master/slave-startscripts. Dette script vil give fleksibilitet til at bruge og spore alle slon-processer ved hjælp af PID'er nævnt i .conf-filen.

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

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

Eksempel på 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 Løbestatus :Kører...
Slony Running (M)PID :28487
--------------------------

4. Abonner sæt.

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

prøv { subscribe set (id =1, provider =1, receiver =2, forward =ja, udelad kopi =falsk); } ved fejl { exit 1; } echo 'Subscribed nodes to set 1';
_eof_

$./subscribe-set.sh

Nu vil din slavedatabase have replikerede data i "rep_table"-tabellen.
Disse to metoder vil hjælpe med at forstå den grundlæggende opsætning af slony replikering. Vender tilbage med mere avancerede slony-koncepter.


  1. INSERT-sætningen er i konflikt med FOREIGN KEY-begrænsningen - SQL Server

  2. Vil UUID som primær nøgle i PostgreSQL give dårlig indeksydelse?

  3. MySQL/PHP-fejl:[2002] Kun én brug af hver socket-adresse (protokol/netværksadresse/port) er normalt tilladt

  4. MySql Transponer række til kolonne og kolonne til række