Comment utiliser ProxySQL comme équilibreur de charge pour MySQL sous Ubuntu 16.04

introduction

ProxySQL est un serveur proxy MySQL open source, ce qui signifie qu'il sert d'intermédiaire entre un serveur MySQL et les applications qui accèdent à ses bases de données. ProxySQL peut améliorer les performances en répartissant le trafic entre un pool de plusieurs serveurs de base de données. Il améliore également la disponibilité en basculant automatiquement sur un serveur de secours en cas de défaillance d'un ou plusieurs serveurs.

Dans ce guide, vous allez configurer ProxySQL en tant queload balancer pour plusieurs serveurs MySQL avec basculement automatique. Par exemple, ce didacticiel utilise un cluster répliqué multi-primaire de trois serveurs MySQL, mais vous pouvez également utiliser une approche similaire avec d'autres configurations de cluster.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

[[step-1 -—- Installing-proxysql]] == Étape 1 - Installation de ProxySQL

Les développeurs de ProxySQL fournissent des packages Ubuntu officiels pour toutes les versions de ProxySQL surtheir GitHub releases page, nous allons donc télécharger la dernière version du package à partir de là et l'installer.

Vous pouvez trouver le dernier package sur lesrelease list. La convention de dénomination estproxysql_version-distribution.deb, oùversion est une chaîne comme1.4.4 pour la version 1.4.4, etdistribution est une chaîne commeubuntu16_amd64 pour 64 bits Ubuntu 16.04.

Téléchargez le dernier package officiel, qui est la version 1.4.4 au moment de la rédaction, dans le répertoire/tmp.

cd /tmp
curl -OL https://github.com/sysown/proxysql/releases/download/v1.4.4/proxysql_1.4.4-ubuntu16_amd64.deb

Installez le package avecdpkg, qui est utilisé pourmanage .deb software packages. L'indicateur-i indique que nous souhaitons installer à partir du fichier spécifié.

sudo dpkg -i proxysql_*

À ce stade, vous n'avez plus besoin du fichier.deb, vous pouvez donc le supprimer.

rm proxysql_*

Ensuite, nous aurons besoin d’une application cliente MySQL pour nous connecter à l’instance ProxySQL. En effet, ProxySQL utilise en interne une interface compatible avec MySQL pour les tâches administratives. Nous utiliserons l'outil de ligne de commandemysql, qui fait partie du packagemysql-client disponible dans les référentiels Ubuntu.

Mettez à jour votre référentiel de packages pour vous assurer que vous disposez de la dernière version pré-groupée, puis installez le packagemysql-client.

sudo apt-get update
sudo apt-get install mysql-client

Vous avez maintenant toutes les conditions requises pour exécuter ProxySQL, mais le service ne démarre pas automatiquement après l’installation, démarrez-le donc manuellement maintenant.

sudo systemctl start proxysql

ProxySQL devrait maintenant être en cours d'exécution avec sa configuration par défaut en place. Vous pouvez vérifier en utilisantsystemctl.

systemctl status proxysql

La sortie ressemblera à ceci:

Output● proxysql.service - LSB: High Performance Advanced Proxy for MySQL
   Loaded: loaded (/etc/init.d/proxysql; bad; vendor preset: enabled)
   Active: active (running) since Thu 2017-12-21 19:19:20 UTC; 5s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 12350 ExecStart=/etc/init.d/proxysql start (code=exited, status=0/SUCCESS)
    Tasks: 23
   Memory: 30.9M
      CPU: 86ms
   CGroup: /system.slice/proxysql.service
           ├─12355 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql
           └─12356 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql

La ligneactive (running) signifie que ProxySQL est installé et en cours d'exécution.

Ensuite, nous renforcerons la sécurité en définissant le mot de passe utilisé pour accéder à l’interface administrative de ProxySQL.

[[step-2 -—- setting-the-proxysql-administrator-password]] == Étape 2 - Définition du mot de passe de l'administrateur ProxySQL

La première fois que vous démarrez une nouvelle installation ProxySQL, il utilise un fichier de configuration fourni par le package pour initialiser les valeurs par défaut de toutes ses variables de configuration. Après cette initialisation, ProxySQL enregistre sa configuration dans une base de données que vous pouvez gérer et modifier via la ligne de commande.

Pour définir le mot de passe administrateur dans ProxySQL, nous allons nous connecter à cette base de données de configuration et mettre à jour les variables appropriées.

Tout d'abord, accédez à l'interface d'administration. Vous serez invité à entrer le mot de passe qui, sur une installation par défaut, estadmin.

mysql -u admin -p -h 127.0.0.1 -P 6032 --prompt='ProxySQLAdmin> '
  • -u spécifie l'utilisateur sous lequel nous voulons nous connecter, qui est iciadmin, l'utilisateur par défaut pour les tâches administratives telles que la modification des paramètres de configuration.

  • -h 127.0.0.1 dit àmysql de se connecter à l'instance ProxySQL locale. Nous devons définir cela explicitement car ProxySQL n’écoute pas le fichier socket quemysql assume par défaut.

  • -P spécifie le port auquel se connecter. L'interface d'administration de ProxySQL écoute les6032.

  • --prompt est un indicateur facultatif qui modifie l'invite par défaut, qui est normalementmysql>. Ici, nous le changeons enProxySQLAdmin> pour indiquer clairement que nous sommes connectés à l'interface d'administration de ProxySQL. Cela sera utile pour éviter toute confusion par la suite, lorsque nous nous connecterons également aux interfaces MySQL sur les serveurs de base de données répliqués.

Une fois que vous vous connectez, vous verrez l'inviteProxySQLAdmin>:

ProxySQL administration console promptWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ProxySQLAdmin>

Modifiez le mot de passe du compte administratif en mettant à jour (UPDATE) la variable de configurationadmin-admin_credentials dans la base de donnéesglobal_variables. N'oubliez pas de remplacerpassword dans la commande ci-dessous par un mot de passe fort de votre choix.

UPDATE global_variables SET variable_value='admin:password' WHERE variable_name='admin-admin_credentials';
OutputQuery OK, 1 row affected (0.00 sec)

Cette modification n’aura pas d’effet immédiat en raison du fonctionnement du système de configuration de ProxySQL. Il se compose de trois couches distinctes:

  • memory, qui est modifié lors des modifications depuis l'interface de ligne de commande.

  • runtime, qui est utilisé par ProxySQL comme configuration effective.

  • disk, qui est utilisé pour faire persister une configuration lors des redémarrages.

À l'heure actuelle, le changement que vous avez effectué est enmemory. Pour mettre la modification en vigueur, vous devez copier les paramètres dememory dans le domaineruntime, puis les enregistrer dansdisk pour les faire persister.

LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;

Ces commandesADMIN gèrent uniquement les variables liées à l'interface de ligne de commande administrative. ProxySQL expose des commandes similaires, commeMYSQL, pour gérer d'autres parties de sa configuration. Nous les utiliserons plus tard dans ce tutoriel.

Maintenant que ProxySQL est installé et fonctionne avec un nouveau mot de passe administrateur, configurons les 3 nœuds MySQL afin que ProxySQL puisse les surveiller. Laissez l’interface ProxySQL ouverte, car nous l’utiliserons plus tard.

[[step-3 -—- configuring-monitoring-in-mysql]] == Étape 3 - Configuration de la surveillance dans MySQL

ProxySQL doit communiquer avec les nœuds MySQL pour pouvoir évaluer leur état. Pour ce faire, il doit pouvoir se connecter à chaque serveur avec un utilisateur dédié.

Ici, nous allons configurer l'utilisateur nécessaire sur les nœuds MySQL et installer des fonctions SQL supplémentaires permettant à ProxySQL d'interroger l'état de réplication du groupe.

Étant donné que la réplication de groupe MySQL est déjà en cours d'exécution, les étapes suivantes doivent être effectuées uniquement sura single member of the group.

Dans un deuxième terminal, connectez-vous à un serveur avec l'un des nœuds MySQL.

ssh sammy@your_mysql_server_ip_1

Téléchargez le fichier SQL contenant certaines fonctions nécessaires au bon fonctionnement de la réplication de groupe ProxySQL.

curl -OL https://gist.github.com/lefred/77ddbde301c72535381ae7af9f968322/raw/5e40b03333a3c148b78aa348fd2cd5b5dbb36e4d/addition_to_sys.sql

[.Remarque]##

Note: Ce fichier est fourni par les auteurs de ProxySQL, mais de manière ad hoc: c'est ungist dans un référentiel GitHub personnel, ce qui signifie qu'il est possible qu'il soit déplacé ou devienne obsolète. À l'avenir, il pourra être ajouté en tant que fichier versionné dans le référentiel officiel ProxySQL.

Vous pouvez en savoir plus sur le contexte et le contenu de ce fichier dans l'article de blog de l'auteur surnative ProxySQL support for MySQL group replication.

Vous pouvez afficher le contenu du fichier en utilisantless addition_to_sys.sql.

Lorsque vous êtes prêt, exécutez les commandes du fichier. Vous serez invité à entrer le mot de passe administratif MySQL.

mysql -u root -p < addition_to_sys.sql

Si la commande s'exécute correctement, elle ne produira aucun résultat. Dans ce cas, tous les nœuds MySQL exposeront désormais les fonctions nécessaires à ProxySQL pour reconnaître l’état de la réplication de groupe.

Ensuite, nous devons créer un utilisateur dédié qui sera utilisé par ProxySQL pour surveiller la santé des instances.

Ouvrez l'invite interactive MySQL, qui vous demandera à nouveau le mot de passeroot.

mysql -u root -p

Créez ensuite l'utilisateur dédié, que nous avons appelé icimonitor. Assurez-vous de changer le mot de passe en un mot fort.

CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitorpassword';

Accordez à l'utilisateur des privilèges pour interroger la condition du serveur MySQL à l'utilisateurmonitor.

GRANT SELECT on sys.* to 'monitor'@'%';

Enfin, appliquez les modifications.

FLUSH PRIVILEGES;

En raison de la réplication de groupe, une fois que vous avez ajouté l’utilisateur pour la surveillance de l’intégrité à un nœud MySQL, celui-ci est entièrement configuré sur les trois nœuds.

Ensuite, nous devons mettre à jour ProxySQL avec les informations de cet utilisateur afin qu’il puisse accéder aux nœuds MySQL.

[[step-4 -—- configuring-monitoring-in-proxysql]] == Étape 4 - Configuration de la surveillance dans ProxySQL

Pour configurer ProxySQL afin d'utiliser le nouveau compte utilisateur lors de la surveillance des nœuds, nous allonsUPDATE la variable de configuration appropriée. Ceci est très similaire à la façon dont nous définissons le mot de passe administrateur à l’étape 2.

De retour dans l'interface d'administration de ProxySQL, mettez à jour la variablemysql-monitor_username avec le nom d'utilisateur du nouveau compte.

UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';

Tout comme avant, la configuration n'est pas automatiquement appliquée, alors migrez-la dansruntime et enregistrez-la dansdisk. Cette fois, notez que nous utilisonsMYSQL au lieu deADMIN pour mettre à jour ces variables car nous modifions les variables de configuration MySQL.

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

Le compte de surveillance est configuré sur toutes les extrémités, et l'étape suivante consiste à informer ProxySQL des noeuds eux-mêmes.

[[step-5 -—- ajoutant-mysql-nodes-to-the-proxysql-server-pool]] == Étape 5 - Ajout de nœuds MySQL au pool de serveurs ProxySQL

Pour rendre ProxySQL conscient de nos trois nœuds MySQL, nous devons indiquer à ProxySQL comment les répartir sur seshost groups, qui sont des ensembles de nœuds désignés. Chaque groupe d'hôtes est identifié par un nombre positif, comme1 ou2. Les groupes d'hôtes peuvent router différentes requêtes SQL vers différents ensembles d'hôtes lors de l'utilisation du routage de requêtes ProxySQL.

Dans les configurations de réplication statique, les groupes hôtes peuvent être définis de manière arbitraire. Cependant, la prise en charge de la réplication de groupe de ProxySQL divise automatiquement tous les nœuds d’un groupe de réplication en quatre états logiques:

  • writers, qui sont des nœuds MySQL qui peuvent accepter des requêtes modifiant des données. ProxySQL s'assure de maintenir tous les nœuds principaux jusqu'à la quantité maximale définie dans ce groupe.

  • backup writers, qui sont également des nœuds MySQL qui peuvent accepter des requêtes modifiant des données. Cependant, ces nœuds ne sont pas désignés en tant qu'écrivains; Les nœuds principaux dépassant le nombre défini d'écrivains gérés sont conservés dans ce groupe et sont promus d'écrivains si l'un des écrivains échoue.

  • readers sont des nœuds MySQL qui ne peuvent pas accepter les requêtes modifiant les données et doivent être utilisés comme nœuds en lecture seule. ProxySQL ne met ici que les nœuds esclaves.

  • offline, qui concerne les nœuds qui se comportent mal en raison de problèmes tels que le manque de connectivité ou la lenteur du trafic.

Chacun de ces quatre états a des groupes d'hôtes correspondants, mais les identificateurs de groupe numériques ne sont pas attribués automatiquement.

En résumé, nous devons dire à ProxySQL quels identifiants il doit utiliser pour chaque état. Ici, nous utilisons1 pour le groupe d'hôtesoffline,2 pour le groupe d'hôteswriter,3 pour le groupe d'hôtesreader, et 4 pour le groupe d'hôtesbackup writer.

Pour définir ces identificateurs, créez une nouvelle ligne avec ces variables et valeurs dans la table de configuration demysql_group_replication_hostgroups.

INSERT INTO mysql_group_replication_hostgroups (writer_hostgroup, backup_writer_hostgroup, reader_hostgroup, offline_hostgroup, active, max_writers, writer_is_also_reader, max_transactions_behind) VALUES (2, 4, 3, 1, 1, 3, 1, 100);

Voici les variables supplémentaires définies dans cette ligne et leur rôle:

  • active défini sur1 active la surveillance par ProxySQL de ces groupes d'hôtes.

  • max_writers définit combien de nœuds peuvent agir en tant qu'écrivains. Nous avons utilisé3 ici car dans une configuration multi-primaire, tous les nœuds peuvent être traités égaux, donc ici nous avons utilisé3 (le nombre total de nœuds).

  • writer_is_also_reader défini sur1 indique à ProxySQL de traiter également les écrivains comme des lecteurs.

  • max_transactions_behind définit le nombre maximum de transactions retardées avant qu'un nœud soit classé commeoffline.

[.Remarque]##

Note: Étant donné que notre exemple utilise une topologie multi-primaire dans laquelle tous les nœuds peuvent écrire dans la base de données, nous équilibrerons toutes les requêtes SQL dans le groupe d'hôteswriter. Sur d'autres topologies, la division entre les nœudswriter (principaux) et les nœudsreader (secondaires) peut acheminer des requêtes en lecture seule vers différents nœuds / groupes d'hôtes que les requêtes d'écriture. ProxySQL ne le fait pas automatiquement, mais vous pouvezset up query routing using rules.

Maintenant que ProxySQL sait comment distribuer les nœuds entre les groupes d’hôtes, nous pouvons ajouter nos serveurs MySQL au pool. Pour ce faire, nous devonsINSERT l'adresse IP et le groupe d'hôtes initial de chaque serveur dans la tablemysql_servers, qui contient la liste des serveurs avec lesquels ProxySQL peut interagir.

Ajoutez chacun des trois serveurs MySQL, en veillant à remplacer les exemples d’adresses IP dans les commandes ci-dessous.

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '203.0.113.1', 3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '203.0.113.2', 3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '203.0.113.3', 3306);

Ici, la valeur2 définit tous ces nœuds comme des écrivains au départ, et3306 définit le port MySQL par défaut.

Comme avant, migrez ces modifications dansruntime et enregistrez-les dansdisk pour appliquer les modifications.

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

ProxySQL devrait maintenant répartir nos nœuds entre les groupes d’hôtes, comme spécifié. Vérifions cela en exécutant une requêteSELECT sur la tableruntim330e_mysql_servers, qui expose l'état actuel des serveurs que ProxySQL utilise.

SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;
Output+--------------+-------------+--------+
| hostgroup_id | hostname    | status |
+--------------+-------------+--------+
| 2            | 203.0.113.1 | ONLINE |
| 2            | 203.0.113.2 | ONLINE |
| 2            | 203.0.113.3 | ONLINE |
| 3            | 203.0.113.1 | ONLINE |
| 3            | 203.0.113.2 | ONLINE |
| 3            | 203.0.113.3 | ONLINE |
+--------------+-------------+--------+
6 rows in set (0.01 sec)

Dans le tableau des résultats, chaque serveur est répertorié deux fois: une fois chacun pour les ID de groupe d'hôtes2 et3, indiquant que les trois nœuds sont à la fois des écrivains et des lecteurs. Tous les nœuds sont marquésONLINE, ce qui signifie qu'ils sont prêts à être utilisés.

Cependant, avant de pouvoir les utiliser, nous devons configurer les informations d'identification de l'utilisateur pour accéder aux bases de données MySQL sur chaque nœud.

[[step-6 -—- Creating-the-mysql-users]] == Étape 6 - Création des utilisateurs MySQL

ProxySQL agit comme un équilibreur de charge; les utilisateurs finaux se connectent à ProxySQL, et ProxySQL transmet la connexion au nœud MySQL choisi. Pour se connecter à un nœud individuel, ProxySQL réutilise les informations d'identification avec lesquelles il a été accédé.

Pour autoriser l'accès aux bases de données situées sur les noeuds de réplication, nous devons créer un compte utilisateur avec les mêmes informations d'identification que ProxySQL, et accorder à cet utilisateur les privilèges nécessaires.

Comme à l'étape 3, les étapes suivantes doivent être exécutées uniquement sura single member of the group. Vous pouvez choisir n'importe quel membre.

Créez un nouvel utilisateur appeléplaygrounduser identifié avec le mot de passeplaygroundpassword.

CREATE USER 'playgrounduser'@'%' IDENTIFIED BY 'playgroundpassword';

Donnez-lui les privilèges pour accéder entièrement à la base de données de testplayground à partir dethe original group replication tutorial.

GRANT ALL PRIVILEGES on playground.* to 'playgrounduser'@'%';

Puis appliquez les modifications et quittez l'invite.

FLUSH PRIVILEGES;
EXIT;

Vous pouvez vérifier que l'utilisateur a été correctement créé en essayant de créer une base de données avec les informations d'identification nouvellement configurées directement sur le nœud.

Rouvrez l'interface MySQL avec le nouvel utilisateur, qui vous demandera le mot de passe.

mysql -u playgrounduser -p

Lorsque vous êtes connecté, exécutez une requête de test sur la base de donnéesplayground.

SHOW TABLES FROM playground;
Output+----------------------+
| Tables_in_playground |
+----------------------+
| equipment            |
+----------------------+
1 row in set (0.00 sec)

La liste visible des tables dans la base de données affichant la tableequipment créée dans le didacticiel de réplication d'origine confirme que l'utilisateur a été créé correctement sur les nœuds.

Vous pouvez maintenant vous déconnecter de l'interface MySQL, mais laissez le terminal avec la connexion au serveur ouvert. Nous allons l’utiliser pour exécuter des tests lors de la dernière étape.

EXIT;

Nous devons maintenant créer l'utilisateur correspondant sur le serveur ProxySQL.

[[step-7 -—- creation-the-proxysql-user]] == Étape 7 - Création de l'utilisateur ProxySQL

La dernière étape de configuration consiste à autoriser les connexions à ProxySQL avec l'utilisateurplaygrounduser et à transmettre ces connexions aux nœuds.

Pour ce faire, nous devons définir des variables de configuration dans la tablemysql_users, qui contient les informations d'identification de l'utilisateur. Dans l'interface ProxySQL, ajoutez le nom d'utilisateur, le mot de passe et le groupe d'hôtes par défaut à la base de données de configuration (qui est2, pour le groupe d'hôteswriter)

INSERT INTO mysql_users(username, password, default_hostgroup) VALUES ('playgrounduser', 'playgroundpassword', 2);

Migrez la configuration dansruntime et enregistrez-la dansdisk pour mettre la nouvelle configuration en vigueur.

LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

Pour vérifier que nous pouvons nous connecter aux nœuds de base de données à l'aide de ces informations d'identification, ouvrez une autre fenêtre de terminal et SSH sur le serveur ProxySQL. Nous aurons toujours besoin de l’invite d’administration plus tard, alors ne le fermez pas encore.

ssh sammy@your_proxysql_server_ip

ProxySQL écoute sur le port6033 les connexions client entrantes, essayez donc de vous connecter à la base de données réelle (pas à l'interface d'administration) en utilisantplaygrounduser et le port6033. Vous serez invité à entrer le mot de passe, qui étaitplaygroundpassword dans notre exemple.

mysql -u playgrounduser -p -h 127.0.0.1 -P 6033 --prompt='ProxySQLClient> '

Ici, nous définissons l'invite surProxySQLClient> afin de pouvoir la distinguer de l'invite de l'interface d'administration. Nous allons utiliser les deux lors du test de la configuration finale.

L'invite doit s'ouvrir, ce qui signifie que les informations d'identification ont été acceptées par ProxySQL lui-même.

ProxySQL client promptWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.5.30 (ProxySQL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

ProxySQLClient>

Exécutons une simple instruction pour vérifier si ProxySQL va se connecter à l’un des nœuds. Cette commande interroge la base de données pour connaître le nom d’hôte du serveur sur lequel elle est exécutée et renvoie le nom d’hôte du serveur comme seule sortie.

SELECT @@hostname;

Selon notre configuration, cette requête doit être dirigée par ProxySQL vers l'un de nos trois nœuds affectés au groupe d'hôteswriter. La sortie doit ressembler à ce qui suit, oùmember1 est le nom d'hôte de l'un des nœuds MySQL.

Output+------------+
| @@hostname |
+------------+
| member1    |
+------------+
1 row in set (0.00 sec)

Ceci termine la configuration permettant à ProxySQL d'équilibrer la charge des connexions entre les trois nœuds MySQL.

Dans la dernière étape, nous vérifierons que ProxySQL peut exécuter des instructions de lecture et d’écriture sur la base de données et qu’il gère les requêtes même lorsque certains nœuds tombent en panne.

[[step-8 -—- verifying-the-proxysql-configuration]] == Étape 8 - Vérification de la configuration de ProxySQL

Nous savons que la connectivité entre ProxySQL et les nœuds MySQL fonctionne. Par conséquent, les tests finaux consistent à vérifier que les autorisations de base de données autorisent les instructions de lecture et d’écriture de ProxySQL, et à ce que ces instructions soient toujours exécutées lorsque certains des nœuds de le groupe échoue.

Exécutez une instructionSELECT dans l'invite du client ProxySQL pour vérifier que nous pouvons lire les données de la base de donnéesplayground.

SELECT * FROM playground.equipment;

La sortie doit être similaire à celle-ci, contenant les trois éléments créés dans le didacticiel de réplication de groupe. Cela signifie que nous avons réussi à lire les données de la base de données MySQL via ProxySQL.

Output+----+--------+-------+--------+
| id | type   | quant | color  |
+----+--------+-------+--------+
|  3 | slide  |     2 | blue   |
| 10 | swing  |    10 | yellow |
| 17 | seesaw |     3 | green  |
+----+--------+-------+--------+
3 rows in set (0.00 sec)

Ensuite, essayez d’écrire en insérant de nouvelles données dans le tableau représentant 5 exercices en rouge.

INSERT INTO playground.equipment (type, quant, color) VALUES ("drill", 5, "red");

Puis réexécutez la commandeSELECT précédente pour vérifier que les données ont été insérées.

SELECT * FROM playground.equipment;

La nouvelle ligne d’exploration dans la sortie signifie que nous avons réussi à écrire des données dans la base de données MySQL via ProxySQL.

Output+----+--------+-------+--------+
| id | type   | quant | color  |
+----+--------+-------+--------+
|  3 | slide  |     2 | blue   |
| 10 | swing  |    10 | yellow |
| 17 | seesaw |     3 | green  |
| 24 | drill  |     5 | red    |
+----+--------+-------+--------+
4 rows in set (0.00 sec)

Nous savons que ProxySQL peut maintenant utiliser pleinement la base de données, mais que se passe-t-il si un serveur tombe en panne?

A partir de la ligne de commande de l’un des serveurs MySQL, arrêtez le processus MySQL pour simuler un échec.

systemctl stop mysql

Une fois la base de données arrêtée, essayez à nouveau d'interroger les données de la tableequipment à partir de l'invite du client ProxySQL.

SELECT * FROM playground.equipment;

La sortie ne devrait pas changer; vous devriez toujours voir la liste d'équipement comme auparavant. Cela signifie que ProxySQL a remarqué qu'un des noeuds avait échoué et était passé sur un autre pour exécuter l'instruction.

Nous pouvons vérifier cela en interrogeant la tableruntime_mysql_servers à partir de l'invite d'administration ProxySQL, comme à l'étape 5.

SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;

La sortie ressemblera à ceci:

Output+--------------+-------------+---------+
| hostgroup_id | hostname    | status  |
+--------------+-------------+---------+
| 1            | 203.0.113.1 | SHUNNED |
| 2            | 203.0.113.2 | ONLINE  |
| 2            | 203.0.113.3 | ONLINE  |
| 3            | 203.0.113.2 | ONLINE  |
| 3            | 203.0.113.3 | ONLINE  |
+--------------+-------------+---------+
6 rows in set (0.01 sec)

Le nœud que nous avons arrêté est désormaisshunned, ce qui signifie qu'il est temporairement considéré comme inaccessible, de sorte que tout le trafic sera distribué sur les deux nœuds en ligne restants.

ProxySQL surveillera en permanence l'état de ce nœud, et le ramènera àonline s'il se comporte normalement, ou le marqueraoffline s'il dépasse le seuil de temporisation défini à l'étape 4.

Essayons cette surveillance. Revenez sur le serveur MySQL et ramenez le nœud.

systemctl start mysql

Attendez un moment, puis interrogez à nouveau la tableruntime_mysql_servers à partir de l'invite d'administration ProxySQL.

SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;

ProxySQL remarquera rapidement que le nœud est à nouveau disponible et le marque comme étant en ligne:

Output+--------------+-------------+--------+
| hostgroup_id | hostname    | status |
+--------------+-------------+--------+
| 2            | 203.0.113.1 | ONLINE |
| 2            | 203.0.113.2 | ONLINE |
| 2            | 203.0.113.3 | ONLINE |
| 3            | 203.0.113.1 | ONLINE |
| 3            | 203.0.113.2 | ONLINE |
| 3            | 203.0.113.3 | ONLINE |
+--------------+-------------+--------+
6 rows in set (0.01 sec)

Vous pouvez répéter ce test avec un ou plusieurs autres noeuds pour vérifier que si au moins un noeud est actif, vous pourrez utiliser librement votre base de données pour un accès en lecture seule et en lecture-écriture.

Conclusion

Dans ce didacticiel, vous avez configuré ProxySQL pour équilibrer la charge des requêtes SQL sur plusieurs nœuds MySQL activés en écriture dans une topologie de réplication de groupe multi-primaire. Ce type de configuration peut augmenter les performances pour une utilisation intensive de la base de données en répartissant la charge sur plusieurs serveurs. Il peut également fournir une fonctionnalité de basculement au cas où l'un des serveurs de base de données se déconnecte.

Cependant, nous n’avons traité ici qu’une seule topologie de nœud. ProxySQL fournit également une mise en cache, un routage et une analyse des performances robustes pour de nombreuses autres topologies MySQL. Vous pouvez en savoir plus sur les fonctionnalités de ProxySQL et comment résoudre différents problèmes de gestion de base de données avec celles-ci sur lesofficial ProxySQL blog etProxySQL wiki.

Related