sql >> Base de Datos >  >> RDS >> PostgreSQL

Configuración simple de replicación de Slony-I.

Arriba se muestra una descripción general de la replicación asincrónica de Slony-I en resumen. Para más información, la documentación de Slony-I es tu mejor amigo :).

Comencemos con los métodos de replicación, en el método perltools, debe configurar slony en el momento de la instalación de la fuente para habilitar los scripts perl integrados. Estos scripts comienzan con "SLONIK_" y están diseñados para realizar tareas administrativas de replicación.

Mi demostración para dos métodos shell (slonik) y Perl está en una instancia única de Localhost (5432) con dos bases de datos Master y Slave replicando una tabla "rep_table". Para la replicación, maestro/esclavo debe tener la misma estructura de tabla. Si tiene muchas tablas, use la opción de volcado de estructura pg_dump/pg_restore. Dado que estoy replicando una tabla, acabo de crear la misma en Maestro/Esclavo.
Nota:Establezca variables de entorno como PGDATA,PGPORT,PGHOST,PGPASSWORD y PGUSER.

Instalación de origen:

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

Configuración básica en Maestro/Esclavo

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

Método 1:–con-perltools:

1. Cree en un archivo .conf estándar, con información como la ubicación del registro, el número de nodos, el conjunto de tablas, 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, crear conjunto y suscribir conjunto, estas son las tres fases de la replicación lenta. Para cada fase, se crean secuencias de comandos perl "slonik_" en la ubicación mencionada en el momento de la instalación del código fuente con la opción "-with-perltools". En mi caso es “/opt/PostgreSQL/9.1/bin”. El archivo CONF anterior se utiliza en todas las fases.

2. Inicialice el clúster. Aquí slonik, verifica la conexión de los nodos.

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

3. Crear un conjunto, significa qué conjunto de tablas replicar del Nodo 1 al Nodo 2.

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

4. Inicie los demonios Slon. Cada nodo tendrá dos procesos de slon para llevar a cabo el trabajo. Se debe iniciar cada proceso de slon de nodo.

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

5. Conjunto de suscripción, desde aquí slony mantiene la consistencia de los datos entre dos nodos al permitir Master para todos los DML y negarlos en Slave.

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

Después de los pasos anteriores, ahora su esclavo tendrá datos replicados.

Método 2:con scripts estándar:

En los métodos de secuencia de comandos estándar, hay muchas formas de implementar, pero para entender claramente, he dividido lo mismo que Perl que hicimos anteriormente, como Inicializar, crear conjunto y conjunto de suscripción. Todos los scripts están enlazados con el comando SLONIK.

1. Cree dos archivos .conf para el nodo maestro y esclavo.

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. Inicialice el clúster.

#!/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 conjunto.

#!/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. Para iniciar los demonios Slon, use un script personalizado que viene junto con el código fuente en la ubicación "/herramientas" "start_slon.sh". Modifique el script cambiando las ubicaciones de los archivos .conf para los scripts de inicio maestro/esclavo. Este script brindará flexibilidad para usar y rastrear todo el proceso de slon con la ayuda de los PID mencionados en el archivo .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. Conjunto de suscripción.

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

Ahora su base de datos esclava tendrá datos replicados en la tabla "rep_table".
Estos dos métodos ayudarán a comprender la configuración básica de la replicación slony. Volveremos con conceptos de slony más avanzados.