Cómo implementar la función de equilibrio de carga de MySQL
MySQL es un sistema de gestión de bases de datos relacionales (RDBMS) de código abierto, multiproceso, de alta velocidad y alto rendimiento, basado en una estructura cliente/servidor. Comenzó en 1979 como el sistema de base de datos UNIREG creado por Michael Widenius para la empresa sueca TcX. En ese momento, UNIREG no contaba con una interfaz SQL (StructuredQueryLanguage), lo que limitaba su aplicación.
En mayo de 1996, Widenius desarrolló la versión inicial de MySQL y comenzó a publicarla en Internet. Los desarrolladores de MySQL han estado prestando atención a su rendimiento desde el principio y no han escatimado en gastos en el conjunto de funciones. Hasta el día de hoy, MySQL aún mantiene su verdadero carácter, con alta velocidad y alto rendimiento como principio principal. Con el tiempo, MySQL también ha agregado características avanzadas de productos de bases de datos grandes, como procedimientos almacenados, vistas, activadores, etc., lo que hace que comience a implementarse y aplicarse en sistemas de bases de datos de nivel empresarial [1].
En octubre de 2008, SUN adquirió MySQLAB y comenzó a ingresar al campo del código abierto. Con el código abierto del pesado sistema operativo Solaris, la participación de SUNMySQL en el mercado de bases de datos aumentará aún más. Por lo tanto, implementar un clúster de servidores MySQL con función de equilibrio de carga en un entorno de producción tiene una gran importancia práctica para mejorar la velocidad, estabilidad y escalabilidad de los sistemas de aplicaciones de bases de datos empresariales, y también puede reducir efectivamente el costo de inversión de los sistemas de aplicaciones.
1. Idea básica del equilibrio de carga
En un clúster de servidores, intente lograr una carga promedio tanto como sea posible. El enfoque habitual es configurar un equilibrador de carga (dispositivo de hardware especializado) en la parte frontal del servidor. El equilibrio de carga de MySQL suele ser inseparable de la fragmentación de datos (dividir los datos en pequeños fragmentos y almacenarlos en diferentes nodos de base de datos), la replicación y la replicación. etc.
La principal contribución del equilibrio de carga no es solo distribuir las solicitudes de la base de datos de manera uniforme, sino también proporcionar políticas de gestión de lectura/escritura. Al distribuir la solicitud, se determina qué nodos se pueden escribir y leer, y luego la solicitud se envía al nodo designado para realizar la operación.
2. Formas de lograr el equilibrio de carga:
1. Separación de lectura y escritura de MySQL:
Cuando se copia MySQL, se crean múltiples copias de datos (bases de datos en espera). generado, Para reducir la presión del servidor, la base de datos en espera se utiliza para procesar las operaciones de lectura, y la base de datos principal puede manejar la lectura y la escritura al mismo tiempo. Esta es una estrategia común para que los clústeres MySQL logren la separación de lectura y escritura.
Dado que la replicación de la base de datos en espera es asíncrona y no se puede sincronizar en tiempo real, la principal dificultad en la separación de lectura y escritura son también los datos sucios en la base de datos en espera. Por lo general, si utiliza una base de datos en espera para la lectura, los requisitos en tiempo real para los datos no deberían ser demasiado altos. En este sentido, MySQL proporciona varios métodos comunes de separación de lectura y escritura, como separación de lectura y escritura basada en consultas, basada en datos sucios, basada en sesiones, etc. Si está interesado, puede continuar estudiando.
La separación de lectura y escritura establecida por mysql reduce la cantidad de solicitudes de la base de datos principal y envía una gran cantidad de operaciones de lectura a la base de datos en espera para lograr el equilibrio de carga.
2. Modificar DNS
En equilibrio de carga de alta concurrencia (1): análisis de arquitectura empresarial y DNS, DNS y cómo DNS realiza la carga se presentan en detalle a través de n Cada uno. La IP del servidor se asigna a un nombre de dominio y la solicitud se envía a diferentes servidores IP para su procesamiento en función de las diferentes características de identificación de la solicitud.
3. Introducir middleware
mysql proporciona oficialmente un middleware para la carga de mysql, mysql_proxy, que también debe instalarse en el servidor y modificar el archivo de configuración (IP del servidor mysql). En esencia, es similar a nginx y también es un servidor proxy.
4. Utilice la replicación mysql para descargar operaciones de consulta.
El uso de la replicación maestro-esclavo de mysql puede descargar eficazmente operaciones de actualización y consultas. La implementación específica es un servidor maestro, responsable de las operaciones de actualización. Varios servidores esclavos son responsables de las operaciones de consulta y la sincronización de datos se logra mediante la replicación entre maestros y esclavos. Se utilizan varios servidores esclavos para garantizar la disponibilidad, por un lado, y por otro lado, se pueden crear diferentes índices para satisfacer las necesidades de diferentes consultas.
Para la situación en la que no es necesario replicar todas las tablas entre el maestro y el esclavo, puede crear un servidor esclavo virtual en el servidor maestro y configurar la tabla que debe copiarse en el servidor esclavo. como motor de agujero negro, y luego defina replicate El parámetro -do-table solo copia estas tablas, filtrando así los binlogs que deben copiarse y reduciendo el ancho de banda para la transmisión de binlog. Debido a que el servidor esclavo virtual solo creó funciones para filtrar binlog y en realidad no registra ningún dato, el impacto en el rendimiento del servidor de base de datos principal también es muy limitado.
El problema con la descarga de consultas mediante replicación es que cuando la base de datos maestra se actualiza con frecuencia o hay un problema de red, puede haber diferencias en los datos entre el maestro y el esclavo, causando objeciones a los resultados de la consulta. Esto debe hacerse durante el diseño de la aplicación. Considere algo.
5. Adopte una arquitectura de base de datos distribuida
MySQL admite transacciones distribuidas a partir de 5.0.3. Actualmente, las transacciones distribuidas solo son compatibles con el motor de almacenamiento Innodb. La arquitectura de base de datos distribuida es adecuada para grandes volúmenes de datos y situaciones de alta carga, y tiene buena escalabilidad y alta disponibilidad. Al distribuir datos entre múltiples servidores, la carga se promedia entre múltiples servidores y se mejora la eficiencia de ejecución del acceso. Durante la implementación específica, puede utilizar la función Cluster de mysql (motor NDB) o escribir su propio programa para implementar transacciones globales.