Upload
olivier-dasini
View
3.393
Download
0
Embed Size (px)
DESCRIPTION
retour d'expérience sur l'utilisation de la solution de haute disponibilité des bases de données MHA http://fr.viadeo.com/fr/profile/olivier.dasini
Citation preview
Viadeo Tech Days, Paris 22-11-2012
MHA : MySQL haute disponibilité @ Viadeo
De quoi vais-je parler ?
De moi (mais pas longtemps, promis)Viadeo en quelques chiffresDis, c'était comment avant ?Mini zoom sur MySQL ReplicationQue choisir ?Le changement ? C'est...Zoom sur Master High AvailabilityQuizA retenir... (eh oui, ça fait déjà 1800 secondes)
Me, myself & I
Olivier DASINIExpert MySQL chez Viadeo@freshdazhttp://dasini.net/blog/Co-fondateur du MySQL User Group Francophone (LeMug.fr)● http://lemug.fr
Co-auteur des livresAudit et optimisation – MySQL 5, Bonnes pratiques pour l’administrateur● Eyrolles, ISBN-13: 978-2212126341MySQL 5 – Administration et optimisation● ENI, ISBN-13: 978-2-7460-5516-2MySQL 5.6 – Administration et optimisation (février 2013)
Viadeo en quelques chiffres
L' OLTP chez Viadeo c'est :2 To de donnéesUn certain nombre de « Grosses » tables● Jusqu'à 1 milliard d'enregistrements● Jusqu'à 350Go23 serveurs en 5 shards qui se répartissent 20000 requêtes chaque secondeMySQL Replication sur chaque shard (1 master + N slaves)Plus des serveurs (slave) spécialisés (backup, besoin métier,...)
Dis, c'était comment avant ?
Direct routing & Co
Dis, c'était comment avant ?
Direct routingLoad balancer : IPVS, least connectionLecture client : VIP de lectureÉcriture client : IP directe sur le master
Réplication MySQLPartage de la charge de lectureSauvegarde non bloquanteContinuité de serviceRedondance géographique
Méthode pour changer de masterA l'arrache !
Dis, c'était comment avant ?
Ce qui va plutôt bien L'architecture générale n'est pas vraiment problématiqueIPVS un peu « touchy » à configurerIPVS n'est pas la solution la plus soupleMais ce n'est clairement pas le problème
Ce qui va moins bienLa 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 »
MySQL Replication
Mini zoom sur MySQL Replication
Tout est bon dans la réplication (enfin presque)
Mini zoom sur MySQL Replication
La réplication MySQL, c'est cool ! Utilisée chez Viadeo pour :Scalabilité horizontaleSauvegardeFailover
Existe depuis MySQL 3.23.15AsynchroneUn seul master
Que choisir ?
Que choisir ? options envisagées
Dual master1 machine en « spare »Risque d'incohérences entre le master & les slaves en cas de crashRisque d'incohérences entre les slaves en cas de crash
Semi-Synchronous ReplicationMySQL 5.5+Peut réduire les performancesRisque d'incohérences entre le master & les slaves en cas de crashRisque d'incohérences entre les slaves en cas de crash
Pacemaker + DRBDDurée du « crash recovery » Machines en « spare »
MySQL ClusterMoteur de stockage NDB
Global transaction IDMySQL 5.6+
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éesFacile à installer● Car à cause de Facebook je n'ai plus beaucoup de temps pour travaillerGratuite● Car j'aimerai avoir une augmentation ce coup ci !Sans surcoût● Car mon chef est de toute façon un gros radinQui fonctionne avec notre version de MySQL ● Fatigué de corriger les bêtises de mes devsQui ne m'oblige pas à changer d'architecture● Fatigué de corriger les bêtises de admins sysPerformante● Je suis motard, j'aime quand ça va vite :)
P.S. Cette année j'ai été sage... (lol)
Le changement ? C'est...
Gateway
Le changement ? C'est... Gateway
GatewayLoad balancer : HAProxy 1.4, least connectionLecture client : VIP de lectureÉcriture client : VIP d'écriture
Réplication MySQLPartage de la charge de lectureSauvegarde non bloquanteContinuité de serviceRedondance géographique
Méthode pour changer de masterMHA
Le changement ? C'est... HAProxy
2 groupes de tests effectués par HAProxy
Test1Service MySQL UPServeur MySQL administrativement IN / OUTServeur MySQL appartenant à la VIP d'écriture (Master)
Test2Service MySQL UPServeur MySQL administrativement IN / OUTServeur MySQL appartenant à la VIP de lecture (Slave)
MHA
Zoom sur MHA
Master High AvailabilityAuteur: Yoshinori Matsunobuhttp://yoshinorimatsunobu.blogspot.fr/
Téléchargement de MHAhttp://code.google.com/p/mysql-master-ha/.deb, rpm, tar.gz
Buts de MHAPromouvoir 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 masterMinimiser 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
Zoom sur MHA, principales caractéristiques
Simple à mettre en œuvreScripts PERLMySQL 5.0+Indépendant du moteur de stockageNe nécessite pas de changement d'architecturePas de coûts supplémentaires (ou presque)
Le manager à une faible empreinteInstallé sur une machine virtuelle à Viadeo
PerformantJusqu'à présent, la bascule n'a jamais dépassée 2 secondes
Compatible avec la réplication asynchrone
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 manuelmasterha_manager : supervision du master & basculement auto en cas de crash
Sur les slaves (MHA node) :save_binary_logsapply_diff_relay_logspurge_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 SSHVérification de la réplication...
Scripts optionnelsmaster_ip_online_change_script : script externe lancé lors de la bascule manuelle...
Zoom sur MHA, utilisation chez Viadeo
masterha_master_switch : basculement manuelFailover & 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>
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_scriptObjectif cohérence des donnéessub 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 ...
Zoom sur MHA, scripting
master_ip_online_change_script : script externe lancé lors de la bascule manuelle
Ajouts ViadeoKill des connexions IDLE Sortie « administrative » (OUT) du master de la VIP d'écriture● sub set_administrarively_out {
my $server_host = shift; my $ssh_cmd = sprintf( "echo 'OUT' > %s",
$my_admin_file );…© Copyright Xavier K Toute reproduction interdite sinon il vous marave
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éesCohérence du nouveau master avec le master original● Récupération des logs binaires du master si possibleCohérence des slaves avec le nouveau master● Rattrapage de l'éventuel retard des slaves
Quiz
Quiz
J'ai un « too many connections » sur le master !
a) J'augmente le nombre max de connexionsb) Je switch le master avec MHAc) Je prend un p'tit rhum vieux et j’attends que ça passe
Quiz
Load de 180 !!! sur le master
a) Je me tape un CRS (Citron vert, Rhum blanc, Sucre) et j'attendsb) Je switch le master avec MHAc) Je redeviens développeur ;)
Quiz
Grosse modification de structure d'un table (5h)
a) Je mets à jour les slaves puis en promeus un en master avec MHAb) Je l'exécute sur le master, en buvant un planteur de la Martiniquec) J'utilise pt-online-schema-change
Quiz
Changement de conf à froid et/ou hardware
a) Je me sers un p'tit rhum agricole de la Guadeloupeb) J’attends que le besoin disparaisse c) Je mets à jour les slaves puis en promeus un en master avec MHA
A retenir
A retenir
MHAMinimise la perte de données avec le masterAssures la cohérences des slaves entre euxReconfigure automatiquement la réplicationMinimise l’arrêt (ou la dégradation) de serviceSimple● A utiliser● A comprendre● A installerPas de changement ● d'architectures● de moteurs de stockage (Idéal avec InnoDB)● de logiques métierPerformant● Quelques secondes de downtime (moins de 2)Fonctionne à partir des version supérieures à MySQL 5.0.45Open source
...
Merci
A la team ViadeoAnnaAurélienBouzianeMarinaNicolasSabri et son équipeXavierYorick...Et toutes les « petites mains »
Aux conférienciersLoïc Dias Da SilvaOlivier Hory & Frédéric PerrinAmélie Boucher & Julien HilionPierre KillyXavier KrantzEmanuele PecorariFrançois Le LayNicolas TricotDamien HardyOlivier Dasini
A toi public
KeynoteArnaud DevigneJean-Marc PotdevinStefan Fountain
Questions
Ou trouver les slides des Viadeo Tech Days ?Dans vos clés USBhttp://techdays.viadeo.com/http://dasini.net/blog/
:)
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