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

Équilibrage de charge avec ProxySQL pour le cluster Percona XtraDB

Nous devrions envisager d'installer ProxySQL sur les nœuds clients pour une gestion efficace de la charge de travail dans le cluster sans aucune modification des applications qui génèrent des requêtes. Il s'agit de la solution haute disponibilité recommandée pour Percona XtraDB Cluster.
Certaines des fonctionnalités populaires de ProxySQL sont :

  • Hautes performances
  • Gestion efficace de la charge de travail
  • Mise en cache des requêtes
  • Routage des requêtes
  • Prend en charge le basculement
  • Configuration avancée avec 0 temps d'arrêt
  • Proxy de la couche application
  • Multiplateforme
  • Prise en charge avancée de la topologie
  • Pare-feu
Spécification de l'environnement :

192.168.56.115
centos

Prérequis :

Nous devons ouvrir les ports ci-dessous sur tous les serveurs

firewall-cmd --zone=public --add-service=mysql --permanent

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/udp --permanent

Autoriser le port de service ProxySQL 6033/tcp (c'est l'inverse du port MySQL par défaut 3306) dans le pare-feu Linux.

firewall-cmd --permanent --add-port=6033/tcp

firewall-cmd --reload
Installation de l'équilibreur de charge ProxySQL pour le cluster Percona XtraDB sur CentOS 7

ProxySQL v2 prend en charge nativement le cluster Percona XtraDB, pour installer ProxySql, installez-le à partir du référentiel percona

sudo yum install proxysql2

Pour vous connecter à l'interface d'administration ProxySQL, vous avez besoin d'un client MySQL.

yum install Percona-XtraDB-Cluster-client-57

Démarrez maintenant le service proxysql

[[email protected] ~]# systemctl start proxysql.service

Pour vérifier le port sur le nœud du cluster, utilisez la requête ci-dessous.

mysql -uroot -p -e "SHOW GLOBAL VARIABLES LIKE 'PORT'";

Connectez-vous maintenant au panneau d'administration ProxySQL et configurez l'équilibreur de charge.

mysql -u admin -p123 -h 127.0.0.1 -P6032 --prompt='ProxySQL> '

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.110',3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.113',3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.114',3306);

ProxySQL> SELECT * FROM mysql_servers;
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 0 | 192.168.56.110 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |
| 0 | 192.168.56.113 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |
| 0 | 192.168.56.114 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
3 rows in set (0.00 sec)
Configurer la surveillance des nœuds ProxySQL :

Connectez-vous à l'instance de base de données MySQL et exécutez les commandes suivantes pour créer l'utilisateur de surveillance avec le privilège USAGE

sur n'importe quel NŒUD percona :

CREATE USER 'proxysql'@'%' IDENTIFIED BY 'ProxySQL';
GRANT USAGE ON *.* TO 'proxysql'@'%';

mysql> CREATE USER 'proxysql'@'%' IDENTIFIED BY 'ProxySQL';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT USAGE ON *.* TO 'proxysql'@'%';
Query OK, 0 rows affected (0.02 sec)

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

UPDATE global_variables SET variable_value='ProxySQL' WHERE variable_name='mysql-monitor_password';

LOAD MYSQL VARIABLES TO RUNTIME;

SAVE MYSQL VARIABLES TO DISK;

ProxySQL> UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username';
Query OK, 1 row affected (0.01 sec)

ProxySQL> UPDATE global_variables SET variable_value='ProxySQL' WHERE variable_name='mysql-monitor_password';
Query OK, 1 row affected (0.00 sec)

ProxySQL> LOAD MYSQL VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)

ProxySQL> SAVE MYSQL VARIABLES TO DISK;
Query OK, 136 rows affected (0.01 sec)

ProxySQL> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
Création d'un utilisateur client ProxySQL
Provide read/write access to the cluster for ProxySQL, add this user on one of the Percona XtraDB Cluster nodes:

CREATE USER 'lbuser'@'192.168.56.115' IDENTIFIED BY 'lbpass';

GRANT ALL ON *.* TO 'lbuser'@'192.168.56.115';
Création de l'utilisateur du client ProxySQL :
ProxySQL> INSERT INTO mysql_users (username,password) VALUES ('lbuser','lbpass');
Query OK, 1 row affected (0.00 sec)
ProxySQL> LOAD MYSQL USERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
ProxySQL> SAVE MYSQL USERS TO DISK;
Query OK, 0 rows affected (0.02 sec)

confirmez que l'utilisateur a été configuré correctement, vous pouvez essayer de vous connecter :

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.30 (ProxySQL)

Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, 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.
mysql>

Voyons à quel nœud notre client va se connecter du cluster.

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| @@hostname |
+----------------------+
| percona3.localdomain |
+----------------------+

vous pouvez voir que le serveur proxy est connecté à percona3

J'ai essayé à partir d'une autre session de mastic puis il se connecte à percona2 :

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| @@hostname |
+----------------------+
| percona2.localdomain |
+----------------------+

Après quelques sessions multiples, il se connecte à percona1 :

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| @@hostname |
+----------------------+
| percona1.localdomain |
+----------------------+
Connexion depuis MySQL Workbench :

Vous trouverez ci-dessous la configuration de ma session dans MySQL Workbench :

J'ai essayé de voir quel nœud se connecterait à partir de MySQL Workbench

Basculement :

Nous allons maintenant vérifier comment cela effectuera le basculement

[[email protected] mysql]# service mysql stop
Redirecting to /bin/systemctl stop mysql.service

ProxySQL> select hostgroup_id,hostname,port,status from runtime_mysql_servers;
+--------------+----------------+------+---------+
| hostgroup_id | hostname | port | status |
+--------------+----------------+------+---------+
| 0 | 192.168.56.110 | 3306 | ONLINE |
| 0 | 192.168.56.114 | 3306 | SHUNNED |
| 0 | 192.168.56.113 | 3306 | ONLINE |
+--------------+----------------+------+---------+
3 rows in set (0.01 sec)

Maintenant, redémarrons mysql sur le nœud 3 et vérifions à nouveau l'état du cluster à partir du serveur proxy

[[email protected] mysql]#systemctl start mysql.service

ProxySQL> SELECT hostgroup_id hg,count(status) cnt from main.runtime_mysql_servers WHERE status = "ONLINE" GROUP BY hg having cnt ;
+----+-----+
| hg | cnt |
+----+-----+
| 0 | 3 |
+----+-----+
1 row in set (0.00 sec)

ProxySQL> select hostgroup_id,hostname,port,status from runtime_mysql_servers;
+--------------+----------------+------+--------+
| hostgroup_id | hostname | port | status |
+--------------+----------------+------+--------+
| 0 | 192.168.56.110 | 3306 | ONLINE |
| 0 | 192.168.56.114 | 3306 | ONLINE |
| 0 | 192.168.56.113 | 3306 | ONLINE |
+--------------+----------------+------+--------+
3 rows in set (0.00 sec)

REMARQUE :  Si l'état du nœud est ÉVITÉ  essayez ensuite de vous connecter plusieurs fois afin que le client obtienne le dernier état du cluster, car runtime_mysql_servers stocke le dernier état du nœud lors de la dernière tentative de connexion.

Cluster de test avec sysbench :
yum install sysbench

sysbench nécessite les informations d'identification de l'utilisateur du client ProxySQL que vous avez créées (lbuser/lbpass) dans Création d'un utilisateur du client ProxySQL.

sysbench /usr/share/sysbench/oltp_read_only.lua --threads=4 --mysql-host=127.0.0.1 
--mysql-user=lbuser --mysql-password=lbpass --mysql-port=6033 --tables=10 --table-size=10000 prepare

sysbench /usr/share/sysbench/oltp_read_only.lua --threads=4 --events=0 --time=300 --mysql-host=27.0.0.1 
--mysql-user=lbuser --mysql-password=lbpass --mysql-port=6033 --tables=10 
--table-size=10000 --range_selects=off --db-ps-mode=disable --report-interval=1 run

Pour voir le nombre de commandes qui s'exécutent sur le cluster :

proxysql> SELECT * FROM stats_mysql_commands_counters;