[Update 2021] Faire un Backup Total de son Serveur Dédié avec Rsnapshot

Dans cet article, je noterai

  • Serveur de Sauvegarde : le serveur qui sauvegarde vos données
  • Serveur de Donnée : le serveur usité à sauvegarder

Personnellement, pour le serveur de sauvegarde, j’utilise un vieux ordinateur de récupération avec Lubuntu. J’aimerai bien essayer de le remplacer par mon NAS Synology. Ce sera le sujet d’une mise à jour de ce billet 🙂

J’utilise un disque dur externe pour la sauvegarde de mes serveurs. Je le note /media/<computer>/<hdd_backup>.

Chacun de mes serveurs écoutent sur un port SSH différents, je le note <port_ssh>.

On notera respectivement les ips des serveurs de sauvegarde et de donnée <ip_serveur_sauvegarde> et <ip_serveur_donnee>.

Préparation du disque dur externe

Pour préparer votre disque dur externe, commencer par installer GParted :

Puis formatter votre disque dur en ext4 et redémarrer votre ordinateur de sauvegarde.

Initialisation du serveur de sauvegarde et du serveur de donnée

Exécuter sur le serveur de sauvegarde et le serveur de donnée.

Exécuter sur le serveur de donnée.

Exécuter sur le serveur de sauvegarde.

Test de la connexion SSH à distance

Sur chaque serveur, on réalise le test suivant pour vérifier que rsync est bien installé. Vérifier que votre répertoire /home/ se copie dans /mnt/backup_test/ et annuler la procédure avec CTRL-C.
Exécuter sur le serveur de sauvegarde.

On réalise le test suivant pour vérifier que l’on puisse copié des clés SSH. Vous devrez entrer votre mot de passe root lors de cette manipulation
Exécuter sur le serveur de sauvegarde.

Puis on teste la connexion

Et la synchronisation rsync à distance

Configuration du serveur de donnée

Création de l’utilisateur

On se connecte au serveur de donnée et on créé le profil de l’utilisateur backup

Script principal

Remplir le fichier ouvert avec ce script :

Script Externes

On créé ensuite les scripts pour sauvegarder les bases de données, les dossier SVN, ect.

Vous pouvez tester les scripts ci-dessous avec la commande :

ou

Script MySQL v1

Remplir le fichier ouvert avec ce script, n’oublier de remplacer <mot_de_passe_mysql> par votre mot de passe MySQL :

Script MySQL v2

Si une erreur du type « Warning: Using a password on the command line interface can be insecure. » apparaît lors de la sauvegarde des base MySQL alors vous devrez changer le script v1 par le script v2 ci-dessous. Ceci est dû à une mise à jour de MySQL pour la sécurité

Et vous devez créer le fichier

et le remplir ainsi

Source : https://www.skyminds.net/mysql-resoudre-warning-using-a-password-on-the-command-line-interface-can-be-insecure/

Script PostgreSQL

Remplir le fichier ouvert avec ce script :

Script SVN

Remplir le fichier ouvert avec ce script, n’oublier de remplacer <repertoire_svn> par le dossier racine de votre SVN :

Script Elasticsearch

Remplir le fichier ouvert avec ce script :

Configuration de l’arborescence

Configuration des droits utilisateurs

Ouvrir le fichier sudoers :

Et rajouter les lignes suivantes :

Et si il faut sauvegarder des bases MySQL

Et si il faut sauvegarder des bases PostgreSQL

Configuration du serveur de sauvegarde

Configuration des droits utilisateurs

Ouvrir le fichier sudoers :

Et rajouter les lignes suivantes :

Ouvrir le fichier de configuration SSH :

Et rajouter les lignes suivantes :

Configuration des clés SSH

Puis on test la connexion

Et la synchronisation rsync à distance

Configuration de Rsnapshot

Remplir le fichier ouvert comme ci-dessous :

Puis

Configuration des exclusions

Remplir le fichier ouvert avec les dossiers qui sont exclus et qui ne seront pas sauvegarder :

Remplir le fichier de configuration

Le répertoire principal de sauvegarde

Les intervalles de sauvegarde, ici on garde 6 sauvegardes horaires, 7 sauvegardes journalière, 4 sauvegardes hebdomadaires et 3 sauvegardes mensuelles.

Les arguments de rsync

La configuration du port SSH

Le lancement des scripts, à placer à la fin du fichier de configuration. Ici, un exemple avec 4 scripts de sauvegardes (ceux que nous avons défini plus haut) c’est à dire les scripts de sauvegarde de MySQL, PostgreSQL, SVN, Elasticsearch.

et le backup des données prends la forme de :

Configuration de l’automatisation

Rajouter les lignes suivantes au cron :

Divers : envoyer un mail après chaque backup

On copie l’outil de rapport  rsnapshot, pour cela on commence par le rechercher

J’obtiens

Et on le copie dans le dossier local

On installe le paquet sSMTP

On édite le fichier de configuration

Et on remplit les champs

On édite le fichier de configuration des aliases

Et on rajoute

Et on teste la configuration en envoyant un mail

Puis on met à jour le crontab

Et

Divers : cas d’une protection DynHost

Si vous utilisez une protection DynHost sur votre serveur de donnée, suivez cette partie.
Sur le serveur de donnée, installer ddclient.

Editez le fichier /etc/ddclient.conf afin d’y saisir les informations nécessaires à la mise à jour du couple IP/DNS. Ci-dessous, avec notre exemple pour OVH :

Enfin, redémarrez ddclient pour prendre en compte les modifications :

Divers : sauvegarde d’Elasticsearch

Je me sers d’Elasticsearch pour Akeneo PIM. C’est un peu différent de sauvegarder des donnée Elasticsearch d’une base de donnée MySQL par exemple. Voici donc un petit aparté consacré à ce dernier.

Premièrement, on installe cURL si ce n’est pas déjà fait sur le serveur de sauvegarde et de donnée où se trouve le PIM.

Pour éviter des erreurs, on lance ces trois commandes sur le serveur de donnée où se trouve le PIM.

On se connecte ensuite au serveur de sauvegarde puis on lance les commandes suivantes :

On doit recevoir une double accolade : { }

On doit recevoir une réponse non vide.

On réalise la sauvegarde :

On vérifie la sauvegarde :

Pour effacer la sauvegarde on utilise la commande :

Pour restorer une sauvegarde on utilise la commande :

Si lors de l’installation, Elasticsearch ne démarre plus, lancer la commande :

Source :
https://linuxaws.wordpress.com/2018/09/21/how-to-create-snapshots-of-elasticsearch-cluster-data-and-restore/
https://discuss.elastic.co/t/incremental-snapshot-in-elasticsearch/93874/2
https://www.elastic.co/fr/blog/found-elasticsearch-snapshot-and-restore
https://qbox.io/blog/elasticsearch-data-snapshots-restore-tutorial
https://medium.com/@ebaneckatuh/how-to-create-and-restore-an-elasticsearch-index-using-a-bash-script-1ff1e66f0e8f

Divers : mise en veille pour la nuit

Lorsque je ne suis pas au bureau, je préfère que le serveur de sauvegarde reste en veille.
L’ordinateur reste en veille de 00:17 à 10:00.

On ajoute la ligne

Puis on redémarre cron

Problèmes possibles

Erreur « Access denied for user ‘root’@’localhost' »

Ce problème provient de la sauvegarde d’une base de donnée MySQL. Il est dû à un problème de gestion des privilèges.

Source : https://askubuntu.com/questions/763336/cannot-enter-phpmyadmin-as-root-mysql-5-7/763359#763359

Erreur « Replace space by tabs »

Si vous avez ce problème c’est qu’il faut remplacer les espaces par des tabulations dans le fichier /etc/rsnapshot.conf

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *