Hébergement Haute-Disponibilité dédié pour Ruby on Rails - Paris On Rails - 17 novembre 2006

La page est créée Lionel Camus
 
CONTINUER À LIRE
Hébergement Haute-Disponibilité dédié pour Ruby on Rails - Paris On Rails - 17 novembre 2006
Hébergement Haute-Disponibilité
   dédié pour Ruby on Rails
  Paris On Rails – 17 novembre 2006
Hébergement Haute-Disponibilité dédié pour Ruby on Rails - Paris On Rails - 17 novembre 2006
Qu'est-ce que la haute disponibilité

●   La Haute disponibilité consiste à mettre en
    œuvre l'environnement nécessaire à un
    fonctionnement le plus sûr possible.
    –   Prévention des fautes : Choix de l'infrastructure,
        simplicité, surveillance et anticipation.
    –   Tolérance aux fautes
    –   Élimination des fautes : sysadmins compétents et
        disponibles.
    –   Prévision des fautes : Planification et tests des
        migrations, dialogue entre les développeurs et
        sysadmins, documentation.
Hébergement Haute-Disponibilité dédié pour Ruby on Rails - Paris On Rails - 17 novembre 2006
Bénéfices de l'approche Haute
                 Disponibilité
●   La réduction des nuisances due aux pannes.
●   L'augmentation de qualité de service.
●   Une grande souplesse d'évolution :
    –   scalabilité
    –   changements technologies profonds aisés
●   Un gain justifié de crédibilité auprès des
    partenaires commerciaux.
Hébergement Haute-Disponibilité dédié pour Ruby on Rails - Paris On Rails - 17 novembre 2006
Les points forts de Rails

●   K.I.S.S.
    –   En privilégiant la simplicité, le développement
        d'applications Ruby on Rails aide à la réduction des
        erreurs humaines.
●   Choix dans la gestion des sessions :
    –   Fichiers partagés par NFS
    –   Base SQL
    –   Memcached
●   Facilité de déploiement sur de multiples serveurs
    avec Capistrano
Hébergement Haute-Disponibilité dédié pour Ruby on Rails - Paris On Rails - 17 novembre 2006
Quel serveur choisir ?

●   Rails est utilisable dans différents
    environnements et de multiples solutions valides
    existent.
●   Deux modèles co-existent, proxy HTTP vers
    Mongrel et FastCGI.
                          Navigateurs    Navigateurs
                            HTTP           HTTP

                                HTTP            HTTP

   Serveurs                                                           Serveurs
                         Serveur HTTP   Serveur HTTP
 d'application                                                      d'application
                          Proxy HTTP    Client FastCGI
Rails - Mongrel                                                    Rails - FastCGI

                  HTTP                                   FastCGI
Apache/2.2 + mod_proxy_balancer +
                 Mongrel
●   Facilité d'intégration à une infrastructure
    existante
●   Apache est incassable
●   Tout sysadmin connaît Apache
●   La moins performante
●   Développement d'Apache fiable mais lent
LightTPD, nginx

●   Serveurs HTTP au moins 3x plus rapides
    qu'Apache2 sur les fichiers statiques.
●   Configuration simple à définir, simple à
    maintenir.
●   Développeurs accessibles par Mailing-List, IRC,
    très réactifs.
●   Uploads dans nginx : fichier temporaire envoyé à
    un serveur d'application fonctionnel.
    Exemple : un déploiement Capistrano
    n'interrompra pas un envoi de fichier en cours.
FastCGI, Mongrel ?

●   Les deux fonctionnent et sont stables.
●   Utilisez FastCGI pour LightTPD < 1.5 :
    Le proxy HTTP actuel n'est pas fiable.
●   Lancement et gestion des processus FastCGI ou
    Mongrel par Monit, qui les relancera en cas de
    crash.
●   Surveillance l'utilisation mémoire des processus
    & crashs éventuels : déclenchement d'alertes.
Choix du serveur : dans le temps

●   Aucune des solutions n'est actuellement
    disponible en paquet dans les distributions Linux
    stables : nécessité de tester, compiler et tenir à
    jour manuellement.
●   L'approche Hautement Disponible permet de
    basculer d'une solution à l'autre sans arrêt de
    service.
●   LightTPD 1.5 est extrêmement prometteur :
    –   Meilleur proxy HTTP
    –   backend linux-sendfile-aio
Choix du serveur : conclusion

●   LightTPD ou nginx pour les sites à fort trafic
    statique (serveur de téléchargement, vidéos,
    photos)
●   Attention aux fuites de mémoires du serveur
    HTTP ou de l'application Rails :
    –   LightTPD en a souffert sur certaines configurations.
    –   Mongrel réagit de manière inattendue dans
        certaines applications sous une très forte charge.
●   La bonne solution serveur est celle que les
    sysadmins maîtrisent : la compréhension
    influence directement la fiabilité.
Qualité et optimisations de l'application

●   Vérifier l'utilisation mémoire (attention aux
    variables d'instance, aux globales)
●   Modifier les pages demandant de trop longs
    temps de calculs (rester < 1s) en utilisant
    BackgrounDRb.
●   Intégrer à la batterie de tests des benchmarks
    avec ApacheBench et httperf, validant l'utilisation
    mémoire et les performances.
    Tester différentes URLs sous de nombreuses
    connexions simultanées.
●   Tester l'application sur tout les navigateurs.
The
 adventures of
 scaling

source :
The adventures of scaling, Stage 4
Analyse :
            The adventures of scaling
●   Les modèles NFS et MySQL
    sont bon
●   Un oubli : le serveur NFS doit
    lui même être Hautement
    Disponible
●   Une erreur, le frontal est un
    proxy applicatif unique :
    –   C'est un point de panne.
    –   C'est un facteur limitant les
        performances et les capacités
        de mise à l'échelle.
Scaling Rails with
 Apache 2.2,
 mod_proxy_balancer
 and Mongrel

source :
BlogFish - Jonathan Weiss
Analyse :
      Scaling Rails with Apache 2.2,
     mod_proxy_balancer and Mongrel
●   Le modèle est identique à
    Scale with Rails.
●   On retrouve la même erreur, le
    Single Point Of Failure
    applicatif d'Apache.
Besoin d'un meilleur modèle :
        méthodes hautement disponibles
●   Réduction du nombre d'intermédiaires de niveau
    applicatif :
    –   Suppression de la limite de performances d'un
        proxy unique.
●   Pas d'ajout de bug dû à un proxy HTTP :
    –   Transparence totale de la couche HA.
●   Failover (basculement) sur le frontal.
●   Surveillance et envoi d'alertes depuis le frontal
    actif.
Présentation d'une solution Hautement
              Disponible
●   Frontaux : Linux Virtual Server + Keepalived
    –   LVS : intégré au noyau Linux 2.6
    –   Performances supportant aisément + de 100
        serveurs réels.
    –   Totale indépendance vis à vis du protocole HTTP.
●   Serveurs réels : machines indépendantes,
    embarquant le serveur HTTP et le serveur
    d'application Rails et ses fichiers.
●   Serveur SQL Hautement Disponible
●   Filer Hautement Disponible
Visuel d'une solution Haute Disponibilité
Évaluer le besoin d'un Filer :
             serveur de fichiers NFS
1)Le site n'utilise que des fichiers déployés avec
  l'application : pas de Filer.
  –   Déploiement distribué par Capistrano et
      Subversion.
2)Le site met en ligne des contenus envoyés par
  les visiteurs : utilisation d'un Filer.
  –   Uniformisation des accès aux fichiers.
  –   Performances élevées : seul le serveur HTTP entre
      en jeu pour
       ●   Les contenus statiques.
       ●   Le cache statique html de Rails.
Linux Virtual Server + Keepalived :
                  failover
●   Le failover des frontaux permet de gagner un
    répartiteur de charge sans créer de point de
    panne.
●   Le remplacement automatique d'un frontal par
    son second est transparent :
    –   prend moins d'une seconde.
    –   préserve les connexions existantes grâce à une
        communication entre les noyaux des frontaux.
Linux Virtual Server + Keepalived :
            répartition de charge
●   Fonctionnalités de répartition :
    –   Répartie selon la puissance ou la charge des
        serveur réel.
    –   Monitoring par hash d'URL HTTP(S), connexion
        TCP ou personnalisé :
         ●   Les serveurs réels déficients sont ajoutés ou enlevés du
             groupe rapidement.
         ●   Alertes Mail & logs
    –   Choix de l'algorithme de répartition de charge pour
        maximiser les performances selon votre application.
Les besoins matériels pour Rails HA

●   Au moins 4 machines
●   Les frontaux :
    –   2 machines, de puissance indifférente, composées
        de matériel éprouvé plutôt que moderne.
    –   Au moins 2 cartes réseau.
●   Les serveurs réels :
    –   À partir de 2 machines.
    –   Bien équipés en RAM (au moins 2Go) :
         ●   nombreux serveurs d'application simultanés
         ●   large cache de fichiers.
Les besoins matériels annexes

●   Un ou des serveurs SQL HA :
    –   Assuré par réplication multi-maîtres ou failover.
●   Un filer HA :
    –   Un NAS spécialisé, lui même redondant
    –   Solution économique : deux serveur NFS Linux
         ●   failover HeartBeat
         ●   synchronisation des données en temps réel par DRBD
         ●   linux-raid sur des disques hotplug
         ●   LVM pour l'abstraction de volumes et XFS pour étendre le
             système de fichier à chaud
Futur, en Vrac

●   Zed Shaw, développeur hors-normes de Mongrel
    envisage :
    –   A "mostly C" version for Unix only that's fast as
        blazes.
    –   un remplaçant de mongrel_cluster
    –   un module nginx
●   Une solution Haute Disponibilité vous permet
    d'envisager sereinement les évolutions futures.
●   La solution qui marche aujourd'hui est meilleure
    que celle qui devrai marcher demain ;)
Vos expériences

●   Les retours d'expérience sont précieux :

                    À vous !

    Auteur :
       François Simond
    Licence de cette présentation :
       BSD
Vous pouvez aussi lire