MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Équilibrage de charge de base de données avec ProxySQL et AWS Aurora

ProxySQL est une solution éprouvée qui aide les administrateurs de bases de données à gérer les exigences de haute disponibilité de leurs bases de données. Parce qu'il est compatible SQL, il peut également être utilisé pour façonner le trafic vers les bases de données - vous pouvez acheminer des requêtes vers des nœuds particuliers, vous pouvez réécrire des requêtes si nécessaire, vous pouvez également limiter le trafic, implémenter un pare-feu SQL, créer un miroir de votre trafic et envoyez-le à un groupe d'hôtes séparé.

ProxySQL 2.0.5 prend en charge nativement Galera Cluster, MySQL Replication et MySQL Group Replication. Malheureusement, il ne prend pas en charge, par défaut, AWS Aurora; mais il existe toujours une solution de contournement que vous pouvez utiliser.

Vous vous demandez peut-être pourquoi devrais-je m'embêter avec ProxySQL alors qu'AWS me fournit un point de terminaison qui fera la séparation lecture-écriture pour moi ? C'est effectivement le cas, mais ce n'est que la séparation r/w. ProxySQL, d'autre part, vous permet non seulement de séparer les lectures des écritures, mais également de prendre le contrôle du trafic de votre base de données. ProxySQL peut souvent éviter que vos bases de données ne soient surchargées en réécrivant simplement une seule requête.

ProxySQL 2.0.5 et AWS Aurora

Si vous décidez d'essayer ProxySQL, vous devez suivre quelques étapes. Tout d'abord, vous aurez besoin d'une instance EC2 pour installer ProxySQL. Une fois que l'instance est opérationnelle, vous pouvez installer la dernière version de ProxySQL. Nous vous recommandons d'utiliser le référentiel pour cela. Vous pouvez le configurer en suivant les étapes de la page de documentation :https://github.com/sysown/proxysql/wiki. Pour Ubuntu 16.04 LTS, que nous avons utilisé, vous devez exécuter :

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

Ensuite, il est temps d'installer ProxySQL :

apt-get update

apt-get install proxysql

Ensuite, nous devons vérifier que nous avons la connectivité de notre instance ProxySQL aux nœuds AWS Aurora. Nous utiliserons des points de terminaison directs pour la connectivité.

Nous pouvons facilement tester la connectivité en utilisant telnet vers le point de terminaison correct sur le port 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.

Le premier a l'air bien. Nous allons continuer avec le deuxième nœud 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.

Fonctionne très bien aussi. Si vous ne pouvez pas vous connecter aux nœuds Aurora, vous devez vous assurer que tous les bits de sécurité sont correctement alignés :vérifiez la configuration du VPC, vérifiez si le nœud ProxySQL peut accéder au VPC d'Aurora, vérifiez si les groupes de sécurité autorisent le passage du trafic. La couche de sécurité réseau AWS peut être difficile à configurer si vous n'avez pas l'expérience, mais vous devriez finalement pouvoir la faire fonctionner.

Une fois la connectivité réglée, nous devrons créer un utilisateur sur Aurora. Nous utiliserons cet utilisateur pour surveiller les nœuds Aurora dans ProxySQL. Tout d'abord, nous devrons peut-être installer le client MySQL sur le nœud ProxySQL :

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

Ensuite, nous utiliserons le point de terminaison du cluster pour nous connecter au rédacteur et créer un utilisateur dessus :

[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)

Une fois cela fait, nous pouvons nous connecter à l'interface d'administration ProxySQL (par défaut sur le port 6032) pour définir l'utilisateur du moniteur et son mot de passe.

[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)

Il est maintenant temps de définir les nœuds Aurora dans 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)

Comme vous pouvez le voir, nous utilisons leurs points de terminaison directs comme nom d'hôte. Une fois cela fait, nous utiliserons la table mysql_replication_hostgroup pour définir les groupes d'hôtes de lecture et d'écriture. Nous devrons également passer le type de vérification correct - par défaut, ProxySQL recherche la variable "read_only" tandis qu'Aurora utilise "innodb_read_only" pour différencier l'auteur des lecteurs.

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)

Ça y est, nous pouvons maintenant voir comment ProxySQL a configuré les nœuds dans la configuration d'exécution :

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)

Comme vous pouvez le voir, dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com est l'auteur. Essayons le basculement maintenant :

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)

Comme vous pouvez le voir, le rédacteur (groupe d'hôtes 10) est passé au deuxième nœud.

Conclusion

C'est essentiellement cela - comme vous pouvez le constater, la configuration des nœuds AWS Aurora dans ProxySQL est un processus assez simple.