sábado, 3 de marzo de 2007

Instalación de Slony – I en Windows XP, Windows Server y Windows Vista

Hola, me llamo Sergio López Tosca, en la empresa en la que trabajo se implementó un sistema utilizando la base de datos PostgreSQL cuya información es sumamente importante, por lo que se necesita tener una copia de la base de datos en caso de que el servidor primario falle por cualquier motivo.

Buscando en la red, me topé con Slony, sin embargo no es la única herramienta para replicar una base de datos en Postgresql, existen muchos, pero leyendo comentarios de otros usuarios en distintos foros, encontré que la que se lleva el premio es Slony – I.

La ventaja que tenemos aquí es que el servidor primario manda las actualizaciones en tiempo real a la base de datos esclava y en caso de que falle el servidor primario, continuamos trabajando con la base de datos esclava.

A continuación, presento un tutorial que te va ayudar a instalar Slony – I en tus computadoras (Maestro – Esclavo)...


Pre – requisitos

- Haber instalado PostgreSQL 8.1 o superior, puedes bajarlo en http://www.postgresql.org/
- Bajar el software de Slony – I con instalación para Windows, lo puedes bajar de http://developer.pgadmin.org/~hiroshi/Slony-I/. Hay dos versiones de Slony –I, para la versión 8.1 y la 8.2. Baja la que corresponda a tu PostgreSQL.

1. Ejecuta el instalador de Slony – I y sigue las instrucciones.











































Regresa a C:\Program Files\PostgreSQL\8.2\bin> y pon el comando: Slon y debe salir algo como esto:




2. Abre el programa pgAdmin III dale doble clic a la base de datos que quieras replicar y vas a ver un icono que dice “replicación” selecciónalo, pon botón derecho del Mouse, luego "Nuevo Slony-I cluster" y vas a ver un cuadro que dice “No hay comandos de creación de Slony – I disponibles; sólo es posible …”



Bien, por el momento no podemos realizar ninguna replicación, es necesario decirle a nuestro pgAdmin III donde tenemos instalado nuestros archivos de Slony – I. Por lo tanto, para esto damos doble clic a Archivo -- > Opciones e introducimos la ruta que en este caso es: C:\Program Files\PostgreSQL\8.2\share y si regresamos al paso anterior vamos a ver algo como esto.



3. Ahora vamos a crear un script al cual se le introduce que tablas queremos replicar, se especifica quien será el nodo maestro y el nodo o nodos secundarios a los cuales queremos replicar nuestra información, etc...

Abre el bloc de notas, copia lo siguiente y modifica los parámetros de este script:


######################################################################################
#--
# 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=exampledb host=192.168.1.8 user=postgres password= postgres';
node 2 admin conninfo = 'dbname=exampledb host=192.168.1.9 user=postgres password= postgres';

#--
# 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
#--
# Traducción: Esto solo es necesario usarlo si tienes una tabla que no tenga una llave primaria, procura hacer un buen diseño 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.tabla1',
comment='mi tabla de tabla1');
set add table (set id=1, origin=1, id=2, fully qualified name = 'public.tabla2',
comment='mi tabla de tabla2');
#set add table (set id=1, origin=1, id=3, fully qualified name = 'public.mi_tabla_sin_llave_primaria', key = serial, comment='la tabla sin llave primaria');

#--
# 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=exampledb host=192.168.1.8 user=postgres password=postgres');
store path (server = 2, client = 1, conninfo='dbname=exampledb host=192.168.1.9 user=postgres password=postgres');
store listen (origin=1, provider = 1, receiver =2);
store listen (origin=2, provider = 2, receiver =1);

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

Nota: Los campos en rojo son los que debes modificar.

4. una vez creado tu script y haber modificado los parámetros correspondientes, guárdalo en C:\Program Files\PostgreSQL\8.2\bin>, yo lo guardé con el nombre maestro.txt, pero tu ponle el que quieras. Ahora, vamos a ejecutarlo como se muestra a continuación:


En la linea de comando y estando en el directorio C:\Program Files\PostgreSQL\8.2\bin> ejecuta:

- slonik maestro.txt

Si todo sale bien, debes de ver algo como esto:



En caso contrario, si ves algo como esto:



Verifica los archivos pg_hba.conf y postgresql.conf tanto de la computadora maestra como la esclava y comprueba que se comuniquen entre las dos. Yo asumo que previamente ya configuraste tu PostgreSQL e incluso que ya añadiste el puerto 5432 en el firewall de Windows, sino no te dejará conectar.


5. Ahora abre PgAdmin III en la computadora maestra, ve a la base de datos que vas a replicar y verás algo como esto:



Repite el paso 5 en la computadora que tendrá la base de datos esclava y verás que también añadió las instrucciones para la replica.

6. Ahora ve a la computadora que tendrá la base de datos esclava (Suscriptor). Vamos a crear el siguiente script, este script es para indicarle a que computadora se va a conectar.

Abre el bloc de notas, copia lo siguiente y modifica los parámetros de este script:

######################################################################################
CLUSTER NAME = slony_example;


node 1 admin conninfo = 'dbname=exampledb host=192.168.1.8 user= postgres password= postgres';

node 2 admin conninfo = 'dbname=exampledb host=192.168.1.9 user= postgres password= postgres';

SUBSCRIBE SET (ID = 1, PROVIDER = 1, RECEIVER = 2, FORWARD = YES);

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

Nota: Los campos en rojo son los que debes modificar.

Una vez creado tu script y habiendo modificado los parámetros correspondientes, guárdalo en C:\Program Files\PostgreSQL\8.2\bin>, yo lo guardé con el nombre de suscriptor.txt, pero tu ponle el nombre que quieras.

Ahora, vamos a ejecutarlo como se muestra a continuación:

En la linea de comando y estando en el directorio C:\Program Files\PostgreSQL\8.2\bin> ejecuta:

- slonik suscriptor.txt

y deberás ver algo como lo siguiente:



7. Ahora regresa a la computadora donde está la base de datos maestra, abre la línea de comandos y ejecuta lo siguiente en C:\Program Files\PostgreSQL\8.2\bin>:

slon slony_example "dbname= exampledb user=postgres" &


Nota: Los campos en rojo son los que debes modificar.



8. Perfecto, ahora repite este paso, pero en la computadora esclava:

slon slony_example "dbname= exampledb user=postgres" &

Nota: Los campos en rojo son los que debes modificar.

Deberás de ver algo como en la foto de arriba…

9. A partir de este momento la base de datos se están replicando a la computadora esclava, pero todavía no hemos acabado. Será molesto que cada vez que enciendas las computadoras tengas que introducir el comando para que se repliquen las bases de datos. Para esto, vamos a crear un servicio en Windows.

10. En Windows XP y en Windows Server con tan solo ir a la línea de comandos en C:\Program Files\PostgreSQL\8.2\bin> y ejecuta:

- slon –regservice

Con esto hemos creado el servicio, ve a Servicios de Windows y busca el servicio llamado Slony-I para verificar que todo se haya ejecutado correctamente, pero no lo actives.

11. Abre el bloc de notas, copia lo siguiente, modifícalo según tus parámetros y guardalo. Yo lo guardé con el nombre de slon.conf en C:\Program Files\PostgreSQL\8.2\bin>
Esto lo vas hacer tanto en el servidor esclavo con en el maestro.

######################################################################################
cluster_name = 'exampledb' conn_info = 'dbname=exampledb host=192.168.1.8 user=postgres password=postgres'

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

Nota: Los campos en rojo son los que debes modificar.

12. Prueba que el archivo slon.conf funcione correctamente, para esto lo que deberás hacer es en la linea de comandos C:\Program Files\PostgreSQL\8.2\bin> Ejecutar:

- slon –f slon.conf



Esto lo vas hacer en las dos computadoras y verifica que se estén replicando los datos. Deberás de ver algo como en la figura del punto 7.

13. Vuelve abrir la línea de comandos en C:\Program Files\PostgreSQL\8.2\bin>, pero cierra las ventanas donde se están replicando, ahora ejecuta el comando:

- slon -addengine slon.conf



Esto lo harás en las dos computadoras.

14. Abre los servicios de Windows, busca el que se llama “Slony-I”, ponle iniciar y LISTO! Tu base de dato se está replicando!.



Referencias:

- Configuring Slony-I on PostgreSQL/Win32
http://www.idep.org.uk/cgi-bin/blosxom.cgi/2006/
- Database Replication with Slony-I http://www.linuxjournal.com/article/7834
- Alpha testing Slony on win32 Crib Notes http://people.planetpostgresql.org/xzilla/index.php?/archives/200-Alpha-testing-Slony-on-win32-Crib-Notes.html