sql >> Base de Datos >  >> RDS >> MariaDB

Equilibrio de carga de base de datos con ProxySQL y AWS Aurora

ProxySQL es una solución comprobada que ayuda a los administradores de bases de datos a lidiar con los requisitos de alta disponibilidad de sus bases de datos. Debido a que es compatible con SQL, también se puede usar para dar forma al tráfico que se dirige hacia las bases de datos:puede enrutar consultas a nodos particulares, puede reescribir consultas si fuera necesario, también puede acelerar el tráfico, implementar SQL firewall, crear un espejo de su tráfico y enviarlo a un grupo de host separado.

ProxySQL 2.0.5 es compatible de forma nativa con Galera Cluster, MySQL Replication y MySQL Group Replication. Lamentablemente, de forma predeterminada, no es compatible con AWS Aurora; pero todavía hay una solución alternativa que puede usar.

Puede que se esté preguntando, ¿por qué debo molestarme con ProxySQL cuando AWS me proporciona un punto final que hará la división de lectura y escritura por mí? De hecho, ese es el caso, pero es solo la división r/w. ProxySQL, por otro lado, le brinda la oportunidad no solo de separar las lecturas de las escrituras, sino también de tomar el control del tráfico de su base de datos. ProxySQL a menudo puede evitar que sus bases de datos se sobrecarguen simplemente reescribiendo una sola consulta.

ProxySQL 2.0.5 y AWS Aurora

Si decide probar ProxySQL, hay un par de pasos que debe seguir. Primero, necesitará una instancia EC2 para instalar ProxySQL. Una vez que tenga la instancia en funcionamiento, puede instalar la versión más reciente de ProxySQL. Recomendamos usar el repositorio para eso. Puede configurarlo siguiendo los pasos en la página de documentación:https://github.com/sysown/proxysql/wiki. Para Ubuntu 16.04 LTS, que usamos, debe ejecutar:

apt-get install -y lsb-release

wget -O - 'https://repo.proxysql.com/ProxySQL/repo_pub_key' | apt-key add -

echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/$(lsb_release -sc)/ ./ \

| tee /etc/apt/sources.list.d/proxysql.list

Entonces es hora de instalar ProxySQL:

apt-get update

apt-get install proxysql

Luego, debemos verificar que tenemos la conectividad de nuestra instancia de ProxySQL a los nodos de AWS Aurora. Usaremos puntos finales directos para la conectividad.

Podemos probar fácilmente la conectividad usando telnet al punto final correcto en el puerto 3306 :

[email protected]:~# telnet dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com 3306

Trying 10.0.0.53...

Connected to dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com.

Escape character is '^]'.

J

5.7.12_2>ZWP-&[Ov8NzJ:H#Mmysql_native_password^CConnection closed by foreign host.

El primero se ve bien. Continuaremos con el segundo nodo Aurora:

[email protected]:~# telnet dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com 3306

Trying 10.0.1.90...

Connected to dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com.

Escape character is '^]'.

J

tr3'3rynMmysql_native_password^CConnection closed by foreign host.

También funciona muy bien. Si no puede conectarse a los nodos de Aurora, debe asegurarse de que todos los bits de seguridad estén alineados correctamente:verifique la configuración de VPC, vea si el nodo ProxySQL puede acceder a la VPC de Aurora, verifique si los grupos de seguridad permiten el paso del tráfico. La capa de seguridad de la red de AWS puede ser difícil de configurar si no tiene la experiencia, pero finalmente debería poder hacer que funcione.

Una vez resuelta la conectividad, necesitaremos crear un usuario en Aurora. Usaremos ese usuario para monitorear los nodos de Aurora en ProxySQL. Primero, es posible que tengamos que instalar el cliente MySQL en el nodo ProxySQL:

[email protected]:~# apt install mysql-client-core-5.7

Luego usaremos el extremo del clúster para conectarnos al escritor y crear un usuario en él:

[email protected]:~# mysql -h dbtest.cluster-cqb1vho43rod.eu-central-1.rds.amazonaws.com -u root -ppassword

mysql> CREATE USER 'monuser'@'10.0.0.191' IDENTIFIED BY 'mon1t0r';

Query OK, 0 rows affected (0.02 sec)

mysql> GRANT REPLICATION CLIENT ON *.* TO 'monuser'@'10.0.0.191';

Query OK, 0 rows affected (0.00 sec)

Una vez hecho esto, podemos iniciar sesión en la interfaz de administración de ProxySQL (por defecto en el puerto 6032) para definir el usuario del monitor y su contraseña.

[email protected]:~# mysql -P6032 -u admin -padmin -h127.0.0.1

mysql> SET mysql-monitor_username='monuser';

Query OK, 1 row affected (0.00 sec)



mysql> SET mysql-monitor_password='mon1t0r';

Query OK, 1 row affected (0.00 sec)

mysql> LOAD MYSQL VARIABLES TO RUNTIME;

Query OK, 0 rows affected (0.00 sec)

mysql> SAVE MYSQL VARIABLES TO DISK;

Query OK, 116 rows affected (0.00 sec)

Ahora es el momento de definir los nodos de Aurora en ProxySQL:

mysql> INSERT INTO mysql_servers (hostgroup_id, hostname) VALUES (10, 'dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com'), (20, 'dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com');

Query OK, 2 rows affected (0.01 sec)

Como puede ver, usamos sus extremos directos como nombre de host. Una vez hecho esto, usaremos la tabla mysql_replication_hostgroup para definir los grupos de host de lectores y escritores. También tendremos que pasar el tipo de verificación correcto:de forma predeterminada, ProxySQL busca la variable "solo lectura", mientras que Aurora usa "innodb_solo_lectura" para diferenciar entre el escritor y los lectores.

mysql> SHOW CREATE TABLE mysql_replication_hostgroups\G

*************************** 1. row ***************************

       table: mysql_replication_hostgroups

Create Table: CREATE TABLE mysql_replication_hostgroups (

    writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,

    reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>=0),

    check_type VARCHAR CHECK (LOWER(check_type) IN ('read_only','innodb_read_only','super_read_only')) NOT NULL DEFAULT 'read_only',

    comment VARCHAR NOT NULL DEFAULT '', UNIQUE (reader_hostgroup))

1 row in set (0.00 sec)



mysql> INSERT INTO mysql_replication_hostgroups VALUES (10, 20, 'innodb_read_only', 'Aurora');

Query OK, 1 row affected (0.00 sec)

mysql> LOAD MYSQL SERVERS TO RUNTIME;

Query OK, 0 rows affected (0.00 sec)

Esto es todo, ahora podemos ver cómo ProxySQL configuró los nodos en la configuración de tiempo de ejecución:

mysql> SELECT hostgroup_id, hostname, port  FROM runtime_mysql_servers;

+--------------+-----------------------------------------------------------------------------+------+

| hostgroup_id | hostname                                                                    | port |

+--------------+-----------------------------------------------------------------------------+------+

| 10           | | 3306 |

| 20           | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |

| 20           | dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com               | 3306 |

+--------------+-----------------------------------------------------------------------------+------+

3 rows in set (0.00 sec)

Como puede ver, dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com es el escritor. Probemos la conmutación por error ahora:

mysql> SELECT hostgroup_id, hostname, port  FROM runtime_mysql_servers;

+--------------+-----------------------------------------------------------------------------+------+

| hostgroup_id | hostname                                                                    | port |

+--------------+-----------------------------------------------------------------------------+------+

| 10           | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |

| 20           | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |

| 20           | dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com               | 3306 |

+--------------+-----------------------------------------------------------------------------+------+

3 rows in set (0.00 sec)

Como puede ver, el escritor (hostgroup 10) ha cambiado al segundo nodo.

Conclusión

Esto es básicamente todo, como puede ver, configurar los nodos de AWS Aurora en ProxySQL es un proceso bastante simple.