Ir al contenido principal

Replicación de base de datos en PostgreSQL[Tutorial]


Hola mi nombre es Camilo Soto, en este tutorial realizaremos la replicación de una base de datos utilizando el método de replicación maestro – esclavo con tres equipos.


¿Qué es la replicación de base de datos?


De forma general podemos definir la replicación de bases de datos como una de las estrategias usadas para la implementación de entornos de bases de datos distribuidas, que consiste en copiar instancias de bases de datos en múltiples bases de datos que se encuentren en otra ubicación, donde una base de datos es actualizada en varios lugares de forma simultánea.
Método maestro-esclavo

Prerrequisitos:

  1. En este tutorial usaremos dos equipos donde configuraremos una como nodo maestro y el otro como nodo esclavo.
  2. En este tutorial usaremos una máquina virtual para tener un total de dos nodos esclavos.
  3. Los equipos deben tener instalado el SMBD PostgreSQL 9.5.

Proceso de replicación:

Antes de comenzar con la replicación debemos identificar cual es la base de datos que replicaremos y designar cual será nodo maestro y cuales los nodos esclavos:
Nodo Maestro

Nodo esclavo 1

Nodo esclavo 2

Para este tutorial haremos una replicación completa de la siguiente base de datos:

BD secSalud


Configuración de red

lo primero que debemos hacer una vez identificado los nodos y la BD que replicaremos es configurara la red para que nuestros equipos se puedan “ver” entre ellos, como todos los equipos que usaremos en este tutorial tienen instalado una versión de Windows realizaremos los siguientes pasos para configurarlos en red:

Para ello iremos a panel de control en centro de redes y configuración de conexiones, daremos clic en cambiar la configuración del adaptador:

Luego damos clic derecho en el adaptador de red e ingresamos a las propiedades, señalaremos protocolo de internet versión 4 y daremos clic en el botón propiedades:

La configuración que usáremos para los nodos es la siguiente:
Nodo Maestro

Nodo Esclavo 1

Nodo Esclavo 2(máquina virtual)
Una vez configuradas las IPs de los equipos iremos de nuevo al panel de control, luego a sistema, en el apartado de configuración de nombre, dominio y grupo de trabajo y daremos clic en cambiar configuración:


En la ventana de propiedades de sistema nos situáremos en la pestaña de Nombre de equipo y daremos clic en el botón cambiar y usáremos la siguiente configuración:


Usaremos la siguiente configuración para cada nodo:
Nodo Esclavo 1 
Nodo Esclavo 2
Nodo Maestro
Lo último es verificar que los equipos efectivamente se comunican ente si:


Configuración SMBD

En este tutorial usáremos como sistema manejador de base de datos PostgreSQL 9.5, por lo que los equipos que estamos usando ya cuentan con PostgreSQL instalado y procederemos con la instalación de Slony-I que es un sistema de replicación maestro-esclavo asíncrono para el DBMS PostgreSQL:

1. Para la instalación de Slony-I usaremos la aplicación Stack Builder, dentro de la aplicación lo primero es escoger la instancia de PostgreSQL con la que trabajaremos y daremos en el botón siguiente. En la siguiente pantalla desplegaremos la categoría de "soluciones de replicación" y marcaremos la versión del Slony que usáremos (nosotros usáremos la versión de 64bit) y continuaremos con la instalación dando clic en el botón siguiente:


2. Una vez finalizada la instalación de Slony iremos a pgAdmin 3 en las opciones iremos a las opciones Binary paths y configuraremos la ruta donde se instaló Slony:


3. Lo siguiente que debemos configurar el acceso para nuestros equipos en el archivo pg_hba.conf con la siguiente configuración:


Configuración de archivo pg_hba.conf 


4. Por último, añadiremos una regla de entrada y una de salida en el firewall, para que PostgreSQL trabaje sin problemas:


Nota 1: El puerto que usamos es el que se configuro cuando se instaló PostgreSQL
Nota 2: Estas configuraciones las debemos realizar en todos los equipos que estamos usando en este tutorial.

Proceso de replicación:

Luego de configurar los equipos en red y configurar PostgreSQL, procederemos con la creación de los scripts con la configuración para la replicación que serán ejecutados por Slony-I:

1. Para este tutorial lo primero que aremos será crear una base de datos igual a la que se encuentra en el nodo maestro (la BD secSalud), sin datos en los nodos esclavos:


2. Después crearemos el script que contendrá la configuración para el nodo maestro para ello crearemos un archivo en bloc de notas y pondremos la siguiente configuración:

Para el nodo Esclavo 1 (archivo maestro7.txt):

# Nombre del cluster 
cluster name =slony_m;
# conexión a la BD
node 1 admin conninfo='dbname=secSalud host=192.168.1.100 user=postgres password=postgres';
node 2 admin conninfo='dbname=secSalud host=192.168.1.101 user=postgres password=postgres'; 
node 3 admin conninfo='dbname=secSalud host=192.168.1.102 user=postgres password=postgres'; 
init cluster (id=1, comment='Nodo Maestro');

# set de replicación
create set (id=1, origin=1, comment='tablas de la SecSalud');

# se crea un set por cada tabla que se va a replicar de la base de datos de la secSalud
set add table (set id=1, origin=1, id=1, fully qualified name= 'public.eps', comment = 'tablaeps');

set add table (set id=1, origin=1, id=2, fully qualified name= 'public.estadoeps', comment = 'tablaestadoeps');

set add table (set id=1, origin=1, id=3, fully qualified name= 'public.estadopersona', comment = 'tablaestado persona');

set add table (set id=1, origin=1, id=4, fully qualified name= 'public.historialpersona', comment = 'tablahistorial persona');

set add table (set id=1, origin=1, id=5, fully qualified name= 'public.persona', comment = 'tabla persona');

set add table (set id=1, origin=1, id=6, fully qualified name= 'public.servicioeps', comment = 'tablaservicioservicioeps');

set add table (set id=1, origin=1, id=7, fully qualified name= 'public.tipoafiliado', comment = 'tablatipoafiliado');

set add table (set id=1, origin=1, id=8, fully qualified name= 'public.tipoidentificacion', comment = 'tablatipoidentificacion');

set add table (set id=1, origin=1, id=9, fully qualified name= 'public.tiposervicio', comment = 'tablatiposervicio');

# se indica cual sera el nodo(s) esclavo(s)
store node (id=2, comment = 'nodo esclavo1', EVENT NODE =1);
store path (server =1, client = 2, conninfo='dbname=secSalud host=192.168.1.100 user=postgres password=postgres');
store path (server =2, client = 1, conninfo='dbname=secSalud host=192.168.1.101 user=postgres password=postgres');
store listen (origin=1, provider=1, receiver=2);
store listen (origin=2, provider=2, receiver=1);

store node (id=3, comment = 'nodo esclavo2', EVENT NODE =1);
store path (server =1, client = 3, conninfo='dbname=secSalud host=192.168.1.100 user=postgres password=postgres');
store path (server =3, client = 1, conninfo='dbname=secSalud host=192.168.1.102 user=postgres password=postgres');
store listen (origin=1, provider=1, receiver=3);
store listen (origin=3, provider=3, receiver=1);

3. Luego crearemos el correspondiente script para el nodo esclavo 1 y 2, usaremos la siguiente configuración:

Para el nodo Esclavo 1 (archivo esclavop1.txt):

# en cluster name pondremos el mismo nombre que tiene el archivo del nodo maestro
cluster name = slony_m;
# indicamos las conexiones a las bases de datos
node 1 admin conninfo='dbname=secSalud host=192.168.1.100 user=postgres password=postgres';
node 2 admin conninfo='dbname=secSalud host=192.168.1.101 user=postgres password=postgres'; 
# Iniciamos la replicación 
subscribe set (id = 1, provider = 1, receiver = 2, forward =yes);

Para el nodo Esclavo 2 (archivo esclavop1.txt):

# en cluster name pondremos el mismo nombre que tiene el archivo del nodo maestro
cluster name = slony_m;
# indicamos las conexiones a las bases de datos
node 1 admin conninfo='dbname=secSalud host=192.168.1.100 user=postgres password=postgres';
node 3 admin conninfo='dbname=secSalud host=192.168.1.102 user=postgres password=postgres'; 
# Iniciamos la replicación 
subscribe set (id = 1, provider = 1, receiver = 3, forward =yes);

4. Posterior a la creación de los scripts copiaremos cada archivo en la carpeta Bin que se encuentra la carpeta raíz de PostgreSQL en el equipo correspondiente a cada script:


5. Ahora pondremos en marcha el clúster de replicación, para ello en una consola de comandos del nodo maestro nos diríjase a la ruta C:\Archivos de programa\PostgreSQL\9.5\bin, luego ejecute la sentencia:
slonik "nombre_del_script"

Nota:El paso anterior lo repetiremos en cada nodo solo que el archivo que ejecutaremos será el correspondiente a cada nodo.

6. Para finalizar ejecutaremos la replicación que creamos en los pasos anteriores, para ello en la consola de comandos iremos de nuevo a la carpeta Bin en PostgreSQL y ejecutaremos el siguiente comando:
slon nombre_del_clúster “dbname = nombre_BD user = usuario_Postgres password =contraseña_postgres”

Nota: no se debe de cerrar las terminales en ninguno de los nodos donde se ejecutó la sentencia.

Verificación 

Si todos los pasos anteriores se ejecutaron correctamente la base de datos “secsalud” estará replicando las modificaciones que se realicen en las tablas del nodo maestro hacia las tablas de las bases de datos ubicadas en los nodos esclavos y se observará en la consola de comandos una salida como la siguiente:



Para finalizar un vídeo corto donde agregamos datos en el nodo maestro y verificamos su replicación ene los nodos esclavos:



Con esto terminamos el tutorial espero que los procesos hayan sido claros.

Comentarios