Bonsoir à tous,
Le sujet est sur la table depuis un moment au sein de l’équipe qui gère l’infrastructure de ZdS : il est temps d’améliorer notre système de sauvegardes.
La situation actuelle
Actuellement, les données du serveur de production sont sauvegardées sur le serveur de bêta.
Le serveur de production dispose d’un disque dur de 50 Go, dont 30 Go sont actuellement occupés. On sauvegarde deux choses :
- les données du site qui sont directement sur le disque (images et dépôts Git des contenus, principalement). En brut, cela représente actuellement 14 Go. À l’aide de Borg Backup, on fait des sauvegardes incrémentales vers le serveur de bêta toutes les 2 heures. Borg parvient à réduire le poids de toutes les sauvegardes à 7 Go. On conserve les sauvegardes des 60 deniers jours.
- la base de données MySQL. On fait une sauvegarde complète par jour, puis des sauvegardes incrémentales toutes les 2 heures. Sur le serveur de production, on ne conserve que deux jours de sauvegardes, mais on utilise rsync pour envoyer les sauvegardes vers le serveur de bêta, où là on conserve 60 jours de sauvegardes. Il faut compter environ 0,5 Go de sauvegarde par jour (~ 400 Mo pour la sauvegarde complète, puis autour de 10 Mo pour les sauvegardes incrémentales). Sur la bêta, les sauvegardes des bases de données représentent donc 31 Go.
Vous trouverez les détails techniques ici.
Le serveur de bêta dispose de deux disque durs :
- le disque système (qui contient aussi la version bêta de ZdS, qui est un clône de la version de production en terme de données, donc aussi en terme de volume) a une capacité de 46 Go, dont 32 sont occupés ;
- un disque de 46 Go qui sert à stocker les sauvegardes venant du serveur de production.
Si vous faîtes un petit calcul, vous vous rendez compte que le disque dédié aux sauvegardes est quasiment plein (37 Go sur 46). C’est pourquoi il faut agir !
Un autre problème est que, actuellement, il n’y a pas d’autres sauvegardes, hors des serveurs de ZdS. L’idéal serait d’avoir aussi une sauvegarde chez un des membres, "au cas où". Bien-sûr, cette sauvegarde externe doit être chiffrée, depuis les serveurs de ZdS.
On a donc deux problèmes :
- avec la configuration actuelle, on atteint nos capacités de stockage,
- il n’y a pas de sauvegarde externe.
Solutions envisagées
Puisque ce sont les sauvegardes de la base de données qui prennent le plus de place, autant s’attaquer à elles. Une première solution plutôt facile est de les sauvegarder aussi avec Borg, et voir à quel point il arrive à dédupliquer et gagner en place (si c’est comme pour les données du site, la sauvegarde totale des bases de données peut peut-être peser moins d’un Go !).
Deuxième chose : a-t-on besoin de 60 jours de sauvegardes, avec une granularité de 2h entre chaque sauvegarde ? On pourrait par exemple garder la granularité de 2h pour les deux dernière semaines, puis une sauvegarde par semaine pour les 6 semaines précédentes (par exemple, je ne sais pas vraiment quelles sont les valeurs adaptées, c’est surtout une histoire de risque…).
Sauvegardes externes
Concernant les sauvegardes externes, borg permet de chiffrer le dépôt où il stocke les sauvegardes ; donc ceux qui le souhaitent pourraient juste faire un rsync entre les serveurs de ZdS et leur stockage pour récupérer les sauvegardes chiffrées de ZdS.
La question qui se pose ici, c’est depuis quel serveur récupérer la sauvegarde. En l’état actuel des choses, le plus simple (et le plus faisable en terme de stockage…) et de récupérer la sauvegarde située sur le serveur de bêta. Cependant, dans ce cas, le lien serveur de production -> serveur de bêta est un single point of failure : si le transfert entre le serveur de production et le serveur de bêta est buggué, on récupérera une sauvegarde bugguée…
L’idéal serait de faire la sauvegarde du serveur de production sur le serveur de production (laisser borg stocker ses sauvegardes dans un coin du serveur de production), faire un rsync du dépôt de borg vers le serveur de bêta, et laisser ceux qui le souhaitent faire des rsync entre la production et leur espace de stockage. Malheureusement, j’ai bien peur que l’espace de stockage disponible sur le serveur de production ne nous permette pas cette solution… Je viens de regarder et, apparement, rajouter un disque de 50 Go au serveur de production coûterait 2,16€ / mois. Est-ce qu’on peut se le permettre, est-ce qu’on veut se le permettre ?
Des avis, suggestions, remarques ? N’hésitez pas à demander si vous souhaitez que je précise un point.