PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Configuration simple de la réplication Slony-I.

Ci-dessus, un aperçu de la réplication asynchrone Slony-I en bref. Pour plus d'informations, la documentation Slony-I est votre meilleure amie :).

Commençons par les méthodes de réplication, dans la méthode perltools, vous devez configurer slony au moment de l'installation de la source pour activer les scripts perl intégrés. Ces scripts commencent par "SLONIK_" et sont conçus pour effectuer des tâches administratives de réplication.

Ma démo pour deux méthodes shell (slonik) &Perl est sur Localhost Single instance (5432) avec deux bases de données Master &Slave répliquant une table "rep_table". Pour la réplication, maître/esclave doit contenir la même structure de table. Si vous avez de nombreuses tables, utilisez l'option de vidage de structure pg_dump/pg_restore. Depuis que je réplique une table, je viens de créer la même sur maître/esclave.
Remarque :Définissez des variables d'environnement telles que PGDATA, PGPORT, PGHOST, PGPASSWORD et PGUSER.

Installation source :

Télécharger le source 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
// Exclure --with-perltools si non nécessaire
# make
# make installer

Configuration de base sur Maître/Esclave

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);"

Insérez des données sur le maître à répliquer sur l'esclave
psql -p 5432 -d master - c "insert into rep_table values(generate_series(1,10));"

Méthode 1 :–with-perltools :

1. Créer sur un fichier .conf standard, avec des informations telles que l'emplacement du journal, le nombre de nœuds, l'ensemble de tables, etc.

$CLUSTER_NAME ='monrep';
$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,],
},
} ;

Initialize, Create-set &subscribe-set, ce sont les trois phases de la réplication slony. Pour chaque phase, les scripts perl « slonik_ » sont créés à l'emplacement mentionné lors de l'installation des sources avec l'option « –with-perltools ». Dans mon cas, c'est "/opt/PostgreSQL/9.1/bin". Le fichier CONF ci-dessus est utilisé dans toutes les phases.

2. Initialisez le cluster. Ici slonik, recoupe la connexion des nœuds.

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

3. Créer un ensemble, c'est-à-dire quel ensemble de tables répliquer du nœud 1 au nœud 2.

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

4. Démarrez les démons Slon. Chaque nœud aura deux processus slon pour effectuer le travail. Chaque processus slon de nœud doit être démarré.

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

5. Abonnez-vous, à partir de là, slony maintient la cohérence des données entre deux nœuds en autorisant le maître pour tous les DML et en les refusant sur l'esclave.

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

Après les étapes ci-dessus, votre esclave aura maintenant des données répliquées.

Méthode 2 :Avec des scripts standards :

Dans les méthodes de script standard, il existe de nombreuses façons d'implémenter, mais pour bien comprendre, j'ai divisé comme Perl nous l'avons fait ci-dessus comme Initialize, create-set &subscribe set. Tous les scripts sont liés avec la commande SLONIK.

1. Créez deux fichiers .conf pour le nœud maître et esclave.

vi master_slon.conf
cluster_name=monrep
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=monrep
pid_file='/opt/PostgreSQL/9.1/data/slave_slon.pid'
conn_info=' host=localhost dbname=slave1 user=postgres port=5432'

2. Initialisez le 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';
nœud 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 'Stocké tous les nœuds dans les catalogues 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. Créez un ensemble.

#!/bin/bash
# Créer un ensemble pour un ensemble de tables (create-set.sh)

slonik <<_eof_
cluster name =myrep;
noeud 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 'Impossible de créer set1'; exit 1;}

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

$./create-set.sh

4. Pour démarrer les démons Slon, utilisez un script personnalisé fourni avec le tarbal source sous "/tools" emplacement "start_slon.sh". Modifiez le script en changeant les emplacements des fichiers .conf pour les scripts de démarrage maître/esclave. Ce script donnera la flexibilité d'utiliser et de suivre tous les processus slon à l'aide des PID mentionnés dans le fichier .conf.

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

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

Exemple de sortie STATUS :

-bash-4.1$ ./master_start_slon.sh status
-------------- -------
Fichier de configuration Slony :/opt/PostgreSQL/9.1/slony_scripts/bash_slony/master_slon.conf
Chemin de la corbeille Slony :/opt/PostgreSQL/9.1/bin
Slony Statut d'exécution :En cours d'exécution...
Slony Running (M)PID :28487
---------------------

4. Abonnez-vous ensemble.

#!/bin/bash
# Ensemble d'abonnement (subscribe-set.sh)

slonik <<_eof_
nom du cluster =myrep;
nœud 1 admin conninfo='host=127.0.0.1 dbname=master user=postgres port=5432';
nœud 2 admin conninfo='host=127.0.0.1 dbname=slave1 user=postgres port=5432';

essayez { subscribe set (id =1, provider =1 , receiver =2, forward =yes, omit copy =false); } en cas d'erreur { sortie 1 ; } echo 'Nœuds abonnés à l'ensemble 1';
_eof_

$./subscribe-set.sh

Maintenant, votre base de données esclave aura des données répliquées dans la table "rep_table".
Ces deux méthodes vous aideront à comprendre la configuration de base de la réplication slony. Sera de retour avec des concepts slony plus avancés.