martes, 13 de enero de 2015

Cluster MySQL con réplica circular


Resumen
El Centro Nacional de Sanidad Agropecuaria cuenta una red de datos, de más de 326 usuarios, los que contribuyen a la investigación en el tema de salud animal y sanidad vegetal, utilizando las tecnologías de la informática y las comunicaciones. El departamento de Informática, desarrolla software de alto valor agregado para el trabajo de la institución y durante este proceso, la elección del gestor de Base de Datos es un aspecto importante a tener en cuenta para el rendimiento de una aplicación informática. Desplegar soluciones informáticas en un entorno de producción, utilizando un único servidor de Base de Datos no es recomendable, porque se encuentra expuesto a fallas en el servicio debido a cortes eléctricos, problemas de hardware, mantenimiento, entre otros. La utilización de la tecnología de clúster en los servicios de redes a través de herramientas de software libre como son: Pacemaker, Corosync, OpenAIS y MySQL permite incrementar la disponibilidad del servicio. Este trabajo aborda la aplicación de esta tecnología en la institución, lo que ha permitido alcanzar una alta disponibilidad de los servicios de base de datos para las aplicaciones informáticas.

 
Introducción
El término clúster se aplica a los conjuntos o conglomerados de computadoras construidos mediante la utilización de hardware comunes y que se comportan como si fuesen una única computadora. Hoy en día desempeñan un papel importante en la solución de problemas de las ciencias, las ingenierías y del comercio moderno[1].
La tecnología clúster permite a las organizaciones incrementar su capacidad de procesamiento usando tecnología estándar, tanto en componentes de hardware como de software que pueden adquirirse a un costo relativamente bajo.
En un clúster de alta disponibilidad de aplicación si se produce un fallo del hardware o de las aplicaciones de alguna de las máquinas, el software de alta disponibilidad es capaz de arrancar automáticamente los servicios que han fallado en cualquiera de las otras. Cuando la máquina que ha fallado se recupera, los servicios son nuevamente migrados a la original. Esta capacidad de recuperación automática de servicios nos garantiza la integridad de la información, ya que no hay pérdida de datos, y evita molestias a los usuarios, que no tienen por qué notar que se ha producido un problema[2].

Desarrollo
Para la implementación y desarrollo de un clúster de base de datos MySQL, se utilizaron dos servidores profesionales Hewlett-Packard (HP), con microprocesador Intel Xeon y 16GB de memoria RAM y la distribución de Linux openSUSE versión 12,1. A continuación se explica brevemente las herramientas utilizadas para realizar el trabajo.
MySQL es un sistema de gestión de base de datos relacional, multihilo y multiusuario con más de seis millones de instalaciones. Este es muy utilizado en aplicaciones web como MediaWiki, Drupal o phpBB, en plataformas (Linux/Windows, Apache, MySQL, PHP/Perl/Python), y por herramientas de seguimiento de errores como Bugzilla. Su popularidad como aplicación web está muy ligada a PHP, que a menudo aparece en combinación con este gestor. MySQL es una base de datos muy rápida en la lectura cuando utiliza el motor no transaccional MyISAM, pero puede provocar problemas de integridad en entornos de alta concurrencia en la modificación. En aplicaciones web hay baja concurrencia en la modificación de datos y en cambio el entorno es intensivo en lectura de datos, lo que hace a MySQL ideal para este tipo de aplicaciones[3].
Pacemaker es un administrador de clúster. Este permite obtener el máximo rendimiento de los servicios, haciendo uso de los mensajes en la infraestructura del clúster, permite realizar cualquier tipo redundancia incluyendo Activo/Activo Activo/Pasivo, etc. Pacemaker esta compuesto por tres partes fundamentales, el núcleo del clúster que permite los mensajes y la pertenencia al clúster (OpenAIS), un conjunto de script para iniciar, detener y monitorear los recursos y un cerebro que procesa y reacciona a los eventos del clúster[4].



Para lograr un clúster completamente funcional con este tipo de características es necesario instalar los software Pacemaker y Corosync en las dos computadoras que se quieren clústerizar como se muestra a continuación: 

 
#zypper in corosync pacemaker
Obteniendo los datos del repositorio...
Leyendo los paquetes instalados...
mysql no se encontró como nombre de paquete, probando en prestaciones.
Resolviendo dependencias...
Los siguientes paquetes NUEVOS van a ser instalados:
clúster-glue corosync crmsh fence-agents libcorosync4 libdlm libdlm3 libesmtp libestr0 libfreebl3 libglue2 libgthread-2_0-0 libnet1 libpacemaker3 libqb0 libsensors4
libsnmp30 libsoftokn3 libXss1 mariadb mozilla-nss mozilla-nss-certs openhpi OpenIPMI pacemaker pacemaker-cli perl-TimeDate psmisc pssh python-dateutil python-pexpect
python-pssh python-pycurl python-tk resource-agents rsyslog snmp-mibs syslog-service tcl tk xhost
Los siguientes paquetes recomendados fueron seleccionados automáticamente:
  crmsh fence-agents libdlm
Se sugiere el siguiente paquete, pero no será instalado:
graphviz
41 nuevos paquetes a instalar.
Tamaño total a descargar: 18,2 MiB. Después de la operación, se utilizarán 105,6 MiB adicionales.
¿Desea continuar? [s/n/? mostrar todas las opciones] (s):s 
Si termina la instalación satisfactoriamente, el siguiente paso es verificar la conexión entre las dos maquinas, utilizando el comando ping. Para configurar OpenAIS es necesario establecer un puerto, una dirección multicas y la dirección de dominio del clúster. En este trabajo se utilizó 226.94.1.1 como dirección multicast y 4000 como puerto del servicio. Establecidos estos parámetros se puede iniciar el servicio de Corosync de la siguiente manera:

# rcopenais start
Starting OpenAIS/Corosync daemon (corosync): starting... OK 
Pacemaker tiene una herramienta que proporciona una interfaz de linea de comandos llamada crm, que permite la administración y configuración del clústeres de alta disponibilidad a partir de cero[5]. 
node hera \
attributes standby="off"
node zeus \
attributes standby="off"
primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip="172.16.0.200" cidr_netmask="32" \
op monitor interval="30s"
primitive MySQL ocf:heartbeat:mysql \
params binary="/usr/bin/mysqld_safe" user="mysql" pid="/var/run/mysql/mysqld.pid" socket="/var/run/mysql/mysql.sock" \
op start interval="0" timeout="120" \
op stop interval="0" timeout="120" \
op promote interval="0" timeout="120" \
op demote interval="0" timeout="120"
clone MysqlClone MySQL \
meta target-role="Started"
location cli-prefer-ClusterIP ClusterIP \
rule $id="cli-prefer-rule-ClusterIP" inf: #uname eq zeus
property $id="cib-bootstrap-options" \
dc-version="1.1.6-9971ebba4494012a93c03b40a2c58ec0eb60f50c" \
clúster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore"
rsc_defaults $id="rsc-options" \
resource-stickiness="100"

Esta configuración muestra el estado funcional, donde todos los nodos comparten una misma dirección IP, se puede apreciar en la directiva primitive MySQL ocf:heartbeat:mysql que el servicio de MySQL se encuentra clusterizado. En la siguiente captura también se muestra el estado del clúster 
#crm_mon
Last updated: Thu Mar 13 15:40:16 2014
Last change: Thu Mar 13 09:10:39 2014 by root via crm_attribute on hera
Stack: openais
Current DC: hera - partition with quorum
Version: 1.1.6-9971ebba4494012a93c03b40a2c58ec0eb60f50c
2 Nodes configured, 2 expected votes
3 Resources configured.
============
Online: [ hera zeus ]
ClusterIP (ocf::heartbeat:IPaddr2): Started zeus
Clone Set: MysqlClone [MySQL]
Started: [ hera zeus ]
El clúster garantiza la disponibilidad del servicio, pero la integridad y la disponibilidad de la información hay que garantizarla con otro tipo de herramientas. En este caso, para que la información se mantenga en la misma base de datos, se utilizó el método de Réplica circular, que permite tener la misma información en las dos bases de datos. La replicación funciona de la siguiente forma: el servidor esclavo se inicia con una copia exacta de los datos del servidor principal, a continuación se activa el registro binario en el principal y el esclavo se conecta a este periódicamente y
comprueba los cambios efectuados en el registro binario desde la última vez que se conectó[6]. Para mas información de la plica circular se puede consultar el manual de referencia de MySQL5 en esta dirección http://dev.mysql.com/doc/refman/5.1/en/.
 
Conclusión
La tecnología clúster posee muchos beneficios para las aplicaciones de función crítica ya que permite un modelo de escalabilidad de alto impacto. En el centro de datos del CENSA se aplica esta tecnología obteniendo resultados satisfactorios. Las aplicaciones web que tienen una misión critica para el trabajo realizado en la institución, han logrado una alta disponibilidad utilizando este tipo de tecnología.
 
Bibliografía
1: , Escalabilidad, 2013, http://es.wikipedia.org/wiki/Escalabilidad
2: , Clúster (informática), 2013, http://es.wikipedia.org/wiki/Cl%C3%BAster_%28inform%C3%A1tica%29
3: , MySQL, 2013, http://es.wikipedia.org/wiki/Mysql
4: Andrew Beekhof, Clusters from Scratch, 2013, http://clusterlabs.org/doc/en-US/Pacemaker/1.1-plugin/html-single/Clusters_from_Scratch/
5: Kristoffer Gronlund, crm - Pacemaker command line interface for configuration and management, 2013, http://crmsh.nongnu.org/crm.8.html