Bonsoir à tous !
Pour occuper votre temps cet été (on sait tous que c’est plus calme en juillet/août), je vous propose de monter ensemble et en plusieurs étapes une palteforme Web Haute Disponibilité basée uniquement sur des technologies OpenSource. HAPROXY, Nginx, MySQL, NFS, Puppet, tout y passera. Faites chauffer les VM, faites chauffer le café, on va y aller !
Aujourd’hui je ne ferai que vous presenter cette infra, les choix techniques, et les differentes étapes de mise en place.
Un schéma résume souvent mille paroles et explications en IT. Je vais commencer par le schéma donc :
Alors que voit-on sur ce schéma ?
Tout d’abord, on a une couche de load balancing HTTP/HTTPS gérée par HAPROXY. Cette couche est clusterisée en mode failover grace à Pacemaker.
On retrouve ensuite les serveurs de caches Varnish qui soulagent au mieux les frontaux web grace au maintiens des éléments statique et des pages compilés.
La charge est alors répartie sur X serveurs web frontaux propulsés par le serveur web Nginx. Si j’ai choisi Nginx, c’est pour sa robustesse et sa capacité à gérer un nombre de connexions en moyenne 10 fois superieur à celui d’Apache2. Les frontaux web ne portent que de la configuration de serveur web et des interpreteurs de code (comme PHP par exemple).
Le code et autres données statiques sont portés par le serveur de fichiers dans le réseau backend. Le fichiers sont donc disponibles grace à un montage NFS.
Les applications web utilisent les frontaux SQL pour effectuer les requêtes en base. La charge sera répartie entre ces frontaux via ldirectord, un outil de load balancing intégré à Pacemaker.
Les frontaux SQL, eux, interrogent des datanode SQL. Le SGBD retenu est MySQL. En effet il existe en version Cluster et ses performances ne sont plus à prouver.
Pour les bases, on utilisera au final du MySQL Proxy pour faire du Split Read/Write sur des base répliqués en Master/Slave (j’explique le pourquoi du comment dans le billet).
En parallèle, dans le VLAN d’administration, on trouvera un Syslog portant les logs de l’ensemble de la plateforme. On trouvera aussi une machine d’administration portant un ensemble d’outils mais aussi un gestionnaire de configuration Puppet.
Tout ce beau monde tournera dans la mesure du possible sous FreeBSD. Dans certain cas (MySQL) je passerai par Linux pour la facilité d’installation et le support fourni.
Au niveau de l’ordre de déploiement on fera dans l’ordre :
- Frontaux Web (Nginx + PHP5)
- Serveur de fichier (ZFS + NFS)
- Réplication MySQL
- MySQL Proxy : Split Read/Write
- HAPROXY
- Mise en cache avec Varnish
- Pacemaker
- Syslog
- CADEAU : les classes Puppet (le tuto puppet est déjà disponible : http://madeinsyria.fr/2011/06/howto-puppet-administration-et-industrialisation-de-masse/ )

ça peut être assez intéressant à faire
Concernant Nginx, j’ai l’impression que c’est de plus en plus utilisé au détriment d’apache. C’est qu’une impression ou pas ?
Si on regarde bien, c’est toujours Apache avec sont 68% de part de marché qui l’emporte. Nginx ne fait “que” 6.8%. Par contre, pour tous les gros sites, prenant de la charge, on retrouve de plus en plus de web servers haute perf (Nginx, Lighttpd, Cherokee). A terme, on risque de voir ces Web Server prendre une place très conséquente étant donné les faibles performances d’apache.
Hello,
Question con: est-ce que l’accès NFS n’est pas un point of failure dérangeant ? Sachant que ce protocole a tendance à planter quand soumis à de fortes charges, je ne lui ferait pas confiance.
As-tu entendu parler de DRBD ?
Hola l’ami
L’accès au static files server est bien un SPOF si tu n’as qu’un server. Dans ma situation, et en prod, il y a 2 serveurs répliqués via du ZFS. L’experience que j’ai en prod jusqu’à maintenant sur ce genre de plateforme avec du NFS n’est pas négative. Il n’empêche que… les performances et la redondance commence à se faire désirer. C’est pour cela que mon choix n’est pas arrêté et que je maquette d’autre FS tel que MoosFS.
Concernant DRBD, j’ai une experience significative avec. Malheureusement il n’est pas du tout adapté à cause de son faible taux de transfère inter-datacenter.
[...] de façon technique avec la mise en place de la première brique de notre Infra Web Haute Dispo (http://madeinsyria.fr/2011/08/summer-camp-infra-web-haute-disponibilite/), les frontaux Web. Ils porteront principalement : Nginx et [...]
[...] de façon technique avec la mise en place de la première brique de notre Infra Web Haute Dispo (http://madeinsyria.fr/2011/08/summer-camp-infra-web-haute-disponibilite/), les frontaux Web. Ils porteront principalement : Nginx et [...]
Bonjour, suite d’article sympa ! J’espère qu’il y aura la suite très bientôt !
Au fait, avec quoi fais-tu tes graphs réseau ?
Je suis sous Mac et j’utilise Omnigraffle. Sous windows, tu as visio.
Bonjour à toi,
Depuis quelques temps je lis les différents sujets que tu as mis en ligne concernant la plateforme haute disponibilité.
Encore bravo et merci pour ces explications, et exemples !
Malheureusement, les schémas (images) que tu proposes, principalement sur le premier sujet explicatif ne sont plus visible. Du coup, j’ai un peu de difficulté à visualiser les différents vlans que tu mets en place.
Je passe par là puisqu’il est impossible de t’envoyer un formulaire de contact (manque le captcha)
Serait-il possible, si tu as encore sous la main le schéma global, que tu me le fasses parvenir par mail ?
Par avance merci.
Elmheryne.