El país de MySQL de alta disponibilidad en 2017 (Adultos)

En esta publicación de blog, analizamos algunas de las opciones de solución de alta disponibilidad de MySQL.

En la publicación anterior de esta serie, analizamos las soluciones MySQL de alta disponibilidad (HA) que existen desde hace bastante tiempo. Llamo a estas soluciones “las antiguas”. Algunas de estas soluciones (como la replicación) se usan ampliamente en la actualidad y se han mejorado desde el lanzamiento de MySQL.

Esta publicación se enfoca en las soluciones MySQL de alta disponibilidad que han aparecido en los últimos cinco años y han ganado una buena cantidad de tracción en la comunidad. Elegí incluir en este grupo solo dos soluciones: Galera y RDS Aurora. Utilice el término «Galera» de forma genérica: abarca Galera Cluster, MariaDB Cluster y Percona XtraDB Cluster. Llevo un tiempo debatiéndome si incluir o no a Aurora. No me gusta el hecho de que usen código fuente cerrado. Dada la estrecha integración con el entorno de AWS, ¿cuál es el riesgo comercial de abrir el código fuente? Esta pregunta se me escapa, pero no estoy del lado comercial de la tecnología. ⁇

Pérdida

Cuando digo «Galera», me refiero a un protocolo de replicación compatible con una biblioteca proporcionada por Codeship, una empresa finlandesa. La biblioteca debe conectarse al código fuente de MySQL para que funcione el protocolo de replicación. En el clúster de Percona XtraDB, conté 66 archivos .cc donde está presente la palabra «wsrep». Como puede ver, no es una tarea fácil agregar soporte de Galera a MySQL. No todas las implementaciones son similares. Percona, por ejemplo, se centró más en la estabilidad y la usabilidad a expensas de las nuevas funciones.

Comencemos con una breve descripción de un clúster basado en Galera. A menos que le interese el cerebro dividido, un clúster de Galera necesita al menos tres nodos. El protocolo de replicación de Galera es casi síncrono, lo cual es una gran ventaja en comparación con la replicación regular de MySQL. Ejecuta transacciones casi simultáneamente en todos los nodos y el protocolo garantiza el mismo orden de comisión. Las transacciones son casi sincrónicas porque hay archivos entrantes en cada nodo para mejorar el rendimiento. La presencia de estos archivos entrantes obliga a un paso adicional: la certificación. La certificación compara una transacción entrante con las que ya están en línea. Si hay un conflicto, devuelve un error de bloqueo.

Por motivos de rendimiento, el proceso de certificación debe ser rápido para que la cola de entrada permanezca en la memoria. Dado que la cantidad de transacciones define el tamaño de la cola, la presencia de transacciones grandes usa mucha memoria. Existen protecciones contra la sobrecarga de memoria, así que tenga en cuenta que transacciones como:

probablemente fallará. Esta es la primera gran limitación de un clúster basado en Galera: el tamaño del número de transacción es limitado.

También es fundamental identificar el conflicto de una sola fila. La mejor manera de obtener una comparación de filas eficiente es asegurarse de que todas las tablas tengan una clave principal. En un clúster basado en Galera, sus tablas necesitan claves principales; de lo contrario, tendrá problemas. Esta es la segunda limitación de un clúster basado en Galera: la necesidad de una clave principal. Personalmente, creo que una tabla siempre debe tener una clave principal, pero he visto muchas rarezas…

Otra característica del diseño es la necesidad de reconocimiento por parte de todos los nodos cuando se completa una transacción. Esto significa que el enlace de red con la latencia más alta entre dos nodos establecerá el valor del plan de latencia transaccional. Este es un factor importante a considerar al implementar un clúster basado en Galera en una WAN. De manera similar, un nodo sobrecargado puede ralentizar el clúster si no puede reconocer la transacción de manera oportuna. En la mayoría de los casos, la adición de cables esclavos le permitirá superar las limitaciones de rendimiento impuestas por la latencia de la red. Cada transacción sufrirá latencia, pero la mayoría de ellas podrán ejecutarse al mismo tiempo y mantener el rendimiento.

La excepción aquí es cuando hay «archivos calientes». Una fila caliente es una fila que recibe actualizaciones todo el tiempo. Las transacciones que afectan a las colas activas no se pueden ejecutar en paralelo y, por lo tanto, están limitadas por la latencia de la red.

Dado que los clústeres basados ​​en Galera son muy populares, también deberían tener algunos puntos buenos. El primero y más obvio es el soporte de durabilidad total. Incluso si el nodo en el que ejecutó una transacción falla una fracción de segundo después de que se devuelva el extracto de la comisión, los datos están presentes en los otros nodos de fila entrantes. En mi opinión, es la razón principal de la muerte de la solución compartida. Antes de los clústeres basados ​​en Galera, la solución de almacenamiento compartido era la única otra solución que no garantizaba la pérdida de datos en caso de falla.

Si bien el nodo en espera no se puede usar con la solución de almacenamiento compartido, todos los nodos en un clúster basado en Galera están disponibles y casi sincronizados. Todos los nodos se pueden usar para leer sin enfatizar demasiado el retraso de la replicación. Si acepta un mayor riesgo de error de bloque, también puede escribir en todos los nodos.

Por último, pero no menos importante, hay un servicio de aprovisionamiento automático para los nodos recién llamados acero inoxidable. Durante el proceso SST, un carpintero nodo le pide al clúster un donante. Uno de los nodos existentes acepta ser el donante e inicia una copia de seguridad completa. La copia de seguridad se transmite a través de la red al carpintero y se restaura allí. Cuando se completa la copia de seguridad, el ensamblador ejecuta un IST para obtener actualizaciones recientes y, una vez aplicadas, unirse al clúster. El método SST más común utiliza la utilidad Percona XtraBackup. Cuando se usa SST para XtraBackup, el clúster no está disponible en absoluto durante SST, aunque puede degradar el rendimiento. Esta característica realmente simplifica el lado operativo de las cosas.

La tecnología es muy popular. Por supuesto, soy un poco parcial ya que el trabajo de Percona y uno de nuestros productos estrella es Percona XtraDB Cluster, una implementación del protocolo Galera. Además de la replicación estándar de MySQL, es, con diferencia, la solución de alta disponibilidad más utilizada por los clientes con los que trabajo.

RDS Aurora

La segunda solución MySQL de alta disponibilidad «para adultos» es RDS Aurora. Dudé en agregar Aurora aquí, principalmente porque no es una tecnología de código abierto. También debo admitir que no he estado siguiendo muy de cerca los últimos desarrollos en torno a Aurora. Entonces, describamos a Aurora.

Hay tres partes principales en Aurora: al menos un servidor de base de datos, el nodo de escritura y el almacenamiento.

alta disponibilidad

Lo que hace especial a Aurora es que la capa de almacenamiento tiene su propia lógica de transformación. No sé si la lógica de transformación es parte de la instancia de AWS del nodo escritor o parte del servicio de almacenamiento directamente, ya que el código fuente no está disponible. De todos modos, llamaré a esa capa aplicadores. El rol del aplicador es aplicar fragmentos de registro de rehacer que luego permiten que el nodo escritor escriba solo los fragmentos de registro de rehacer (generalmente escritos en los archivos de registro de InnoDB). Los aplicadores leen esos fragmentos y modifican las páginas almacenadas. Si un nodo solicita una página que tiene fragmentos de código de recuperación pendientes para aplicar, se aplican antes de que se devuelva la página.

Desde el punto de vista del escritor, hay muchos menos guiones. Tampoco hay un límite superior directo sobre cuántos fragmentos alinear, por lo que es un poco como tener
innodb_log_file_size establecido en un valor extremadamente grande. Además, dado que Aurora no necesita lavar páginas, si el nodo de escritura debe leerse desde el almacenamiento y no hay páginas libres en el grupo de búfer, puede descartar una incluso si está «sucia». De hecho, no hay páginas malas en el grupo de búfer.

Hasta ahora, eso parece ser bastante bueno para cargas de escritura altas con picos. ¿Qué pasa con los nodos lectores? Estos nodos lectores reciben actualizaciones de los nodos escritores. Si la actualización se refiere a una página que tienen en su grupo de búfer, pueden cambiarla en el acto o descartarla y volver a leerla desde el almacenamiento. Nuevamente, sin el código fuente, es difícil diferenciarlo de la implementación. El punto es que los lectores lo tienen. mismo datos como el maestro, simplemente no puede quedarse atrás.

Además de la imposibilidad de lag de cualquier jugador, el otro punto bueno de Aurora es el almacenamiento. Las páginas de InnoDB se guardan como objetos en un almacén de objetos, no como un archivo normal en un sistema de archivos. Esto significa que no necesita proporcionar su propio almacenamiento por adelantado. Pagas por lo que usas, en realidad lo máximo que usas. Los espacios de tabla de InnoDB no se reducen, incluso con Aurora.

Además, si tiene un conjunto de datos de 5 TB y su carga de trabajo es tal que necesita diez servidores (un escritor y nueve lectores), aún necesita solo 5 TB de almacenamiento si no está replicando a las otras zonas de disponibilidad. En comparación con MySQL normal y la replicación, tiene un maestro y nueve esclavos, cada uno con 5 TB de almacenamiento, para un total de 50 TB. Además de eso, deberá escribir IOPS al menos diez veces.

Entonces, cuando se trata de almacenamiento, tenemos algo que podría ser muy interesante para aplicaciones con grandes conjuntos de datos y muchos competidores con grandes cargas de trabajo de lectura. Garantizar una alta disponibilidad con la capacidad de promover un lector a escritor automáticamente. Puede acceder al primario o a los lectores a través de puntos finales que se conectan automáticamente a las instancias correctas. Finalmente, puede replicar el almacenamiento en múltiples zonas de disponibilidad para DR.

Por supuesto, tal arquitectura viene con una compensación. Si experimenta con Aurora, descubrirá rápidamente que los tipos de instancias más pequeños son moderados mientras que los más grandes funcionan de una manera más predecible. También es bastante fácil sobrecargar los aplicadores. Solo haz las siguientes preguntas:

; dada esa mesa ATableWithMillionsRows

es más grande que el grupo de almacenamiento intermedio. La selección se detuvo durante mucho tiempo porque los aplicadores estaban sobrecargados por la cantidad de páginas para actualizar.

En cuanto a la adopción, tenemos muchos clientes en Percona que usan Aurora, pero no tanto. Es posible que los usuarios de Aurora no vayan naturalmente a Percona en busca de servicios y soporte. También me pregunto sobre la decisión de mantener cerrado el código fuente. Ciertamente no es un factor de marketing positivo en una comunidad como la comunidad MySQL. Dado que la tecnología de Aurora parece estar tan estrechamente ligada a su ecosistema, ¿existe realmente el riesgo de que la tecnología sea reutilizada por un competidor? Con una mejor comprensión de la tecnología a través del acceso de código abierto, Amazon podría haber recibido valiosas contribuciones. También sería mucho más fácil entender, sintonizar y recomendar a Aurora.

Lee mas:

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario