sábado, 29 de enero de 2011

Replicación PostgreSQL - Slony I

PostgreSQL es un  sistema de gestión de base de datos relacional orientada a objetos y libre, publicado bajo la licencia BSD.
Es un software que nos permite hacer replicaciones maestro/esclavo asíncrono, realizando actualizaciones en cascada...
UNIVERSIDAD DE EL SALVADOR FMOcc
Base de datos
Replicación de base de datos PostgreSQL Slony I en Windows

Ing. Alexander Calderón

Alumnos
Br. García Cáceres, Gilbert Alfredo
Br. Gómez Hernández. Carlos Miguel Angel
Br. Gómez García, Wil Edely
Br. Juárez Ramírez, Iris del Carmen

  • PostgreSQL
    PostgreSQL es un sistema de gestión de base de datos relacional orientada a objetos y libre, publicado bajo la licencia BSD.
  • Slony I
    Es un software que nos permite hacer replicaciones maestro/esclavo asíncrono, realizando actualizaciones en cascada.
  • Slony-I es un maestro "a varios esclavos" sistema de replicación en cascada de apoyo (por ejemplo - un nodo puede alimentar a otro nodo que se alimenta de otro nodo) y de conmutación por error.
    El panorama para el desarrollo de Slony-I es que es un esclavo de replicación del sistema principal que incluye todas las características y las capacidades necesarias para replicar bases de datos de gran tamaño a un número razonablemente limitado de los sistemas esclavistas.
    Slony-I es un sistema diseñado para su uso en centros de datos y sitios de respaldo, en el modo normal de operación es que todos los nodos están disponibles.

  • Replicación: Es el proceso por el cual se desea mantener y copiar los datos de una base de datos, de esta manera los datos son transportados y son totalmente almacenados.
  • Cluster: Es el conjunto de instancias de bases de datos PostgreSQL que están envueltos en la replicación.
  • Nodo: Se le llama así a cada una de las bases de datos envueltas en la replicación
    Es la base de datos que se encuentra envuelta en el proceso de la replicación
    Entre los principales nodos tenemos:
    1.Nodo Origen
    2.Nodo Suscriptor

(ver video de los conceptos)


TOPOLOGIA DE LA RED




Configuración para la replicación
NOTA: Instalar PostgreSQL y el software Slony I (stack builder)




1. Crear la base de datos que se quiere replicar (en ambas:maestran y esclava), deben tener la misma estructura

2. Configurar el archivo pg_hba
C:\Program Files \PostgreSQL \8.4\data\pg_hba.conf

Agregar las siguientes líneas

#Maestro
host all all 192.168.1.2/24 md5

#Esclavo
host all all 192.168.1.10/24 md5

(Esto se realizará para todas las maquinas donde se desea replicar)

3. Abrir el gestor de PostgreSQL y crear una base de datos (para este ejemplo se llamará EMPRESA)

4. Asignar la ruta del slony
Menu Archivo/Opciones/Seleccionar la ruta de slony I

C:\Archivos de Programa\PostgreSQL\8.4\Share\

5. Agregar puerto para PostgreSQL

• Panel de control
• Firewall de Windows
• Configuración avanzada (en Windows XP lo siguiente es seleccionar la ficha excepción y agregar el puerto (nombre postgres y número 5432)
• Reglas de entrada
• Nueva Regla
Clic en puerto y siguiente:
Clic en protocolo TCP, número de puerto 5432 y siguiente:
Permitir conexión y siguiente:
Seleccionar Dominio, Privado y Público
Digitar el nombre de la excepción y clic en finalizar

6. Crear un script para el nodo maestro (Maestro.txt) en la ruta:
C:\Archivos de Programas\PostgreSQL\8.4\bin\

------------------------------------------------------------
cluster name = slony_empresa;

node 1 admin conninfo = 'dbname = EMPRESA host = 192.168.1.2 user = postgres password = alfredo';
node 2 admin conninfo = 'dbname = EMPRESA host = 192.168.1.10 user = postgres password = alfredo';

init cluster (id=1, comment = 'nodo maestro');

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.empleado', comment= 'mi tabla empleado');

store node (id = 2, comment = 'nodo esclavo', EVENT NODE = 1);
store path (server = 1, client = 2, conninfo = 'dbname = EMPRESA host = 192.168.1.2 user = postgres password = alfredo');
store path (server = 2, client = 1, conninfo = 'dbname = EMPRESA host = 192.168.1.10 user = postgres password = alfredo');
store listen (origin = 1, provider = 1, receiver = 2);
store listen (origin = 2, provider= 2, receiver = 1);

7. Crear un script para el nodo esclavo (suscriptor.txt) en la ruta:
C:\Archivos de Programas\PostgreSQL\8.4\bin\

cluster name = slony_empresa;

node 1 admin conninfo = 'dbname= EMPRESA host = 192.168.1.2 user = postgres password = alfredo';

node 2 admin conninfo = 'dbname= EMPRESA host = 192.168.1.10 user = postgres password = alfredo';

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

8. Ejecutar desde la consola de Windows en la maquina maestra:
C:\Archivos de Programas\PostgreSQL\8.4\bin\slonik maestra.txt

9. Ejecutar desde la consola de Windows en la maquina esclava:
C:\Archivos de Programas\PostgreSQL\8.4\bin\slonik suscriptor.txt

10. Ejecutar desde la consola de Windows en la maquina maestra y esclava:
C:\Archivos de Programas\PostgreSQL\8.4\bin\slon slony_empresa “dbname = EMPRESA user = postgres password = alfredo”

A partir de este momento los nodos ya están replicando, y no se deben cerrar las consolas.
Ahora ya se puede ver que se está replicando en las máquinas y podemos agregar tuplas, modificar o borrar y los cambios se van a ver reflejados en los nodos esclavos

12 comentarios:

Alexander Calderón dijo...

Excelente aporte, debarian de subir una foto del grupo para que las nuevas generaciones los conozcan.

Gustavo Benitez dijo...

Señores tengo este error al ejecutar slonik suscriptor.txt....

NOTICE: subscribe set: omit_copy=f
NOTICE: subscribe set: omit_copy=f
CONTEXT: SQL statement "SELECT "_holly".subscribeSet_int( $1 , $2 , $3 , $4 , $5 )"
PL/pgSQL function "subscribeset" line 68 at PERFORM

Agradezco puedan ayudarme...
Gustavo Benitez

Ramon dijo...

Hola, tengo el mismo problema de Gustavo Benitez, yo probe el tutorial tanto en windows como en linux, mi version del postgres es la 8.4 y para slony es la 2.0.4, para instalar el slony (tanto en linux como en windows) utilizo el stackbuilder. Todo parece ir bien, las máquinas se conectan ejecuto el slonik maestro y no marca errores pero cuando ejecuto el slonik suscriptor.txt me marca el siguiente error, ya busque por varios sitios pero la verdad es que ya no tengo idea, espero puedan ayudarme.

Saludos

NOTICE: subscribe set: omit_copy=f
NOTICE: subscribe set: omit_copy=f
CONTEXT: SQL statement "SELECT "_holly".subscribeSet_int( $1 , $2 , $3 , $4 , $5 )"
PL/pgSQL function "subscribeset" line 68 at PERFORM

berserker dijo...

verifica en la linea
set add table (set id=1, origin=1, id=1, fully qualified name = 'public.empleado', comment= 'mi tabla empleado');
que el id debes ir incrementadolo por cada tabla

Tecnologia dijo...

buenas tardes soy Estuardo Godínez
si alguien me puede ayudar se lo agradeceria, el error es el siguiente:
fatal: database "EMPRESA" does not exist.
ERROR: no admin conninfo for node 6635752.
gracias por la atención, y gracias por las posibles soluciones a este error..

Unknown dijo...

donde puedo consegir el slony-1 para poder hacer la replicacion lo necesito urgente gracias

SatanCloS dijo...

Sr's necesitro hacer una replica con postgres 8.3.7, pero no logro encontrar el slony para esta version si alguien lo tuviera por favor de publicar el enlace, saludos

Jose dijo...

Hola yo tengo este escenario tengo 3 nodos uno en cada ciudad y un nodo central en otra ciudad lo que necesito es que estos tres repliquen al central y este junte la info de los 3 se puede podrias dar un ejemplo como se podria?

este es mi mail jvenegasperu@gmail.com

Unknown dijo...

Rubyrep (replicación de base de datos que no lastima)

Hola, quería aportar contenido sobre una interesante herramienta para implementar replicación de base de datos (para postgres y mysql). Me tope con ésta herramienta hace unos días, cuando estaba buscado información/soporte para utilizar Slony-I (herramienta de replicación para PostgreSQL).

Resulta ser una solución muy buena, fácil de implementar y relativamente simple. (en comparación con Slony-I). Está escrita en JRuby, lo cual la hace independiente de la plataforma (donde corra Java, lo hará ésta herramienta).

Características principales:
- open-source
- Replicación asincrónica, Master-Maste, Master-Slave.
- Muy fácil de utilizar
- Independiente del motor de base de datos (actualmente soporta Postgresql y MySql).
- Puede escanear dos bases de datos en busca de diferencias.
- Puede sincronizar dos bases de datos.
- Puede replicar continuamente entre dos bases de datos.

En fin, dejo el link hacía la página web de la herramienta. Estaría muy bueno que se pueda compartir, es un proyecto open-source, y por lo tanto, es LIBRE y necesita la colaboración de todos.

http://www.rubyrep.org
http://jruby.org

Saludos,
Matias Miguez

Unknown dijo...

HOLA PODRIAN AYUDARME CON UN PROBLEMA ES QUE AL EJECUTAR DESDE CMD EL slonik maestro.txt ME ARROJA UN ERROR DE RUNTIME ERROR r6034 ESTUVE CHECANDO EN INTERNET Y ME DECIAN QUE ACTUALIZARA MI VISUAL ESTUDIO C++ Y YA LO HICE PERO AUN SIGUE ESTE PROBLEMA SI ALGUIEN SABE DE ALGUNA SOLUCION PORFAS GRACIAS...

Yelopez dijo...

Hola que tal? podrían publicar replicación con slony para linux?? Gracias..

Eduardo Piombino dijo...

@PhoenixDark Hola, seguramente estes tratando de usar el slony que viene con el PostgreSQL 9.0. A mi me paso lo mismo, no encontre manera de que corra ese binario. El primer problema era una DLL faltante perteneciente al VC++ 2008 que viene con el runtime, pero una vez que la encuentra, pasas a ese error. Ese error se solucionaria recompilando el slonik e incluyendo un manifest (segun lo que pude leer). Te recomendaria pasar al slony que viene con PostgreSQL 9.3, que parece funcionar bien contra bases 9.3, pero contra bases 9.0 me encuentro con que el server no tiene las dlls que slony necesita. Deja bastante que desear el soporte de slony para windows. Ah, el pgAdmin en su ultima version, tampoco funciona con la nueva version de Slony, porque los sqls cambiaron de nombre. En definitiva, una verdadera pesadilla para windows. El tutorial parece estar basado en una version estable de un momento en particular (8.4 se llega a ver como directorio base de instalacion del slonik y slon).

Espero te sea util mi experiencia.
Saludos.