sql >> Base de Datos >  >> RDS >> Mysql

Equilibrio de carga de base de datos en la nube - MySQL Master Failover con ProxySQL 2.0:primera parte (implementación)

La nube proporciona entornos muy flexibles para trabajar. Puede escalarlo hacia arriba y hacia abajo fácilmente agregando o eliminando nodos. Si es necesario, puede crear fácilmente un clon de su entorno. Esto se puede usar para procesos como actualizaciones, pruebas de carga, recuperación ante desastres. El principal problema con el que debe lidiar es que las aplicaciones deben conectarse a las bases de datos de alguna manera, y las configuraciones flexibles pueden ser complicadas para las bases de datos, especialmente con configuraciones maestro-esclavo. Afortunadamente, hay algunas opciones para facilitar este proceso.

Una forma es utilizar un proxy de base de datos. Hay varios proxies para elegir, pero en esta publicación de blog usaremos ProxySQL, un conocido proxy disponible para MySQL y MariaDB. Vamos a mostrar cómo puede usarlo para mover de manera eficiente el tráfico entre los nodos de MySQL sin un impacto visible para la aplicación. También vamos a explicar algunas limitaciones y desventajas de este enfoque.

Configuración inicial de la nube

Primero, analicemos la configuración. Usaremos instancias de AWS EC2 para nuestro entorno. Como solo estamos probando, realmente no nos importa la alta disponibilidad más allá de lo que queremos demostrar que es posible:cambios maestros continuos. Por lo tanto, utilizaremos un solo nodo de aplicación y un solo nodo ProxySQL. Según las buenas prácticas, ubicaremos ProxySQL en el nodo de la aplicación y la aplicación se configurará para conectarse a ProxySQL a través del socket Unix. Esto reducirá la sobrecarga relacionada con las conexiones TCP y aumentará la seguridad:el tráfico de la aplicación al proxy no abandonará la instancia local, dejando solo ProxySQL -> Conexión MySQL para cifrar. Nuevamente, como esta es una prueba simple, no configuraremos SSL. En entornos de producción, desea hacer eso, incluso si usa VPC.

El entorno se verá como en el siguiente diagrama:

Como aplicación, usaremos Sysbench, un programa de referencia sintético para MySQL . Tiene una opción para deshabilitar y habilitar el uso de transacciones, que usaremos para demostrar cómo las maneja ProxySQL.

Instalación de un clúster de replicación de MySQL mediante ClusterControl

Para que la implementación sea rápida y eficiente, vamos a utilizar ClusterControl para implementar la configuración de replicación de MySQL por nosotros. La instalación de ClusterControl requiere solo un par de pasos. No entraremos en detalles aquí, pero debe abrir nuestro sitio web, registrarse e instalar ClusterControl debería ser bastante sencillo. Tenga en cuenta que debe configurar SSH sin contraseña entre la instancia de ClusterControl y todos los nodos que administraremos con ella.

Una vez que se haya instalado ClusterControl, puede iniciar sesión. Aparecerá un asistente de implementación:

Como ya tenemos instancias que se ejecutan en la nube, por lo tanto, seguiremos con Opción “Desplegar”. Se nos presentará la siguiente pantalla:

Seleccionaremos la replicación de MySQL como el tipo de clúster y debemos proporcionar conectividad detalles. Puede ser una conexión usando el usuario root o también puede ser un usuario sudo con o sin contraseña.

En el siguiente paso, tenemos que tomar algunas decisiones. Usaremos Percona Server for MySQL en su última versión. También tenemos que definir una contraseña para el usuario root en los nodos que implementaremos.

En el paso final tenemos que definir una topología - iremos con lo que propusimos al principio:un amo y tres esclavos.

ClusterControl iniciará la implementación; podemos rastrearlo en la pestaña Actividad, como se muestra en la captura de pantalla anterior.

Una vez completada la implementación, podemos ver el clúster en la lista de clústeres:

Instalación de ProxySQL 2.0 mediante ClusterControl

El siguiente paso será implementar ProxySQL. ClusterControl puede hacer esto por nosotros.

Podemos hacer esto en Administrar -> Load Balancer.

Como solo estamos probando cosas, vamos a reutilizar la instancia de ClusterControl para ProxySQL y Sysbench. En la vida real, probablemente querrá usar su servidor de aplicaciones "real". Si no puede encontrarlo en el menú desplegable, siempre puede escribir la dirección del servidor (IP o nombre de host) a mano.

También queremos definir las credenciales para el usuario administrativo y de supervisión. También verificamos que se implementará ProxySQL 2.0 (siempre puede cambiarlo a 1.4.x si lo necesita).

En la parte inferior del asistente definiremos el usuario que será creado en MySQL y ProxySQL. Si tiene una aplicación existente, probablemente quiera usar un usuario existente. Si utiliza numerosos usuarios para su aplicación, siempre puede importar el resto de ellos más tarde, después de que se implemente ProxySQL.

Queremos asegurarnos de que todas las instancias de MySQL se configuren en ProxySQL. Usaremos transacciones explícitas, por lo que configuraremos el interruptor en consecuencia. Esto es todo lo que necesitábamos hacer:el resto es hacer clic en el botón "Implementar ProxySQL" y dejar que ClusterControl haga lo suyo.

Cuando se complete la instalación, ProxySQL aparecerá en la lista de nodos en el racimo. Como puede ver en la captura de pantalla anterior, ya detectó la topología y los nodos distribuidos en los grupos de host de lectores y escritores.

Instalación de Sysbench

El paso final será crear nuestra “aplicación” instalando Sysbench. El proceso es bastante simple. Al principio tenemos que instalar los requisitos previos, las bibliotecas y las herramientas necesarias para compilar Sysbench:

[email protected]:~# apt install git automake libtool make libssl-dev pkg-config libmysqlclient-dev

Entonces queremos clonar el repositorio de sysbench:

[email protected]:~# git clone https://github.com/akopytov/sysbench.git

Finalmente queremos compilar e instalar Sysbench:

[email protected]:~# cd sysbench/

[email protected]:~/sysbench# ./autogen.sh && ./configure && make && make install

Esto es todo, Sysbench ha sido instalado. Ahora necesitamos generar algunos datos. Para eso, primero, necesitamos crear un esquema. Nos conectaremos a ProxySQL local y a través de él crearemos un esquema 'sbtest' en el maestro. Tenga en cuenta que utilizamos un socket Unix para la conexión con ProxySQL.

[email protected]:~/sysbench# mysql -S /tmp/proxysql.sock -u sbtest -psbtest

mysql> CREATE DATABASE sbtest;

Query OK, 1 row affected (0.01 sec)

Ahora podemos usar sysbench para llenar la base de datos con datos. Nuevamente, usamos el socket Unix para la conexión con el proxy:

[email protected]:~# sysbench /root/sysbench/src/lua/oltp_read_write.lua --threads=4 --events=0 --time=3600 --mysql-socket=/tmp/proxysql.sock --mysql-user=sbtest --mysql-password=sbtest --tables=32 --report-interval=1 --skip-trx=on --table-size=100000 --db-ps-mode=disable prepare

Una vez que los datos estén listos, podemos proceder a nuestras pruebas.

Conclusión

En la segunda parte de este blog, analizaremos el manejo de las conexiones, la conmutación por error y su configuración de ProxySQL que pueden ayudarnos a administrar el interruptor maestro de una manera que sea menos intrusiva para la aplicación.