MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
1. MHA : MySQL haute disponibilité @ Viadeo
Viadeo Tech Days, Paris 22-11-2012
2. De quoi vais-je parler ?
De moi (mais pas longtemps, promis)
Viadeo en quelques chiffres
Dis, c'était comment avant ?
Mini zoom sur MySQL Replication
Que choisir ?
Le changement ? C'est...
Zoom sur Master High Availability
Quiz
A retenir... (eh oui, ça fait déjà 1800 secondes)
3. Me, myself & I
Olivier DASINI
Expert MySQL chez Viadeo
@freshdaz
http://dasini.net/blog/
Co-fondateur du MySQL User Group Francophone (LeMug.fr)
●
http://lemug.fr
Co-auteur des livres
Audit et optimisation – MySQL 5, Bonnes pratiques pour
l’administrateur
●
Eyrolles, ISBN-13: 978-2212126341
MySQL 5 – Administration et optimisation
●
ENI, ISBN-13: 978-2-7460-5516-2
MySQL 5.6 – Administration et optimisation (février 2013)
4. Viadeo en quelques chiffres
L' OLTP chez Viadeo c'est :
2 To de données
Un certain nombre de « Grosses » tables
●
Jusqu'à 1 milliard d'enregistrements
●
Jusqu'à 350Go
23 serveurs en 5 shards qui se répartissent 20000 requêtes chaque
seconde
MySQL Replication sur chaque shard (1 master + N slaves)
Plus des serveurs (slave) spécialisés (backup, besoin métier,...)
7. Dis, c'était comment avant ?
Direct routing
Load balancer : IPVS, least connection
Lecture client : VIP de lecture
Écriture client : IP directe sur le master
Réplication MySQL
Partage de la charge de lecture
Sauvegarde non bloquante
Continuité de service
Redondance géographique
Méthode pour changer de master
A l'arrache !
8. Dis, c'était comment avant ?
Ce qui va plutôt bien
L'architecture générale n'est pas vraiment problématique
IPVS un peu « touchy » à configurer
IPVS n'est pas la solution la plus souple
Mais ce n'est clairement pas le problème
Ce qui va moins bien
La méthode de changement de master
●
Toute l'opération est manuelle
●
Demande de solides connaissance MySQL
●
Demande du sang froid (Dexter like)
Les exceptions du workflow
●
Le problème des exceptions : « quand il y en a une ça va, c'est quand il y
en a beaucoup qu'il y a des problèmes »
10. Mini zoom sur MySQL Replication
Tout est bon dans la réplication (enfin presque)
11. Mini zoom sur MySQL Replication
La réplication MySQL, c'est cool ! Utilisée chez Viadeo pour :
Existe depuis MySQL 3.23.15 Scalabilité horizontale
Asynchrone Sauvegarde
Un seul master Failover
13. Que choisir ? options envisagées
Dual master
1 machine en « spare »
Risque d'incohérences entre le master & les slaves en cas de crash
Risque d'incohérences entre les slaves en cas de crash
Semi-Synchronous Replication
MySQL 5.5+
Peut réduire les performances
Risque d'incohérences entre le master & les slaves en cas de crash
Risque d'incohérences entre les slaves en cas de crash
Pacemaker + DRBD
Durée du « crash recovery »
Machines en « spare »
MySQL Cluster
Moteur de stockage NDB
Global transaction ID
MySQL 5.6+
14. Que choisir ? solution HA idéale
Cher petit Papa Noël, si je t'écris aujourd'hui... une solution HA :
Simple d'utilisation
●
Car à mon age on ne comprend plus les choses compliquées
Facile à installer
●
Car à cause de Facebook je n'ai plus beaucoup de temps pour travailler
Gratuite
●
Car j'aimerai avoir une augmentation ce coup ci !
Sans surcoût
●
Car mon chef est de toute façon un gros radin
Qui fonctionne avec notre version de MySQL
●
Fatigué de corriger les bêtises de mes devs
Qui ne m'oblige pas à changer d'architecture
●
Fatigué de corriger les bêtises de admins sys
Performante
●
Je suis motard, j'aime quand ça va vite :)
P.S. Cette année j'ai été sage... (lol)
17. Le changement ? C'est... Gateway
Gateway
Load balancer : HAProxy 1.4, least connection
Lecture client : VIP de lecture
Écriture client : VIP d'écriture
Réplication MySQL
Partage de la charge de lecture
Sauvegarde non bloquante
Continuité de service
Redondance géographique
Méthode pour changer de master
MHA
18. Le changement ? C'est... HAProxy
2 groupes de tests effectués par HAProxy
Test1
Service MySQL UP
Serveur MySQL administrativement IN / OUT
Serveur MySQL appartenant à la VIP d'écriture (Master)
Test2
Service MySQL UP
Serveur MySQL administrativement IN / OUT
Serveur MySQL appartenant à la VIP de lecture (Slave)
20. Zoom sur MHA
Master High Availability
Auteur: Yoshinori Matsunobu
http://yoshinorimatsunobu.blogspot.fr/
Téléchargement de MHA
http://code.google.com/p/mysql-master-ha/
.deb, rpm, tar.gz
Buts de MHA
Promouvoir un slave en master
●
Automatique : avec supervision du master (ping toutes les 3 secondes)
●
Manuel : c'est l'humain qui décide
Reconfiguration automatique de la réplication
●
Les slaves pointent sur le nouveau master
Minimiser la perte de données
●
Réduire les risques d'incohérences avec le master original
●
Rendre les slaves cohérents avec le nouveau master
21. Zoom sur MHA, principales caractéristiques
Simple à mettre en œuvre
Scripts PERL
MySQL 5.0+
Indépendant du moteur de stockage
Ne nécessite pas de changement d'architecture
Pas de coûts supplémentaires (ou presque)
Le manager à une faible empreinte
Installé sur une machine virtuelle à Viadeo
Performant
Jusqu'à présent, la bascule n'a jamais dépassée 2 secondes
Compatible avec la réplication asynchrone
22. Zoom sur MHA, caractéristiques techniques
Très bien détaillées dans la doc !
http://code.google.com/p/mysql-master-ha/wiki/TableOfContents
Sur le Manager node (MHA manager) :
masterha_master_switch : basculement manuel
masterha_manager : supervision du master & basculement auto en cas de
crash
Sur les slaves (MHA node) :
save_binary_logs
apply_diff_relay_logs
purge_relay_logs
●
relay_log_purge = 0 dans my.cnf (nécessaire pour restaures les autres
slaves)
MHA effectue différentes vérifications en amont :
Vérification de la connexion SSH
Vérification de la réplication
...
Scripts optionnels
master_ip_online_change_script : script externe lancé lors de la bascule
manuelle
...
23. Zoom sur MHA, utilisation chez Viadeo
masterha_master_switch : basculement manuel
Failover & bascule online
●
masterha_master_switch conf=/etc/mha/app1.conf master_state=alive
●
Tout les serveurs doivent être UP
●
Pas de retards de réplications
●
MHA n’éteint pas le master original lors du basculement
●
Pas de logs binaire à restaurer (MASTER_POS_WAIT())
En cas de crash du master
●
masterha_master_switch conf=/etc/mha/app1.conf master_state=dead
dead_master_host=<FQDN>
24. Zoom sur MHA, scripting
master_ip_online_change_script : script externe lancé lors de la bascule
manuelle
MHA propose une coque pré-remplie. Il faut finir le travail ! (Merci Xavier)
$ less master_ip_online_change_script
Objectif cohérence des données
sub main {
if ( $command eq "stop" ) {
## Gracefully killing connections on the current master
# 1. Set read_only= 1 on the new master
# 2. DROP USER so that no app user can establish new connections
# 3. Set read_only= 1 on the current master
# 4. Kill current queries
# * Any database access failure will result in script die.
+ FLUSH TABLES WITH READ LOCK
Mais ...
26. Zoom sur MHA, cohérence des données
Le point le plus important (pour moi)
MHA fait le nécessaire pour récupérer un maximum de données
Cohérence du nouveau master avec le master original
●
Récupération des logs binaires du master si possible
Cohérence des slaves avec le nouveau master
●
Rattrapage de l'éventuel retard des slaves
28. Quiz
J'ai un « too many connections » sur le master !
a) J'augmente le nombre max de connexions
b) Je switch le master avec MHA
c) Je prend un p'tit rhum vieux et j’attends que ça passe
29. Quiz
Load de 180 !!! sur le master
a) Je me tape un CRS (Citron vert, Rhum blanc, Sucre) et j'attends
b) Je switch le master avec MHA
c) Je redeviens développeur ;)
30. Quiz
Grosse modification de structure d'un table (5h)
a) Je mets à jour les slaves puis en promeus un en master avec MHA
b) Je l'exécute sur le master, en buvant un planteur de la Martinique
c) J'utilise pt-online-schema-change
31. Quiz
Changement de conf à froid et/ou hardware
a) Je me sers un p'tit rhum agricole de la Guadeloupe
b) J’attends que le besoin disparaisse
c) Je mets à jour les slaves puis en promeus un en master avec MHA
33. A retenir
MHA
Minimise la perte de données avec le master
Assures la cohérences des slaves entre eux
Reconfigure automatiquement la réplication
Minimise l’arrêt (ou la dégradation) de service
Simple
●
A utiliser
●
A comprendre
●
A installer
Pas de changement
●
d'architectures
●
de moteurs de stockage (Idéal avec InnoDB)
●
de logiques métier
Performant
●
Quelques secondes de downtime (moins de 2)
Fonctionne à partir des version supérieures à MySQL 5.0.45
Open source
35. Merci
A la team Viadeo A toi public Aux conférienciers
Anna Loïc Dias Da Silva
Aurélien Olivier Hory & Frédéric Perrin
Bouziane Amélie Boucher & Julien Hilion
Marina Pierre Killy
Nicolas Xavier Krantz
Sabri et son équipe Emanuele Pecorari
Xavier François Le Lay
Yorick Nicolas Tricot
... Damien Hardy
Et toutes les « petites mains » Olivier Dasini
Keynote
Arnaud Devigne
Jean-Marc Potdevin
Stefan Fountain
36. Questions
Ou trouver les slides des Viadeo Tech Days ?
Dans vos clés USB
http://techdays.viadeo.com/
http://dasini.net/blog/
38. Surprises
A gagner :
Audit et optimisation – MySQL 5, Bonnes pratiques pour l’administrateur
●
Eyrolles, ISBN-13: 978-2212126341
MySQL 5 – Administration et optimisation
●
ENI, ISBN-13: 978-2-7460-5516-2