jueves, 12 de mayo de 2016

Oracle Clusterware

       Oracle Clusterware es la tecnología que unifica los servidores de una granja de servidores para formar un clúster. Oracle Clusterware es el software que coordina la gestión de estos servidores y las aplicaciones que se ejecutan en ellos. Oracle Clusterware es una solución genérica probada y certificada para funcionar en todas la plataformas y sistemas operativos.



      Oracle Clusterware proporciona un marco de gestión rico para integrar y gestionar todas las aplicaciones. El núcleo de este marco es un motor de política sólida para la colocación de recursos, así como iniciar y detener dependencias entre recursos*. Esto le permite a Oracle Clusterware administrar la carga de trabajo  y la disponibilidad a través de toda la pila. La capacidad de automatizar y administrar de forma segura la marcha, paro y colocación de bases de datos y aplicaciones de recursos para el mantenimiento planificado y el rendimiento de la carga de trabajo es un elemento esencial ingrediente para la consolidación exitosa.


      Alta disponibilidad.
   
      Como hemos hablado en las anteriores entradas el colocar las aplicaciones y las bases de datos en un clúster común ofrece mucha mayor disponibilidad y facilidad de gestión entre los componentes de la aplicación y la base de datos, donde arranque, la parada ordenada de dependencias, y la colocación pueden ser definidos y automatizados.

      Escalabilidad y agilidad.
 
      La versión nueva de Oracle Clusterware 12c aporta como novedad Oracle Flex Cluster 12c lo que nos permite acoplar las aplicaciones y las bases de datos en una Oracle Clusterware común.
      Oracle Flex Cluster está diseñado para la escalabilidad en almacenamiento compartido y óptimo entre peer-to-peer. Este diseño es compatible con un despliegue de hasta 100 nodos. Otra innovación introducida por Oracle Flex Cluster es la capacidad de desplegar máquinas virtuales de Oracle y Bare Metal* server en el mismo cluster.

ACLARACIÓN: Bare Metal: es un hipervisor que no funciona bajo un sistema operativo sino que tiene acceso directo sobre los recursos hardware. Esto significa que obtendremos un mejor rendimiento, escalabilidad, y estabilidad. Por contra,, en este tipo de tecnología de virtualización el hardware soportado es más limitado ya que normalmente es construido con un conjunto limitado de drivers.
      La tecnología bare-metal se adapta mejor a centros de datos. Esto es porque dispone de características avanzadas como la administración de recursos, alta disponibilidad, seguridad y administración centralizada de la infraestructura de virtualización.

miércoles, 4 de mayo de 2016

MySQL Cluster

      MySQL Cluster es un clúster* de base de datos escalable en escritura, que cumple el test ACID (atomicidad, consistencia, aislamiento, durabilidad) y diseñado para proporcionar un 99,999% de disponibilidad.

*


      MySQL Cluster escala de horizontalmente en cualquier hardware, basado en el concepto "shared nothing" (múltiples máquinas físicamente independientes trabajando en común), con auto-sharding (almacenar datos de forma distribuida sin tener que configurar nada), para dar soporte a cargas de trabajo intensivas en escritura y lectura.

      Algunas de sus caracteristicas:

  • Licencia GNU GPL, open source.
  • Funciona en múltiples plataformas hardware.
  • Uso completo de multi-threaded mediante threads de kernel.
  • Un sistema de privilegios y contraseñas muy flexibles y seguro, que permite una verificación basada en el host.
  • Los clientes pueden conectar con el servidor MySQL usando sockets TCP/IP en cualquier plataforma.

      Las tablas de la base de datos se almacena, utilizando el motor NDB en los nodos de almacenamiento. La manera de acceder a los datos en el clúster a través de cualquiera de los nodos MySQL. Los nodos de datos funcionan utilizando un esquema de espejado, permitiendo soportar sin impacto la caída.

      Con MySQL Cluster tenemos un límite de nodos de 48 con lo que se limitarían también el número de solicitudes que pueden ser atendidas, como podemos ver en la siguiente imagen, no es una cifra pequeña que digamos:


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.