Está en la página 1de 7

Replica de base de datos en PostgreSQL

Saludos, en esta oportunidad veremos el tema de replicacin de datos en PostgreSQL, para


ello definamos algunos conceptos:

Nodo.- Base de datos que se encuentra envuelta en el proceso de replicacin entre


los principales tenemos: nodo origen y nodo suscriptor.

Replicacin.- Proceso por el cual se desea mantener y copiar los datos de una base
de datos de manera que estos datos son transportados y son almacenados.

Replicacin maestro.- Se encarga de transferir las modificaciones de forma


asncrona a los nodos suscriptores.

Software
El software que utilizaremos en esta oportunidad es Slony-I para windows, el cual permite
la replicacin basada en triggers de forma asncrona. Utiliza un simple master para mltipes
esclavos (nodos suscriptores).

Cada tabla o secuencia en el master podra ser replicada va triggers remotos a los esclavos.
Actulizaciones son realizadas en la base de datos y luegos son replicadas mediante eventos.

Una replicacin basada en triggers usa on insert, on update, on delete en las tablas para
mantener la replicacin entre el nodo master y esclavo.

Limitaciones

o Tablas deben de ser primarias o nicas.

o Solo tablas y secuencias son permitidas en replicacin.

o Base de datos esclavas no pueden ser modificadas.

Ventajas

o Usando Slony-I podemos actualizar postgres de una versin a otra sin


tiempo muerto.

Desventajas

o No detecta fallo en la red.

o No se permiten usar cambios de DDL en la replicacin de tablas mientras el


servicio de Slony-I esta ejecutandose.
A continuacin se muestran otras opciones de replicacin a tener en cuenta:

Descargar slony desde: http://slony.info/ para windows, en linux tiene otro proceso que
espero tambin ponerlo en otro post.

Importante es siempre tener en cuenta la


documentacin: http://slony.info/documentation/2.0/index.html

Topologa de red (ejemplo)

Nodo maestro (192.168.1.34)


Nodo esclavo (192.168.1.63)

Instalacin y configuracin
1. Instalar Slony-I en el nodo maestro y esclavo, para esto lo podemos hacer desde el Stack
Builder de PostgreSQL.
2. Configurar el fichero pg_hba.conf del nodo maestro y esclavo aadiendo la siguiente
informacin:
#maestro
host all all 192.168.1.34/32 md5
#esclavo
host all all 192.168.1.63/32 md5

3. Seleccionar una base de datos de prueba yo utilizare la siguiente: HR.backup


4. Indicamos al nodo maestro y esclavo la ruta del software Slony, En PgAddmin Click en
men Archivo->Options, luego en la pestaa General, llenamos el campo Slony-I path con:
5. Configurar los puertos habilitados en el firewall de windows excepciones a los puertos
de base de datos 5432.
6. En el nodo maestro crear un script que nos digan las tablas de la base de datos que
queremos replicar:
#--
# define the namespace the replication system uses in our example it is
# slony_example
#--
cluster name = slony_example;

#--
# admin conninfo's are used by slonik to connect to the nodes one for
each
# node on each side of the cluster, the syntax is that of PQconnectdb in
# the C-API - replace the parameters which are appropriate for your setup
#
# this section tells slonik how to connect to the various nodes when
running
# this script.
# --

node 1 admin conninfo = 'dbname=hr host=192.168.1.34 user=postgres


password= admin';
node 2 admin conninfo = 'dbname=hr host=192.168.1.63 user=postgres
password= admin';

#--
# init the first node. Its id MUST be 1. This creates the schema
# _$CLUSTERNAME containing all replication system specific database
# objects.

#--
init cluster ( id=1, comment = 'Nodo Maestro');

#--
# this is an example of how to work around a table that has no primary
key
# and is based on an example by Robert Treat. The history table referred
to
# is one of the tables being replicated.
#
# Because the history table does not have a primary key or other unique
# constraint that could be used to identify a row, we need to add one.
# The following command adds a bigint column named
# _Slony-I_$CLUSTERNAME_rowID to the table. It will have a default value
# of nextval('_$CLUSTERNAME.s1_rowid_seq'), and have UNIQUE and NOT NULL
# constraints applied. All existing rows will be initialized with a
# number
#--
# Traduccin: Esto solo es necesario usarlo si tienes una tabla que no
tenga una llave primaria, procura hacer un buen diseo en tu base de
datos.

#table add key (node id = 1, fully qualified name =


'public.mi_tabla_sin_llave_primaria');

#--
# Slony-I organizes tables into sets. The smallest unit a node can
# subscribe is a set. The following commands create one set containing
# all tables to be replicated. Tables not named here will not be
replicated.
# The master or origin of the set is node 1. Note that the second id must
be
# incremented for each table added.
#--

create set (id=1, origin=1, comment='aqui van todas mis tablas');

set add table (set id=1, origin=1, id=1, fully qualified name =
'public.employees',comment='mi tabla empleado');
set add table (set id=1, origin=1, id=2, fully qualified name =
'public.departments',comment='mi tabla departamento');

#--
# Create the second node (the slave) tell the 2 nodes how to connect to
# each other and how they should listen for events.
# we have to repeat the conninfo detils here, because these details are
written into
# the slony database.
#--

store node (id=2, comment = 'Nodo Esclavo');


store path (server = 1, client = 2, conninfo = 'dbname=hr
host=192.168.1.34 user=postgres password= admin');
store path (server = 2, client = 1, conninfo = 'dbname=hr
host=192.168.1.63 user=postgres password= admin');

store listen (origin=1, provider = 1, receiver =2);


store listen (origin=2, provider = 2, receiver =1);

#########################################################################
#############

7. Luego de creado copiar este scripts a c:\Program Files\PostgreSQL\8.3\bin con el


nombre maestro.txt
8. Crear el el nodo esclavo el siguiente script para luego guardarlo en c:\Program
Files\PostgreSQL\8.3\bin con el nombre esclavo.txt como sigue:
cluster name = slony_example;

node 1 admin conninfo = 'dbname=hr host=192.168.1.34 user=postgres


password= admin';
node 2 admin conninfo = 'dbname=hr host=192.168.1.63 user=postgres
password= admin';

subscribe set (id=1, provider=1,receiver=2,forward=yes);

9. En el nodo maestro y en lnea de comando estando en el directorio c:\Program


Files\PostgreSQL\8.3\bin ejecutar:

# slonik maestro.txt

Si todo sale bien no debers ningn mensaje de error en consola de windows como
resultado de ejecutar la sentencia anterior y poder ver configurado slony en el nodo
maestro.

Ahora el comando tambin debe de haber creado el cluster en el nodo esclavo, para ello
verificamos:
10. Desde el nodo subscriptor (esclavo) y en el directorio c:\Program
Files\PostgreSQL\8.3\bin ejecutar:

# slonik esclavo.txt

Si hemos tenido xito no deberemos tener ningn mensaje de error en pantalla.

11. En el nodo maestro y en lnea de comando estando en el directorio c:\Program


Files\PostgreSQL\8.3\bin ejecutar:

# slon slony_example "dbname=hr user=postgres password= admin"

Esta lnea me permite iniciar la replicacin en el maestro.

12. En el nodo esclavo y en lnea de comando estando en el directorio c:\Program


Files\PostgreSQL\8.3\bin ejecutar:

# slon slony_example "dbname=hr user=postgres password= admin"

Esta lnea me permite iniciar la replicacin en el nodo esclavo.

Nota: las consolas abiertas tanto en el paso 11 y 12 no debern cerrarse.

Pruebas
En el nodo maestro abrir la base de datos HR e ingresar un registro a la tabla employees
como sigue:
Verificamos en el esclavo:

Terminamos, espero que les sirva. ;)

También podría gustarte