sábado, 30 de abril de 2016

MySQL Fabric



      MySQL Fabric es un sistema para gestionar granjas de servidores MySQL para lograr una Alta Disponibilidad y la escalabilidad con la utilización de particionamiento de datos. Técnicamente es un middleware* para gestionar y monitorizar servidores MySQL.

*Middleware (lógica de intercambio de información entre aplicaciones):  es un software que asiste a una aplicación para interactuar o comunicarse con otras aplicaciones, paquetes de programas, redes, hardware y/o sistemas operativos. Esté simplifica el trabajo de los programadores en el complejo trabajo de generar las conexiones y sincronizaciones que son necesarias entre los sistemas distribuidos. De esta forma, se provee una solución que mejora la calidad del servicio, así como la seguridad, la actualización del directorio del servicio, etc...

      MySQL es famosa por ser una base de datos muy sencilla de utilizar y con el motor de almacenamiento InnoDB que brinda gran desempeño, funcionalidad y confiabilidad. MySQL/InnoDB ahora escala muy bien pero tiene un límite donde el escalamiento no es suficiente.

      La introducción de MySQL Fabric hace que todo sea más simple. MySQL Fabric esta diseñada para administrar grupos de servidores MySQL, ya sea para pocos de alta disponibilidad o miles para lidiar con la escalabilidad de aplicaciones web.

      MySQL Fabric proporciona una opción simple y efectiva para la alta disponibilidad como así también la opción de escalabilidad y de incremento gradual. Realiza esto sin sacrificar la potencia de MySQL e InnoDB; lo que supondria cambios importantes para la aplicación o necesitaría equipos de desarrollo de operaciones para pasar a tecnologías desconocidas o abandonar estas herramientas.


      - Para la alta disponibilidad, MySQL Fabric administrará las relaciones de replicación, detectará la falla del maestro y promocionará automáticamente uno de los esclavos para que sea el nuevo maestro. Esto es completamente transparente para la aplicación.

      Para tener HA debe haber redundancia en la capa de aplicación, en sí mismo esto es muy facíl, simplemente debe equilibrar todas las solicitudes de servicio a través de un grupo de servidores de aplicaciones que se ejecutan todos con la misma lógica de la aplicación. Si el servicio fuera algo tan simple como un generador de números aleatorios entonces esto estaría bien, pero las aplicaciones más útiles necesitan acceder a los datos, y a medida que se mueven más allá de un único servidor de base de datos (por ejemplo, porque tiene que ser HA), entonces se requiere una forma para conectar el servidor de aplicaciones a la fuente de datos correcta.

      La duplicación MysQL se implementa al configurar una estancia como maestra, con una o más instancias adicionales configuradas como esclavas. El maestro registra los cambios en la base de datos que luego son enviados y aplicados a los esclavos de manera inmediata o después de un tiempo de intervalo.

      - Para la escalabilidad, MySQL Fabric automatiza el particionamiento con los requisitos de conectores de enrutamiento para el servidor (o servidores si también utiliza MySQL Fabric para alta disponibilidad) basado en una clave de particionamiento proporcionada por la aplicación. Si una partición incrementa de tamaño, MySQL Fabric puede dividir la partición a medida que garantiza que los requisitos continúan enviándose a la ubicación correcta.


      La manera más común de escalabilidad es el particionamiento de los datos entre múltiples servidores MySQL, esto puede realizarse verticalmente (cada servidor contiene un subconjunto discreto de tablas para un conjunto especifico de funciones) u horizontalmente donde cada servidor tiene un subconjunto de registros para una tabla dada. A pesar de ser efectivo, suele ser una tarea de lógica compleja, donde los desarrolladores tienen que poner muchos de sus esfuerzos. Pero para ello esta MySQL Fabric.

      Cuando se acerca el límite de capacidad o al rendimiento de operaciones de escritura de un único servidor MySQL (o grupo HA) se puede utilizar MySQL Fabric para escalar los servidores de base de datos con la partición de los datos a través de grupos múltiples de servidores MySQL. Hay que tener en cuenta que un grupo puede contener un único servidor MySQL o puede ser un grupo HA.


Tutorial donde se aplica a un ejemplo la alta disponibilidad y escalabilidad usando MySQL Fabric

domingo, 24 de abril de 2016

Recursos MySQL según necesidades y la replicación

      Debido a que cada aplicación tiene diferentes necesidades de funcionamiento y disponibilidad, MySQL ofrece una gama de soluciones certificadas y compatibles, la entrega de los niveles apropiados de alta disponibilidad y la escalabilidad para satisfacer los requisitos de nivel de servicio. Este tipo de soluciones se extiende desde la replicación, a través de la virtualización, y las soluciones de multi-centros de datos geográficamente redundantes que ofrecen un 99,999 % de disponibilidad.
   
      La selección de la solución adecuada para cada aplicación depende en gran medida de:

- El nivel de disponibilidad requerido.

- El tipo de aplicación que se esta desplegando.

- Las mejores prácticas aceptadas dentro de su propio entorno.

      Las soluciones primarias soportadas por MySQL incluyen:
  • MySQL Replication.
  • Fabric MySQL
  • MySQL Cluster
  • Oracle Clusterware Agent para MySQL
  • MySQL con solaris Cluster

- La replicación:
   
      Expliquemos antes que significa replicación en el contexto de la informática:
La replicación es el proceso de copiar y mantener actualizados los datos en varios nodos de bases de datos ya sean estos persistentes o no. Éste usa un concepto donde existe un nodo amo o maestro (master) y otros sirvientes o esclavos (slave).

      El proceso de replicación de una base de datos consiste en replicar las consultas de actualización (tanto DML como DDL) en una base de datos maestra (master) sobre una o varias bases de datos esclavas (slave), de manera que tengamos una copia de las mismas a lo largo del tiempo.
      MySQL soporta replicación unidireccional asíncrona, es decir, las consultas de actualización ejecutadas en el maestro son replicadas en los servidores esclavos. Esta replicación se realiza de manera transparente. Además es instantánea si los servidores esclavos están levantados y en estado de replicación.

      Hay que tener en cuenta que la modificación de datos deben realizarse en el maestro, si se desea modificar los datos de un esclavo no podremos hacerlo solo con la replicación.

      La replicación es útil para la escalabilidad, ya que podriamos configurar nuestras aplicaciones para balancear las consultas de lectura (SELECT) entre los servidores replicados. Podríamos usar herramientas como MySQL Proxy para balancear las consultas de lectura entre los servidores replicados y enviar las consultas de actualización al maestro.

      La replicación también nos podría ser útil en la misma medida para la alta disponibilidad en aplicaciones y entornos de donde solo se requieren lecturas, podríamos configurar nuestras aplicaciones para balancear las consultas de lectura (SELECT) entre los servidores replicados de manera que si uno cae se continué prestando el servicio.

Nota: se habla de balancear en el post, explicaremos que es el balanceo en informática:

      El balance o balanceo de carga es un concepto usado en informática que se refiere a la técnica usada para compartir el trabajo a realizar entre varios procesos, ordenadores, servidores, discos u otros recursos. Está íntimamente ligado a los sistemas de multiprocesamiento, o que hacen uso de más de una unidad de procesamiento para realizar labores útiles.

     El balance de carga se mantiene gracias a un algoritmo que divide el trabajo de la manera más equitativa posible el trabajo para evitar los posibles cuellos de botella.

miércoles, 13 de abril de 2016

Introducción y conceptos

      Los datos son la clave de los sistemas informáticos y la clave de los negocios de hoy en día. La seguridad de estos datos pueden dar el poder en el amplio sentido de la palabra, y todo ello reside en el uso de herramientas como MySql.
      MySql se despliega en multitud de aplicaciones con una exigencia que puede variar según las necesidades de cada una de esas aplicaciones, una exigencia que puede variar desde exigencias mínimas, hasta unas exigencias difíciles de imaginar.
      En este blog hablaremos de las exigencias referentes a la alta disponibilidad y la escalabilidad de Mysql.

Conceptos principales:

      1.- Disponibilidad: es un servicio que garantiza que los usuarios autorizados tengan acceso a la información y a otros activos de información asociados en el lugar, momento y forma en que es requerido. Un sistema seguro debe mantener la información disponible para los usuarios. El sistema debe mantenerse funcionando eficientemente y ser capaz de recuperarse rápidamente en caso de fallo, o ser respaldado por otro sistema diseñado para ello.

      2.- Se entiende por escalabilidad a la capacidad de adaptación y respuesta de un sistema con respecto al rendimiento del mismo a medida que aumentan de forma significativa el número de usuarios del mismo. Aunque parezca un concepto claro, la escalabilidad de un sistema es un aspecto complejo e importante del diseño.