SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
MHA : MySQL haute disponibilité @ Viadeo
                    Viadeo Tech Days, Paris 22-11-2012
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)
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)
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,...)
Dis, c'était comment avant ?
Direct routing & Co
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 !
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 »
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 :
  Existe depuis MySQL 3.23.15          Scalabilité horizontale
  Asynchrone                           Sauvegarde
  Un seul master                       Failover
Que choisir ?
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+
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)
Le changement ? C'est...
Gateway
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
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)
MHA
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
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
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
  ...
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>
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 ...
Zoom sur MHA, scripting


  master_ip_online_change_script : script externe lancé lors de la bascule
  manuelle

  Ajouts Viadeo
     Kill 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é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
Quiz
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
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 ;)
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
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
A retenir
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
...
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
Questions




 Ou trouver les slides des Viadeo Tech Days ?
  Dans vos clés USB
  http://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

Contenu connexe

Tendances

Meetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalMeetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupal
Aurelien Navarre
 
EBIZNEXT-RIAK
EBIZNEXT-RIAKEBIZNEXT-RIAK
EBIZNEXT-RIAK
ebiznext
 

Tendances (20)

Meetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalMeetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupal
 
Présentation de Apache Zookeeper
Présentation de Apache ZookeeperPrésentation de Apache Zookeeper
Présentation de Apache Zookeeper
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
 
Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...
Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...
Tout sur les solutions de Haute Disponibilité et Disaster Recovery de SQL Ser...
 
Oracle Cluster Rac
Oracle Cluster RacOracle Cluster Rac
Oracle Cluster Rac
 
Optimisation de la plateforme de Supervision Zabbix
Optimisation de la plateforme de Supervision ZabbixOptimisation de la plateforme de Supervision Zabbix
Optimisation de la plateforme de Supervision Zabbix
 
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache CassandraDataStax Enterprise et Cas d'utilisation de Apache Cassandra
DataStax Enterprise et Cas d'utilisation de Apache Cassandra
 
GUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the WebGUSS - CRITEO Meetup Scale SQL for the Web
GUSS - CRITEO Meetup Scale SQL for the Web
 
Jeudis du Libre - MySQL comme Document Store
Jeudis du Libre - MySQL comme Document StoreJeudis du Libre - MySQL comme Document Store
Jeudis du Libre - MySQL comme Document Store
 
EBIZNEXT-RIAK
EBIZNEXT-RIAKEBIZNEXT-RIAK
EBIZNEXT-RIAK
 
Riak introduction
Riak introductionRiak introduction
Riak introduction
 
Webinar Degetel DataStax
Webinar Degetel DataStaxWebinar Degetel DataStax
Webinar Degetel DataStax
 
Datastax Cassandra + Spark Streaming
Datastax Cassandra + Spark StreamingDatastax Cassandra + Spark Streaming
Datastax Cassandra + Spark Streaming
 
DataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft TechdaysDataStax et Cassandra dans Azure au Microsoft Techdays
DataStax et Cassandra dans Azure au Microsoft Techdays
 
Guss sql IaaS PaaS 20131202
Guss sql IaaS PaaS 20131202Guss sql IaaS PaaS 20131202
Guss sql IaaS PaaS 20131202
 
Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...Une gestion efficace du changement de vos structures de données relationnelle...
Une gestion efficace du changement de vos structures de données relationnelle...
 
DataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le CloudDataStax Enterprise - La plateforme de base de données pour le Cloud
DataStax Enterprise - La plateforme de base de données pour le Cloud
 
Liquibase en action
Liquibase en actionLiquibase en action
Liquibase en action
 
Mariadb mysql avancé
Mariadb mysql avancéMariadb mysql avancé
Mariadb mysql avancé
 
Introduction nosql
Introduction nosqlIntroduction nosql
Introduction nosql
 

En vedette

JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilité
Christophe Laporte
 
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
Clément OUDOT
 
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Christophe Laporte
 
Active dataguard
Active dataguardActive dataguard
Active dataguard
Manoj Kumar
 

En vedette (20)

Architectures haute disponibilité avec MySQL
Architectures haute disponibilité avec MySQLArchitectures haute disponibilité avec MySQL
Architectures haute disponibilité avec MySQL
 
MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs
MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeursMySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs
MySQL 5.7 & JSON - Nouvelles opportunités pour les dévelopeurs
 
MySQL Day Paris 2016 - MySQL as a Document Store
MySQL Day Paris 2016 - MySQL as a Document StoreMySQL Day Paris 2016 - MySQL as a Document Store
MySQL Day Paris 2016 - MySQL as a Document Store
 
MySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise EditionMySQL Day Paris 2016 - MySQL Enterprise Edition
MySQL Day Paris 2016 - MySQL Enterprise Edition
 
Case Study: MySQL migration from latin1 to UTF-8
Case Study: MySQL migration from latin1 to UTF-8Case Study: MySQL migration from latin1 to UTF-8
Case Study: MySQL migration from latin1 to UTF-8
 
MySQL Cloud Service Deep Dive
MySQL Cloud Service Deep DiveMySQL Cloud Service Deep Dive
MySQL Cloud Service Deep Dive
 
MySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB ClustersMySQL High Availability -- InnoDB Clusters
MySQL High Availability -- InnoDB Clusters
 
MySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB Cluster
MySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB ClusterMySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB Cluster
MySQL Day Paris 2016 - MySQL HA: InnoDB Cluster and NDB Cluster
 
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud ServiceMySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
MySQL Day Paris 2016 - Introducing Oracle MySQL Cloud Service
 
MySQL Day Paris 2016 - State Of The Dolphin
MySQL Day Paris 2016 - State Of The DolphinMySQL Day Paris 2016 - State Of The Dolphin
MySQL Day Paris 2016 - State Of The Dolphin
 
MySQL Parallel Replication: inventory, use-cases and limitations
MySQL Parallel Replication: inventory, use-cases and limitationsMySQL Parallel Replication: inventory, use-cases and limitations
MySQL Parallel Replication: inventory, use-cases and limitations
 
Upgrade to MySQL 5.6 without downtime
Upgrade to MySQL 5.6 without downtimeUpgrade to MySQL 5.6 without downtime
Upgrade to MySQL 5.6 without downtime
 
Mix ‘n’ Match Async and Group Replication for Advanced Replication Setups
Mix ‘n’ Match Async and Group Replication for Advanced Replication SetupsMix ‘n’ Match Async and Group Replication for Advanced Replication Setups
Mix ‘n’ Match Async and Group Replication for Advanced Replication Setups
 
JSS2013 : Haute disponibilité
JSS2013 : Haute disponibilitéJSS2013 : Haute disponibilité
JSS2013 : Haute disponibilité
 
Haute disponibilité jss2012
Haute disponibilité jss2012Haute disponibilité jss2012
Haute disponibilité jss2012
 
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
Migration d’annuaires propriétaires vers OpenLDAP : retours d’expérience et b...
 
Fine-tuning Group Replication for Performance
Fine-tuning Group Replication for PerformanceFine-tuning Group Replication for Performance
Fine-tuning Group Replication for Performance
 
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
Tout sur les solutions de haute disponibilité et disaster recovery de sql ser...
 
Qu'est ce qu'un Cluster?
Qu'est ce qu'un Cluster? Qu'est ce qu'un Cluster?
Qu'est ce qu'un Cluster?
 
Active dataguard
Active dataguardActive dataguard
Active dataguard
 

Similaire à MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini

Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenable
LeTesteur
 
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
Aurelien Navarre
 
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
Scaleway
 

Similaire à MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini (20)

Évolution de la supervision chez Ikoula
Évolution de la supervision chez IkoulaÉvolution de la supervision chez Ikoula
Évolution de la supervision chez Ikoula
 
Évolution de la supervision chez Ikoula
Évolution de la supervision chez IkoulaÉvolution de la supervision chez Ikoula
Évolution de la supervision chez Ikoula
 
Serveurs core et virtualisation
Serveurs core et virtualisationServeurs core et virtualisation
Serveurs core et virtualisation
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - Xebia
 
Methodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysqlMethodologie et outils d optimisation php mysql
Methodologie et outils d optimisation php mysql
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenable
 
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
 
Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ?
 
Importer 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4jImporter 500 millions de données de MySQL vers Neo4j
Importer 500 millions de données de MySQL vers Neo4j
 
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
Utiliser pleinement le navigateur et les nouveaux clients web  - AFUP 2007Utiliser pleinement le navigateur et les nouveaux clients web  - AFUP 2007
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
 
Intellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsIntellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server Internals
 
Le nouveau AMP : apache mariadb php
Le nouveau AMP : apache mariadb phpLe nouveau AMP : apache mariadb php
Le nouveau AMP : apache mariadb php
 
Paris JUG Spring Batch
Paris JUG Spring BatchParis JUG Spring Batch
Paris JUG Spring Batch
 
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
De la DB à la DB-as-a-Service : avantages, limites et étapes pour franchir l...
 
Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMP
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Hyper-V Replica : Plan de Reprise d'Activité avec Windows Server 2012
Hyper-V Replica : Plan de Reprise d'Activité avec Windows Server 2012Hyper-V Replica : Plan de Reprise d'Activité avec Windows Server 2012
Hyper-V Replica : Plan de Reprise d'Activité avec Windows Server 2012
 

Plus de Olivier DASINI

MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirementsMySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
Olivier DASINI
 
MySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document StoreMySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document Store
Olivier DASINI
 

Plus de Olivier DASINI (20)

MySQL High Availability Solutions - Avoid loss of service by reducing the r...
MySQL High Availability Solutions  -  Avoid loss of service by reducing the r...MySQL High Availability Solutions  -  Avoid loss of service by reducing the r...
MySQL High Availability Solutions - Avoid loss of service by reducing the r...
 
MySQL Document Store for Modern Applications
MySQL Document Store for Modern ApplicationsMySQL Document Store for Modern Applications
MySQL Document Store for Modern Applications
 
MySQL Performance Best Practices
MySQL Performance Best PracticesMySQL Performance Best Practices
MySQL Performance Best Practices
 
MySQL 8.0.22 - New Features Summary
MySQL 8.0.22 - New Features SummaryMySQL 8.0.22 - New Features Summary
MySQL 8.0.22 - New Features Summary
 
MySQL Database Service - 100% Developed, Managed and Supported by the MySQL Team
MySQL Database Service - 100% Developed, Managed and Supported by the MySQL TeamMySQL Database Service - 100% Developed, Managed and Supported by the MySQL Team
MySQL Database Service - 100% Developed, Managed and Supported by the MySQL Team
 
Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0
 
MySQL 8.0.21 - New Features Summary
MySQL 8.0.21 - New Features SummaryMySQL 8.0.21 - New Features Summary
MySQL 8.0.21 - New Features Summary
 
MySQL 8.0.19 - New Features Summary
MySQL 8.0.19 - New Features SummaryMySQL 8.0.19 - New Features Summary
MySQL 8.0.19 - New Features Summary
 
MySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features SummaryMySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features Summary
 
MySQL 8.0.17 - New Features Summary
MySQL 8.0.17 - New Features SummaryMySQL 8.0.17 - New Features Summary
MySQL 8.0.17 - New Features Summary
 
MySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features SummaryMySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features Summary
 
MySQL Day Paris 2018 - Introduction & The State of the Dolphin
MySQL Day Paris 2018 - Introduction & The State of the DolphinMySQL Day Paris 2018 - Introduction & The State of the Dolphin
MySQL Day Paris 2018 - Introduction & The State of the Dolphin
 
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirementsMySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
MySQL Day Paris 2018 - MySQL & GDPR; Privacy and Security requirements
 
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
MySQL Day Paris 2018 - Upgrade from MySQL 5.7 to MySQL 8.0
 
MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...
MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...
MySQL Day Paris 2018 - MySQL InnoDB Cluster; A complete High Availability sol...
 
MySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document StoreMySQL Day Paris 2018 - MySQL JSON Document Store
MySQL Day Paris 2018 - MySQL JSON Document Store
 
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
MySQL Day Paris 2018 - What’s New in MySQL 8.0 ?
 
MySQL 8.0, what's new ? - Forum PHP 2018
MySQL 8.0, what's new ? - Forum PHP 2018MySQL 8.0, what's new ? - Forum PHP 2018
MySQL 8.0, what's new ? - Forum PHP 2018
 
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
MySQL JSON Document Store - A Document Store with all the benefits of a Trans...
 
MySQL 8.0 - What's New ?
MySQL 8.0 - What's New ?MySQL 8.0 - What's New ?
MySQL 8.0 - What's New ?
 

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)
  • 19. MHA
  • 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 ...
  • 25. Zoom sur MHA, scripting master_ip_online_change_script : script externe lancé lors de la bascule manuelle Ajouts Viadeo Kill 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
  • 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
  • 27. Quiz
  • 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
  • 34. ...
  • 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/
  • 37. :)
  • 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