Etiquetas

, , ,

Existen muchos escenarios distintos en los cuales es necesario realizar replicas de datos entre distintas instancias de bases de datos. Entre los más comunes podemos mencionar los esquemas de DRPs (para recuperación en caso de desastres) o bien para centralizar información de distintos puntos.

En el siguiente artículo veremos como podemos sincronizar datos entre distintas bases de datos distribuidas en distintos puntos.

Imaginemos el escenario de un sistema de punto de venta, el cual se encuentra desplegado en distintos datacenters para facilitar el acceso desde varios posiciones geográficas.

bases de datos

Cada uno de estos datacenters atiende las solicitudes de clientes cercanos a la región donde se encuentran.

  • West EEUU atiende las solicitudes de América.
  • Nort Europe atienda las solicitudes de Europa.
  • East Asía atienda las solicitudes de Asia.

Cada una de las bases de datos contiene una porción de la información total del negocio. Si necesitáramos realizar un sistema de reportes y análisis centralizado deberíamos agrupar toda la información dentro de una misma instancia. Por otro lado, en la base de datos centralizada podríamos realizar modificaciones que sean necesario sincronizar posteriormente con cada cliente o con alguno en particular, como aprobaciones de transacciones comerciales superiores a cierto monto. Para este caso, vamos a suponer que es necesario sincronizar datos con la sucursal de Europa.

Esquema de replicación

El modelo de las bases de datos de cada una de las sucursales no es realmente importante, con lo cual desarrollaremos unas tablas en forma simbólica para el ejemplo.

Como se puede ver en la siguiente imagen cada una de las bases de datos se encuentra ubicada en las regiones especificadas anteriormente.

image

Para este ejemplo crearemos 3 tablas básicas.

  • Cliente
  • Producto
  • Pedido

Cada una de estas tablas tendrá un campo Id y un campo Data a modo de ejemplo.

Las tres bases de datos tendrán la siguiente estructura de tablas

image

Y cada una de las tablas tiene los siguientes campos

image

La base de datos que centraliza los datos es la denominada “Replica”. Inicialmente esta base de datos no es necesario que tenga ninguna estructura en particular.

Las tres bases de datos de las sucursales han sido inicializadas con un set de datos similar al siguiente:

image

Una vez que tengamos nuestras tres bases de datos creadas y con datos de prueba debemos configurar el proceso de sincronización.

Recordando el esquema de las bases de datos tenemos lo siguiente:

 image

Para configurar la sincronización debemos ingresar nuevamente al portal de Windows Azure y entrar al listado de Bases de datos de SQL Databasee.

image

Seleccionamos la opción “ADD SYNC” de la barra inferior “New Sync Group”.

Ingresamos un nombre para el grupo de sincronizaciones y seleccionamos un datacenter para la misma

image Seleccionamos la base de datos “Replica” como Hub y debemos especificar si en caso de conflictos se toma en cuenta el valor del Hub o del Cliente. En este ejemplo he seleccionado el cliente.

image

Luego agregamos la primer base de datos. En mi ejemplo será West EEUU. También debemos especificar en que dirección será la sincronización, para este caso será desde el Cliente hacia el Hub.

image

Una vez creado aparecerá una nueva solapa con las sincronizaciones.

image

Si ingresamos a la sincronización que acabamos de crear veremos los siguientes datos:

image

A continuación agregaremos las demás sincronizaciones utilizando la opción “ADD” de la barra inferior. Notar que las opciones de “SYNC” y “STOP” se encuentran deshabilitadas.

Agregamos la sincronización con NorthEuropaDB. En este caso debemos indicar que la sincronización será bidireccional.

image Agregamos la sincronización con EastAsíaDB

imageUna vez que ya hemos agregado todas las bases de datos debemos guardar los cambios utilizando la opción de la barra inferior.

image

En la solapa de configuración encontraremos las opciones necesarias para modificar la contraseña de las conexiones y configurar si deseamos realizar la sincronización en forma automática o manual. Por el momento dejaremos la configuración sin realizar ninguna modificación.

image

Ingresamos en la solapa SYNC RULES para dar de alta las reglas de sincronización.

image

Seleccionamos inicialmente a WestEEUUDB

imageEn la barra inferior utilizamos la opción “Select” => All Columns in All Tables.

image Guardamos los cambios y realizamos el mismo proceso con EastAsíaDB. A este punto podemos notar que la opción “SYNC” ya se encuentra disponible. Para agregar las reglas de EastAsiaDB utilizaremos la opción “DEFINE” de la barra inferior. Por último realizamos el mismo proceso con NorthEuropaDB.

Una vez realizado esto ejecutamos la sincronización utilizando el botón SYNC de la barra inferior.

Al finalizar ingresamos a la base de datos de Replica para revisar el estado de la misma. Dentro de la estructura de tablas podemos identificar que no solo se encuentras las tablas que fueron sincronizadas, también existen tablas de control de sincronización.

image

Dentro de “Replica” encontraremos los siguientes registros

image

image

image

Las bases de datos de WestEEUUDB y EastAsiaDB no han sido modificadas.

Si revisamos la base de datos de NorthEuropaDB cuya sincronización con el Hub es bidireccional encontraremos registros adicionales dependiendo del orden en que las sincronizaciones fueron ejecutadas.

En mi caso la base de datos de Noth Europa tiene los siguientes registros para Pedido

image

En la solapa de Logs podremos visualizar las actividades realizadas

image

Si modificamos algún dato en alguna de las bases de datos de las sucursales en la siguiente sincronización se encontrarán disponibles en el Hub “Replica”. Para el caso de la sincronización bidireccional, serán sincronizados aquellos datos que hasta el momento se encuentren en el Hub. Por tal motivo, al realizar una modificación en WestEEUUDB o en EastAsiaDB puede requerir de dos sincronizaciones hasta llegar a NortgEuropaDB (puede ser sincronizado en la primera o en la segunda vez).

Por último, si así lo deseamos, podemos volver a la página de configuración para automatizar el proceso.