Lorsqu’on parle de haute disponibilité, on parle de load-balancer, de plusieurs serveurs frontaux, qui tournent sur le même code grâce à la mise en production d’un code versionné, et sur des bases de données qui ont elles-mêmes leur propre stratégie pour la haute disponibilité.
Le problème est de servir des fichiers qui ne sont pas versionnés, mais plutôt uploadés (par des utilisateurs, ou dans mon cas des administrateurs, un peu comme un blog), surtout quand ça passe par une interface admin. Quelle stratégie adopter ? Les stratégies que je vais présenter ont l’avantage d’être relativement simple et rapide à mettre en place, et conviennent tout à fait (jusqu’à un certain point qu’on serait tous content de franchir !).
Stratégie 1 : stockage en base de données
La première stratégie consiste à stocker ces fichiers dynamiques dans une base de données. La base de données a sa stratégie de réplication, de sauvegarde, donc c’est un endroit sûr où stocker ses données.
Ensuite, il y a deux possibilités pour servir ces fichiers :
- si la demande n’est pas trop importante, et que les fichiers sont plutôt statiques (ou si on peu se satisfaire d’une ancienne version pendant un temps), alors (ou je sais c’est moche) on peut les servir directement via la base de données.
- si la demande est plus importante, alors on peut aller chercher via cron les fichiers modifiés dans la base de données à interval régulier, et les stocker sur le filesystem de la machine qui va les servir
Stratégie 2 : stockage directement en système de fichiers
L’autre possibilité est d’avoir donc un serveur qui héberge ces fichiers. On met en place un serveur FTP sur une machine. Ensuite, dès qu’un fichier est uploadé, supprimé ou modifié, alors on envoie le fichier sur les frontaux qui s’occupent de les servir. Côté soft, on peut utiliser PROFTPD qui supporte parfaitement ce genre d’opération.
Histoire de pallier d’éventuels problèmes de réseau au moment de la copie, on peut aussi utiliser RSYNC pour synchroniser les fichiers de temps à autres.
Et si le serveur FTP tombe en panne ? On peut utiliser un pacemaker pour basculer l’IP du FTP vers le serveur de backup 🙂