Administre la operación de servidores MySQL con MySQL Fabric

Si bien la replicación integrada ha sido una de las principales causas de la adopción generalizada de MySQL, las herramientas oficiales para ayudar a los DBA a administrar las topologías de replicación generalmente no están impresas. La comunidad ha producido Tantos bien productos a llenar en esta brecha, pero recientemente, Oracle también se ha llenado con la adición de Utilidad MySQL a la mezcla

Parte de la Utilidad que ha generado interés recientemente es Tejido MySQL, y discutiremos este proyecto en una serie de publicaciones de blog.

Según la documentación oficial, MySQL Fabric es un sistema para administrar las operaciones de los servidores MySQL. En esta etapa, el sistema se enfoca en dos áreas de operaciones de MySQL: alta disponibilidad y fragmentación, confiando en la replicación basada en GTID (disponible solo en MySQL> = 5.6.5) para la primera. Su desarrollo estuvo a cargo de Mats Kindahl, desarrollador senior de software de MySQL en Oracle, quien explica lo que hay en esta publicación y también en ella. video entrevista corta a Percona Live a principios de este mes.

Comenzaremos esta serie de publicaciones brindando una descripción general amplia del proyecto y luego profundizaremos en cada área en publicaciones posteriores.

A qué te dedicas

Actualmente, MySQL Fabric tiene dos áreas de administración de servidores en las que puede ayudar a los administradores de bases de datos: alta disponibilidad y fragmentación.

En cuanto a la alta disponibilidad, MySQL Fabric le permitirá tener un grupo de servidores MySQL y tratarlos como una sola unidad lógica, con un servidor primario que puede leer y escribir, y servidores secundarios que pueden leer (y ser utilizados) por escala. esos), así como asumir el papel principal en caso de falla.

Como podemos ver, MySQL Fabric se basa en la replicación basada en GTID para funcionar. De forma predeterminada, la herramienta no realizará una conmutación por error automática, pero se puede configurar para que lo haga y funciona. En publicaciones futuras de esta serie, dedicaremos un tiempo a explicar cómo configurar un grupo HA de servidores MySQL usando MySQL Fabric, y luego intentaremos desglosarlos de varias maneras. Estén atentos si están interesados ​​en los resultados 🙂

Cuando se trata de Sharding, MySQL Fabric se basa en conectores especiales para funcionar. Sin conectores, aún puede usar la herramienta de línea de comandos mysqlfabric para manejar fragmentos (e incluso migrarlos de un servidor a otro), pero deberá modificar su aplicación para incluir lógica para decidir qué fragmentos usar en cada pregunta. . Al usar los conectores, la conexión MySQL se establecerá realmente con MySQL Fabric (con un servicio XML RPC del que hablaremos más adelante). Los conectores ocultan la información necesaria (esto es una simplificación, entraremos en más detalles en la próxima publicación) para que el cliente pueda tomar la decisión correcta de enrutamiento al leer o escribir datos en una tabla fragmentada.

Creemos que las funciones de HA están más maduras ahora, pero los Shardings parecen prometedores. Además, MySQL Fabric es extensible y creemos que esta es un área en la que puede crecer mucho (por ejemplo, usar Shard Query con MySQL Fabric para admitir consultas distribuidas en paralelo).

Concepciones generales

Para comprender MySQL Fabric, primero debemos presentar la terminología utilizada por el proyecto. Comenzaremos enumerando las definiciones básicas y luego entraremos en más detalles cuando sea necesario.

  • grupo. Una colección de servidores mysqld.
  • grupo mundial. Grupos especiales que protegen las actualizaciones que deben propagarse a todos los fragmentos.
  • Nodo. Una instancia en ejecución de MySQL Fabric.
  • Casco. Una partición horizontal de datos en una tabla.
  • Primario. Un miembro del grupo que ha sido designado profesor.
  • Secundario. Un miembro del grupo que se lee solo.

grupo

Un servidor aquí es en realidad una instancia de mysqld, aunque idealmente todas las instancias de un grupo deberían estar en servidores diferentes. Sin embargo, durante la prueba, puede crear varias instancias en el mismo host, ya que realmente no necesita HA.

Un servidor dado solo puede ser parte de un solo grupo. Esto puede ser confuso al principio, pero una vez que comprenda que MySQL Fabric se basa en la replicación (usando GTID) para la mayor parte de su trabajo, se vuelve más claro. Un servidor MySQL dado solo puede tener un maestro y, por lo tanto, no tiene sentido pertenecer a varios grupos.

Los grupos tienen identificadores, que son solo nombres simbólicos que deben coincidir con ciertos reglas básicas

grupo mundial

Los grupos globales son grupos especiales involucrados en Sharding. Se utilizan para propagar cambios globales a todos los fragmentos (como cambios de esquema, pero no solo este).

Nodo

Tenga en cuenta que un nodo * no * es un servidor MySQL que forma parte de un grupo. Es un programa de Python que, entre otras cosas, proporciona el servidor XML-RPC que utilizan los conectores especiales y el cliente de línea de comandos «mysqlfabric». Sin embargo, un nodo necesita una instancia de mysqld. Esta instancia se llama backend store y MySQL Fabric la usará para guardar toda la información necesaria para administrar los servidores.

Casco

Dijimos que un fragmento es una partición horizontal de datos en una tabla, pero esta partición ocurre en el nivel de MySQL Fabric. MySQL no es consciente, y en el nivel de instancia de mysqld, un fragmento es solo una tabla. Hablaremos más sobre eso pronto, ya que tiene algunas consecuencias.

Primario

El servidor primario es el único servidor grabable en un grupo. Esto se aplica a la alta disponibilidad, no a la fragmentación, aunque puede definir un grupo (y, por lo tanto, un primario) para el fragmento y, por lo tanto, usar MySQL Fabric tanto para fragmentar como para proporcionar alta disponibilidad para cada fragmento.

Secundario

Un servidor secundario es un miembro de un grupo que está disponible para reemplazar un servidor primario fallido y que es de solo lectura. También se puede utilizar para lecturas escaladas.

Reflejos

Como todo, MySQL Fabric tiene sus pros y sus contras. Afortunadamente, la mayoría de los puntos negativos que hemos identificado se deben a que el proyecto aún se encuentra al comienzo de su ciclo de vida. Teniendo en cuenta que la última versión es un RC, estamos seguros de que se irán en el futuro.

En el lado positivo:

  • Está desarrollado por Oracle.

Creemos que esto es importante porque MySQL no tenía una herramienta estándar para administrar las operaciones del servidor hasta ahora. Las personas siempre podrán usar herramientas de otros proveedores (o cocinar las suyas propias), pero creemos que es bueno tener una oferta estándar que sea parte de los paquetes de MySQL.

MySQL Fabric se siente más como un marco que como un producto cerrado. De hecho, incluso algunas presentaciones oficiales lo introducen como marco. Como framework, está implementado en python, un lenguaje interpretado amigable y ampliamente disponible. Creemos que esto significa que MySQL Fabric debe adaptarse a necesidades específicas con pocas molestias.

  • Se centra en las versiones de MySQL 5.6.10 y posteriores.

Para no preocuparse por la compatibilidad inversa, la implementación debería ser más sencilla. Tome como ejemplo la promoción del servidor secundario después de que el servidor principal se caiga. GTID hace esto mucho más simple.

En el lado malo:

  • Es un poco áspero alrededor de los bordes.

Esto está planeado para un nuevo producto y, para ser honesto, la mayoría de los problemas que enfrentamos se han convertido en un problema de documentación y no en un problema real con el software. Los documentos todavía están un poco verdes, pero los comentarios del código fuente son buenos y muchos, así que si quieres ensuciarte las manos y entender realmente cómo funciona, este es el camino que te sugerimos.

  • Algunas cosas necesitan ayuda de MySQL para implementarlas correctamente, y MySQL no las proporciona (¿todavía?).

Un ejemplo: actualmente es imposible garantizar que los scripts nunca vayan al fragmento equivocado. Como dijimos antes, en el servidor mysqld individual, un fragmento es solo una tabla, punto. Idealmente, una versión futura de MySQL debería extender la funcionalidad de la variable @read_only y permitirle marcar selectivamente partes de los datos como de solo lectura. Si podemos marcar una tabla específica como de solo lectura, o como actualización solo cuando se cumple una determinada condición (es decir, DONDE id entre y ), aumentaría mucho la seguridad de la fragmentación.

  • Se centra en las versiones de MySQL 5.6.10.

Sí, dijimos que era bueno, pero la desventaja obvia es que no puede considerar usar MySQL Fabric si está en una versión anterior de MySQL, y muchas personas todavía lo están.

  • En las configuraciones de alta disponibilidad, MySQL Fabric en sí mismo puede convertirse en un único punto de falla

MySQL Fabric (el ‘nodo’ XML-RPC) y su almacén de datos (la instancia de mysqld que almacena los datos de MySQL Fabric) son un único punto de falla que debe abordarse. En términos prácticos, el impacto de MySQL Fabric variará según su caso de uso. Si solo usa la utilidad mysqlfabric para administrar servidores, no sucederá nada mientras todos los servidores de un grupo continúen funcionando. Sin embargo, si utiliza uno de los conectores especiales para acceder al grupo, su aplicación no funcionará. Esto es factible, y discutiremos algunos enfoques en las publicaciones de HA, pero creemos que la mejor solución para el futuro es que MySQL Fabric aborde esto en el futuro al permitirle instalar múltiples Nodos Fabric y hacer que se monitoreen entre sí y se promocionen. uno nuevo activo si es necesario.

Que viene despues

En los próximos días, escribiremos más sobre esto, describiendo cómo configurar HA y clústeres fragmentados con MySQL Fabric, repasando el proceso e incluso tratando de ver cómo y cuándo puede fallar. ¡Nos divertimos mucho haciendo esto y esperamos que pases un buen rato leyendo y experimentándolo tú mismo!

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