, ,

Passer d’un ProxySQL standalone à une implémentation en cluster

Avatar de Emmanuel

·

, ,

·

Dans cet article je parle du déploiement d’un serveur ProxySQL devant plusieurs serveurs MySQL.

Un ProxySQL c’est bien, mais deux ou plus c’est mieux. On parle alors d’un cluster. Ca peut être très utile (mais pas obligatoire !) pour préparer la prochaine étape : la haute disponibilité.

Comment configurer ProxySQL

Depuis la version 2, ProxySQL dispose d’une fonction de réplication. Cela veut dire que ProxySQL est capable de répliquer plusieurs de ses tables de configuration vers un ou plusieurs hôtes.

A noter qu’il n’y a pas de notions de master / slave, lorsqu’une configuration est modifiée sur l’un des membres du cluster, elle est propagée sur tous les membres.

Pour commencer, il est nécessaire d’avoir un second noeud ProxySQL.

Sur chacun des noeuds du cluster, dans le shell ProxySQL, il faut ajouter un nouvel utilisateur administrateur dans la variable admin-admin_credentials :

Copied!
update global_variables set variable_value='admin:admin;proxysql-cluster-admin:proxysql-cluster-admin-pass' where variable_name='admin-admin_credentials';

Note : ici admin:admin est notre utilisateur administrateur initial. La variable peut contenir plusieurs comptes.

  • On ajoute le compte proxysql-cluster-admin en tant qu’administrateur du cluster :
Copied!
update global_variables set variable_value='proxysql-cluster-admin' where variable_name='admin-cluster_username'; update global_variables set variable_value='proxysql-cluster-admin-pass' where variable_name='admin-cluster_password';
  • On modifie la fréquence de vérification des changements
Copied!
update global_variables set variable_value=200 where variable_name='admin-cluster_check_interval_ms'; update global_variables set variable_value=100 where variable_name='admin-cluster_check_status_frequency';
  • On ajoute les paramètres à synchroniser entre les membres du cluster
Copied!
update global_variables set variable_value='true' where variable_name='admin-cluster_mysql_query_rules_save_to_disk'; update global_variables set variable_value='true' where variable_name='admin-cluster_mysql_servers_save_to_disk'; update global_variables set variable_value='true' where variable_name='admin-cluster_mysql_users_save_to_disk'; update global_variables set variable_value='true' where variable_name='admin-cluster_proxysql_servers_save_to_disk'; update global_variables set variable_value=3 where variable_name='admin-cluster_mysql_query_rules_diffs_before_sync'; update global_variables set variable_value=3 where variable_name='admin-cluster_mysql_servers_diffs_before_sync'; update global_variables set variable_value=3 where variable_name='admin-cluster_mysql_users_diffs_before_sync'; update global_variables set variable_value=3 where variable_name='admin-cluster_proxysql_servers_diffs_before_sync';
  • A la fin, on charge les changements et on les écrit
Copied!
load admin variables to runtime; save admin variables to disk;
  • Une dernière chose : on déclare les deux noeuds (ou plus) ProxySQL
Copied!
INSERT INTO proxysql_servers (hostname,port,weight,comment) VALUES ('192.168.56.1',6032,100,'psql01'); INSERT INTO proxysql_servers (hostname,port,weight,comment) VALUES ('192.168.56.2',6032,100,'psql02'); LOAD PROXYSQL SERVERS TO RUNTIME; SAVE PROXYSQL SERVERS TO DISK;

Dorénavant les tables mysql_servers, mysql_query_rules, mysql_users, mysql_proxy_servers seront répliquées à la moindre modification.

Comme indiqué au début, il n’y a pas de priorités sur les éditions : il est possible d’effectuer des changements sur n’importe quel membre du cluster.

Pour tester, on ajoute un utilisateur sur un des noeuds :

Copied!
ProxySQL>INSERT INTO mysql_users (username,password) values ('test','test');

Sur un autre noeud, on peut vérifier si l’utilisateur test existe

Copied!
ProxySQL> SELECT * from mysql_users;

Cette requête doit retourner les informations liées à l’utilisateur test. Si ce n’est pas le cas, vous pouvez consulter les logs de ProxySQL ici /var/lib/proxysql/proxysql.log.

Enjoy 😉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.