URL: https://linuxfr.org/forums/programmation-php/posts/architecture-tolerance-de-panne-en-lamp-des-conseils Title: Architecture tolérance de panne en LAMP : des conseils ? Authors: jemore Date: 2015年06月29日T22:00:04+02:00 License: CC By-SA Tags: mongodb et redis Score: 2 Bonjour à tous. J'ai une application PHP+MySQL qui est actuellement déployée de la manière suivante (je simplifie) : - deux serveurs Apache avec un loadbalancer en amont (ils executent la même application) - le code source de l'application et les ressources statiques (css, js) sont sur un partage NFS - les sessions PHP sont sur NFS - les "upload" que font les utilisateurs sont aussi sur NFS - Un serveur de BD MySQL (la BD est en local) En gros, l'application est un CMS (pensez à Joomla ou Wordpress). Ces 3 serveurs + le NFS sont interconnecté sur un réseau. Le réseau est considéré comme "fiable et hautement disponible". Par contre, on me demande de réfléchir à une architecture qui soit plus robuste en cas de défaillance d'Apache, du NFS ou de MySQL : - pour les frontaux apache : j'ai un loadbalancer, donc en cas de panne d'un des Apache, l'autre prend le relai - les sessions étant sur le NFS, les utilisateurs ne perdent pas la session en cas de crash d'un serveur Apache, mais le NFS a un problème de "Lock" avec les sessions PHP - En cas de défaillance de NFS, tout est perdu (l'application est KO) - En cas de défaillance de MySQL, une grande partie de l'appli est perdue (on considère que toute les pages n'ont pas besoin de la bd). - Notre NFS (une baie Netapp) est utilisé par d'autres projets, et commence a donner des signes de fatigue (latence importante + indisponibilité de temps à autre). Pour augmenter un peu la tolérance à la panne de mon application, je mets en place les solutions suivantes : - le code de l'application + ressources statiques seront en local sur Apache (avec rSync entre les serveurs) - les sessions seront stockées dans deux bases REDIS maitre/escalve grace au connecteur natif PHP - le "simple" MySQL devient un "MySQL CLUSTER NDB" (deux serveurs maitres répliqués entre-eux) Le problème qu'il me reste à résoudre est "les uploads des utilisateurs" qui se faisaient sur NFS. Si le NFS est KO, le utilisateurs ne peuvent plus faire d'upload. Je souhaite minimiser aussi l'impact sur l'application PHP pour ne pas avoir à tout redévelopper. Avez-vous déja mis en place une architecture à haute tolérance de panne sur un produit LAMP pas vraiment prévu pour cela à la base ? D'une manière générale, par quoi pourrais-je remplacer NFS dans mon infrastructure ? Avez-vous des infrastructures "types" qui permettent de faire de la haute-dispo LAMP ? J'ai étudié les solutions suivantes : - upload en local (sur le Apache sur lequel l'utilisateur est connecté) puis réplication Rsync entre les serveurs : pas jouable si on augmente le nombre de serveur Apache et le nombre d'upload (le systeme va passer son temps à synchroniser), et de plus cela introduit un délai entre l'upload et la prise en compte par les frontaux. - upload non pas sur le filesystem mais dans la BD Redis ou MySQL : je n'aime pas trop stocker du binaire dans une BD. J'aurais la possibilité de mettre MongoDB (en répartition sur plusieurs serveurs), mais j'ai peur que les perfs ne soient pas au rendez-vous. - systeme de fichier réparti (GPFS ou autre) : semble complexe a mettre en oeuvre, surtout en mode "faut que ca coute pas cher" Merci ! Quand tout sera en place, je ferais un retour par ici. Jerome.