Commencement de la documentation ProxySQL
This commit is contained in:
parent
6007516e64
commit
3a9311f1dc
185
HowtoMySQL/ProxySQL.md
Normal file
185
HowtoMySQL/ProxySQL.md
Normal file
|
@ -0,0 +1,185 @@
|
|||
---
|
||||
categories: databases
|
||||
title: Howto ProxySQL : Outil de proxyfication et de haute disponibilité pour MySQL.
|
||||
---
|
||||
|
||||
* Github ProxySQL : <https://github.com/sysown/proxysql>
|
||||
* Documentation ProxySQL : <https://proxysql.com/Documentation/>
|
||||
* Dépot packet Debian : <https://repo.proxysql.com/ProxySQL/>
|
||||
|
||||
ProxySQL est un proxy haute performance et haute disponibilité pour MySQL et ses dérivées comme Percona Server ou MariaDB
|
||||
|
||||
## Installation
|
||||
|
||||
Plusieurs méthodes d'installation de ProxySQL sont disponible, on va décrire comment l'installer via les dépots officiel pour Debian / Ubuntu
|
||||
|
||||
### Ajout du dépôt
|
||||
|
||||
~~~
|
||||
# apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates gnupg
|
||||
# curl -fsSL https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/repo_pub_key | tee /etc/apt/trusted.gpg.d/ProxySQL-keyring.asc
|
||||
# echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/$(lsb_release -sc)/ ./ | tee /etc/apt/sources.list.d/proxysql.list
|
||||
~~~
|
||||
|
||||
Voici les différentes release disponible de ProxySQL
|
||||
|
||||
* Pour la version 2.4.x releases https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/$(lsb_release -sc)/ ./
|
||||
* Pour la version 2.3.x releases https://repo.proxysql.com/ProxySQL/proxysql-2.3.x/$(lsb_release -sc)/ ./
|
||||
* Pour la version 2.2.x releases https://repo.proxysql.com/ProxySQL/proxysql-2.2.x/$(lsb_release -sc)/ ./
|
||||
|
||||
### Installation de ProxySQL
|
||||
|
||||
~~~
|
||||
# apt update
|
||||
# apt install proxysql
|
||||
~~~
|
||||
|
||||
## Configurer ProxySQL la première fois
|
||||
|
||||
Juste après l'installation de ProxySQL nous devons faire quelques opérations de configuration
|
||||
|
||||
Par défaut ProxySQL écoute sur le port 6032, on démarre le service comme ceci :
|
||||
|
||||
~~~
|
||||
# systemctl start proxysql.service
|
||||
~~~
|
||||
|
||||
Se connecter à l'interface d'admin de ProxySQL :
|
||||
|
||||
~~~
|
||||
# mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt 'ProxySQL Admin> '
|
||||
~~~
|
||||
|
||||
Vérifiez que la configuration est bien vierge en vérifiant qu'il n'y a aucune entrées dans les tables *mysql_servers, mysql_replication_hostgroups et mysql_query_rules*
|
||||
|
||||
~~~
|
||||
ProxySQL Admin> SELECT * FROM mysql_servers;
|
||||
Empty set (0.00 sec)
|
||||
|
||||
ProxySQL Admin> SELECT * from mysql_replication_hostgroups;
|
||||
Empty set (0.00 sec)
|
||||
|
||||
ProxySQL Admin> SELECT * from mysql_query_rules;
|
||||
Empty set (0.00 sec)
|
||||
~~~
|
||||
|
||||
### Changement du mot de passe compte admin
|
||||
|
||||
Le mot de passe par défaut du compte admin est 'admin', on peux changer ça comme ceci dans l'interface d'admin :
|
||||
|
||||
~~~
|
||||
ProxySQL Admin> set admin-admin_credentials="admin:admin;admin:IkjeevgujHus"
|
||||
~~~
|
||||
|
||||
On sauvegarde la configuration de l'admin en mémoire :
|
||||
|
||||
~~~
|
||||
ProxySQL Admin> LOAD ADMIN VARIABLES TO RUNTIME;
|
||||
~~~
|
||||
|
||||
Puis rendre persistant les changement de l'admin sur le disque :
|
||||
|
||||
~~~
|
||||
ProxySQL Admin> SAVE ADMIN VARIABLES FROM RUNTIME;
|
||||
~~
|
||||
|
||||
Le datadir de ProxySQL est dans */var/lib/proxysql*, si pour une raison ou une autre on veux réinialisé toutes la configuration de proxysql :
|
||||
|
||||
~~~
|
||||
# service proxysql stop && service proxysql initial
|
||||
~~~
|
||||
|
||||
Ceci réinitialise le datadir de ProxySQL baser sur les fichiers de configuration qui sont dans */etc/proxysql/proxysql.cnf*
|
||||
|
||||
## Ajouter des Backend
|
||||
|
||||
Dans ProxySQL les backend sont les serveurs sql sur lequels ProxySQL doit se connecter.
|
||||
Pour cet exemple on va ajouter 2 serveurs SQL, on doit les ajouter dans la table *mysql_servers*
|
||||
|
||||
~~~
|
||||
ProxySQL Admin> INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'192.168.0.1',3306);
|
||||
Query OK, 1 row affected (0.01 sec)
|
||||
|
||||
|
||||
ProxySQL Admin> INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'192.168.0.2',3306);
|
||||
Query OK, 1 row affected (0.01 sec)
|
||||
|
||||
SELECT * FROM mysql_servers;
|
||||
+--------------+-----------+------+--------+--------+-------------+-----------------+---------------------+
|
||||
| hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag |
|
||||
+--------------+-----------+------+--------+--------+-------------+-----------------+---------------------+
|
||||
| 1 | 192.168.0.1 | 3306 | ONLINE | 1 | 0 | 1000 | 0 |
|
||||
| 1 | 192.168.0.2 | 3306 | ONLINE | 1 | 0 | 1000 | 0 |
|
||||
+--------------+-----------+------+--------+--------+-------------+-----------------+---------------------+
|
||||
2 rows in set (0.00 sec)
|
||||
~~~
|
||||
|
||||
ProxySQL considère les backend configurer avec *read_only = 0* comme des instances d'écriture (WRITER), et les instances avec *read_only = 1* comme des répliques.
|
||||
Il faut donc s'assurer ques ces variables soit définie correctement sur toutes les instances, car ProxySQL prendra les décisions de routage en fonction de cette valeur.
|
||||
|
||||
## Configuration du monitoring
|
||||
|
||||
ProxySQL surveille en permanence les backends du serveur MySQL configurés pour identifier l'état de santé.
|
||||
Les informations d'identification pour la surveillance des backends doivent être créées dans MySQL et également configurées dans ProxySQL avec les intervalles de vérification spécifiques à l'environnement.
|
||||
|
||||
On créer un utlisateur sur le serveur SQL primaire :
|
||||
|
||||
~~~
|
||||
MariaDB> UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
|
||||
Query OK, 1 row affected (0.00 sec)
|
||||
~~~
|
||||
|
||||
Et on ajoute l'utilisateur et son mot de passe dans ProxySQL :
|
||||
|
||||
~~~
|
||||
ProxySQL Admin> UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
|
||||
Query OK, 1 row affected (0.00 sec)
|
||||
|
||||
ProxySQL Admin> UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_password';
|
||||
Query OK, 1 row affected (0.00 sec)
|
||||
~~~
|
||||
|
||||
On configure ensuite les différentes intervales de surveillance, en secondes :
|
||||
|
||||
~~~
|
||||
ProxySQL Admin> UPDATE global_variables SET variable_value='2000' WHERE variable_name IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');
|
||||
Query OK, 3 rows affected (0.00 sec)
|
||||
|
||||
ProxySQL Admin> SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor_%';
|
||||
+----------------------------------------+---------------------------------------------------+
|
||||
| variable_name | variable_value |
|
||||
+----------------------------------------+---------------------------------------------------+
|
||||
| mysql-monitor_history | 600000 |
|
||||
| mysql-monitor_connect_interval | 2000 |
|
||||
| mysql-monitor_connect_timeout | 200 |
|
||||
| mysql-monitor_ping_interval | 2000 |
|
||||
| mysql-monitor_ping_timeout | 100 |
|
||||
| mysql-monitor_read_only_interval | 2000 |
|
||||
| mysql-monitor_read_only_timeout | 100 |
|
||||
| mysql-monitor_replication_lag_interval | 10000 |
|
||||
| mysql-monitor_replication_lag_timeout | 1000 |
|
||||
| mysql-monitor_username | monitor |
|
||||
| mysql-monitor_password | monitor |
|
||||
| mysql-monitor_query_variables | SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES |
|
||||
| mysql-monitor_query_status | SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS |
|
||||
| mysql-monitor_query_interval | 60000 |
|
||||
| mysql-monitor_query_timeout | 100 |
|
||||
| mysql-monitor_timer_cached | true |
|
||||
| mysql-monitor_writer_is_also_reader | true |
|
||||
+----------------------------------------+---------------------------------------------------+
|
||||
17 rows in set (0.00 sec)
|
||||
~~~
|
||||
|
||||
Les modifications apportées au moniteur MySQL dans la table global_variables seront appliquées après l'exécution de l'instruction *LOAD MYSQL VARIABLES TO RUNTIME* :
|
||||
|
||||
~~~
|
||||
ProxySQL Admin> LOAD MYSQL VARIABLES TO RUNTIME;
|
||||
Query OK, 0 rows affected (0.00 sec)
|
||||
~~~
|
||||
|
||||
Pour conserver les modifications de configuration lors des redémarrages, *SAVE MYSQL VARIABLES TO DISK* doit également être exécuté :
|
||||
|
||||
~~~
|
||||
ProxySQL Admin> SAVE MYSQL VARIABLES TO DISK;
|
||||
Query OK, 54 rows affected (0.02 sec)
|
||||
~~~
|
Loading…
Reference in a new issue