Mise en place de MySQL HA

Mise en place de MySQL HA

Je vais prochainement devoir mettre en place MySQL HA, j’en profite donc pour écrire un article pour détailler son installation et sa configuration.

A quoi ça sert ?

Pour ce qui n’ont jamais entendu parler de MySQL HA (High Available), il permet dans une architecture MySQL master slave d’automatiser le “master failover”. En quelques mots, si votre master s’interrompe MHA aura en charge d’élire l’un de vos slaves pour prendre son rôle, et tout ça de manière intelligente.

Dans un premier temps il choisira le slave le plus avancé au niveau de la réplication (relay log). Dans un second temps il essaiera de récupérer les binlog non envoyé du master si c’est possible pour les rejouer sur les slaves. Pour finir il démarrera la réplication des autres slaves sur le nouveau master. Et tout ça en un temps record, il est indiquer entre 10 et 30 seconde d’interruption suivant la charge machine évidement.

Installation de MySQL HA

Je vais travailler sur 4 machines virtuelles, la première servira de manager, une seconde en master et les 2 dernières en tant que slaves. Deux programmes sont à installer MHA Node et MHA Manager. Je ne vais pas expliquer la mise en place de la réplication, si vous n’avez jamais mis en place ce genre d’installation je vous renvoi vers la documentation officielle de MySQL http://dev.mysql.com/doc/refman/5.0/fr/replication-howto.html.

Tous les noeuds du cluster y compris le manager nécessiteront l’installation de MHA Node. Les scripts de MHA Node sont exécutés uniquement par le manager en cas de besoin, ils lui permettent de vérifier la configuration des noeuds, leur état au niveau de la réplication en cas de bascule …

Installation de MHA Node:

$ wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.53.tar.gz
$ tar -zxf mha4mysql-node-0.53.tar.gz
$ perl Makefile.PL
$ make
$ make install

L’installation de MHA Manager se fera uniquement sur le serveur dédié à la gestion du cluster.

Installation de MHA Manager:

$ wget http://mysql-master-ha.googlecode.com/files/mha4mysql-manager-0.53.tar.gz
$ tar -zxf mha4mysql-manager-0.53.tar.gz
$ perl Makefile.PL
$ make
$ make install

Configuration de MySQL HA

Pour ce qui est la configuration j’ai tout simplement repris le fichier de configuration donné en exemple et je l’ai adapté. Vous pouvez créer ce fichier de configuration où bon vous semble, pour ma part je l’ai crée dans /etc/mha.cnf.

[server default]
user=root
password=password
manager_workdir=/var/log/masterha/mha
manager_log=/var/log/masterha/app1/mha.log
remote_workdir=/var/log/masterha/mha

[server1]
hostname=192.168.1.18

[server2]
hostname=192.168.1.22

[server3]
hostname=192.168.1.20

Le fichier de configuration est relativement simple. La section [server default] va définir les options par défaut de vos serveurs, l’utilisateur avec lequel se connecter et le mot de passe, ensuite les 3 dernières directives indique l’endroit ou le manager va “travailler”.

Il existe une trentaine de paramètres que je vous conseille vivement de regarder afin d’affiner votre configuration http://code.google.com/p/mysql-master-ha/wiki/Parameters. Vous pouvez par exemple exclure des slaves du “master failover” via la directive no_master=1,  ou encore ajuster le délai entre chaque ping ….

Test de configuration

MySQL HA a mis à disposition 2 scripts permettant de tester la configuration de l’ensemble des serveurs, la connexion ssh et la configuration des serveurs MySQL.

Le premier a lancer est le test ssh. Il faut que le serveur manager puisse accéder à l’ensemble des serveurs via ssh, pensez à activer le forwardAgent dans votre fichier de configuration ssh (/etc/ssh/sshd_config).

$ masterha_check_ssh  --conf=/etc/mha.cnf

Le script doit retourner All SSH connection tests passed successfully. Si ce n’est pas le cas il va falloir regarder du côté de votre configuration ssh, pour tester, copier un fichier d’un serveur à un autre depuis le manager en activant le debug ssh.

Maintenant que votre manager peut accéder à l’ensemble de vos serveurs nous allons tester la configuration de la réplication.

$ masterha_check_repl  --conf=/etc/mha.cnf

Le script doit retourner MySQL Replication Health is OK. L’utilisateur que va utiliser MHA doit avoir les droits SUPER et REPLICATION.

Activer MySQL HA

Maintenant que la configuration est complète, il n’y a plus qu’à tester le “master failover”.

Commençons par lancer masterha_manager via la commande suivante. A savoir que par défaut le script se lance en avant plan.

$ masterha_manager --conf=/etc/mha.cnf

Une fois masterha_manager lancé, il nous reste plus qu’à faire tomber notre master pour tester le failover, un bon kill -9 fera l’affaire.

Si tout s’est bien passé vous devriez obtenir ce message dans les logs MySQL HA:

Master failover to 192.168.1.22(192.168.1.22:3306) completed successfully.

Je ne sais pas si c’est le cas pour tout le monde, mais j’ai dû patcher le code de MHA qui me levait une erreur lors du “master failover”. L’erreur en question est “Got ERROR: Use of uninitialized value $msg in scalar chomp at /usr/local/share/perl/5.14.2/MHA/ManagerConst.pm line 90.”

Le patch appliqué est

+   $msg = "" unless($msg);
+   #chomp $msg;
-    chomp $msg;

Conclusion

Une mise en place rapide, une gestion simple, voilà qui devrait vous apporter un peu de confort sans trop d’effort. MHA vous offre aussi la possibilité de lancer un script au moment du “master failover” pour basculer votre ip flottante par exemple. Pour ma part je préfère gérer ça avec Heartbeat.

No Comments

Sorry, the comment form is closed at this time.