Sauvegarde, partie 2 : Revue et test des outils de sauvegarde basés sur rsync

Sauvegarde, partie 2 : Revue et test des outils de sauvegarde basés sur rsync
Cette note poursuit

le cycle sur la sauvegarde

  1. Sauvegarde, partie 1 : Pourquoi faire des sauvegardes, aperçu des méthodes et technologies
  2. Sauvegarde, partie 2 : Aperçu et test des outils de sauvegarde basés sur rsync
  3. Sauvegarde, partie 3 : Aperçu et test de duplicity, duplicaty, deja dup
  4. Sauvegarde, partie 4 : Aperçu et test de zbackup, restic, borgbackup
  5. Sauvegarde, partie 5 : Test de bacula et veeam backup for linux
  6. Sauvegarde, partie 6 : Comparaison des outils de sauvegarde
  7. Sauvegarde, partie 7 : Conclusions

Comme nous l'avons déjà mentionné dans le premier article, il existe un grand nombre de programmes de sauvegarde basés sur rsync.

Parmi ceux qui conviennent le mieux à nos conditions, je vais examiner 3 : rdiff-backup, rsnapshot et burp.

Ensembles de fichiers

Les ensembles de fichiers pour les tests seront identiques pour tous les candidats, y compris les futurs articles.

Premier ensemble: 10 Go de fichiers multimédias, et environ 50 Mo — le code source du site en php, des tailles de fichiers allant de quelques kilooctets pour le code source à des dizaines de mégaoctets pour les fichiers multimédias. L'objectif est d'imiter un site statique.

Deuxième ensemble: dérivé du premier en renommant le sous-répertoire contenant des fichiers multimédias de 5 Go. L'objectif est d'étudier le comportement du système de sauvegarde lors du renommage d'un répertoire.

Troisième ensemble: dérivé du premier en supprimant 3 Go de fichiers multimédias et en ajoutant 3 Go de nouveaux fichiers multimédias. L'objectif est d'étudier le comportement du système de sauvegarde lors d'une opération typique de mise à jour d'un site.

Obtention des résultats

Toute sauvegarde est effectuée au moins 3 fois et accompagnée d'une vidange des caches du système de fichiers via les commandes sync et echo 3 > /proc/sys/vm/drop_caches , tant côté serveur de test que côté serveur de stockage de sauvegardes.

Sur le serveur qui sera la source des sauvegardes, un logiciel de surveillance est installé — netdata, qui sera utilisé pour évaluer la charge sur le serveur lors de la sauvegarde, ce qui est nécessaire pour évaluer la charge serveur par le processus de sauvegarde.

Je considère également que le serveur de stockage de sauvegardes est plus lent au processeur que le serveur principal, mais possède des disques plus volumineux avec une vitesse d'écriture aléatoire relativement faible — situation la plus courante lors de la sauvegarde, et parce que le serveur de sauvegarde ne devrait en principe pas effectuer d'autres tâches que la sauvegarde, je ne suivrai pas sa charge avec netdata.

J'ai également modifié les serveurs sur lesquels je vais tester différents systèmes de sauvegarde.

Voici maintenant leurs caractéristiquesProcesseur

sysbench --threads=2 --time=30 --cpu-max-prime=20000 cpu run
sysbench 1.0.17 (utilisant system LuaJIT 2.0.4)

Exécution du test avec les options suivantes :
Nombre de threads : 2
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle


Limite des nombres premiers : 20000

Initialisation des threads de travail...

Threads démarrés !

Vitesse du CPU :
    événements par seconde :  1081.62

Statistiques générales :
    temps total :                          30.0013s
    nombre total d'événements :              32453

Latence (ms) :
         min :                                    1.48
         moyen :                                  1.85
         max :                                   9.84
         95e percentile :                        2.07
         somme :                                59973.40

Équité des threads :
    événements (moyenne/écart type) :           16226.5000/57.50
    temps d'exécution (moyenne/écart type) :   29.9867/0.00

Mémoire vive, lecture…

sysbench --threads=4 --time=30 --memory-block-size=1K --memory-scope=global --memory-total-size=100G --memory-oper=read memory run
sysbench 1.0.17 (utilisant system LuaJIT 2.0.4)

Exécution du test avec les options suivantes :
Nombre de threads : 4
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle


Exécution d'un test de vitesse de mémoire avec les options suivantes :
  taille de bloc : 1KiB
  taille totale : 102400MiB
  opération : lecture
  portée : globale

Initialisation des threads de travail...

Threads démarrés !

Opérations totales : 104857600 (5837637.63 par seconde)

102400.00 MiB transférés (5700.82 MiB/sec)


Statistiques générales :
    temps total :                          17.9540s
    nombre total d'événements :              104857600

Latence (ms) :
         min :                                    0.00
         moyen :                                  0.00
         max :                                   66.08
         95e percentile :                        0.00
         somme :                                18544.64

Équité des threads :
    événements (moyenne/écart type) :           26214400.0000/0.00
    temps d'exécution (moyenne/écart type) :   4.6362/0.12

… et écriture

sysbench --threads=4 --time=30 --memory-block-size=1K --memory-scope=global --memory-total-size=100G --memory-oper=write memory run
sysbench 1.0.17 (utilisant system LuaJIT 2.0.4)

Exécution du test avec les options suivantes :
Nombre de threads : 4
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle


Exécution d'un test de vitesse de mémoire avec les options suivantes :
  taille de bloc : 1KiB
  taille totale : 102400MiB
  opération : écriture
  portée : globale

Initialisation des threads de travail...

Threads démarrés !

Opérations totales : 91414596 (3046752.56 par seconde)

89272.07 MiB transférés (2975.34 MiB/sec)


Statistiques générales :
    temps total :                          30.0019s
    nombre total d'événements :              91414596

Latence (ms) :
         min :                                    0.00
         moyen :                                  0.00
         max :                                 1022.90
         95e percentile :                        0.00
         somme :                                66430.91

Équité des threads :
    événements (moyenne/écart type) :           22853649.0000/945488.53
    temps d'exécution (moyenne/écart type) :   16.6077/1.76

Disque sur le serveur source de données

sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio run
sysbench 1.0.17 (utilisant LuaJIT 2.0.4 du système)

Exécution du test avec les options suivantes :
Nombre de threads : 4
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle


Drapeaux d'ouverture de fichier supplémentaires : (aucun)
128 fichiers, 8MiB chacun
1GiB taille totale des fichiers
Taille de bloc 4KiB
Nombre de requêtes IO : 0
Ratio Lecture/Écriture pour le test IO aléatoire combiné : 1.50
FSYNC périodique activé, appelant fsync() toutes les 100 requêtes.
Appel de fsync() à la fin du test, activé.
Utilisation du mode I/O synchrone
Réalisant un test r/w aléatoire
Initialisation des threads de travail...

Threads démarrés !


Opérations sur les fichiers :
    lectures/s :                      4587.95
    écritures/s :                     3058.66
    fsyncs/s :                     9795.73

Débit :
    lecture, MiB/s :                  17.92
    écrit, MiB/s :               11.95

Statistiques générales :
    temps total :                          60.0241s
    nombre total d'événements :              1046492

Latence (ms) :
         min :                                    0.00
         avg :                                    0.23
         max :                                   14.45
         95e centile :                        0.94
         somme :                               238629.34

Équité des threads :
    événements (moy./écart-type) :           261623.0000/1849.14
    temps d'exécution (moy./écart-type) :   59.6573/0.00

Disque sur le serveur de stockage de sauvegardes

sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio run
sysbench 1.0.17 (utilisant LuaJIT 2.0.4 du système)

Exécution du test avec les options suivantes :
Nombre de threads : 4
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle


Drapeaux d'ouverture de fichier supplémentaires : (aucun)
128 fichiers, 8MiB chacun
1GiB taille totale des fichiers
Taille de bloc 4KiB
Nombre de requêtes IO : 0
Ratio Lecture/Écriture pour le test IO aléatoire combiné : 1.50
FSYNC périodique activé, appelant fsync() toutes les 100 requêtes.
Appel de fsync() à la fin du test, activé.
Utilisation du mode I/O synchrone
Réalisant un test r/w aléatoire
Initialisation des threads de travail...

Threads démarrés !


Opérations sur les fichiers :
    lectures/s :                      11.37
    écritures/s :                     7.58
    fsyncs/s :                     29.99

Débit :
    lecture, MiB/s :                  0.04
    écrit, MiB/s :               0.03

Statistiques générales :
    temps total :                          73.8868s
    nombre total d'événements :              3104

Latence (ms) :
         min :                                    0.00
         avg :                                   78.57
         max :                                 3840.90
         95e centile :                      297.92
         somme :                               243886.02

Équité des threads :
    événements (moy./écart-type) :           776.0000/133.26
    temps d'exécution (moy./écart-type) :   60.9715/1.59

Vitesse du réseau entre les serveurs

iperf3 -c backup
Connexion au serveur backup, port 5201
[  4] adresse locale x.x.x.x port 59402 connectée à y.y.y.y port 5201
[ ID] Intervalle           Transfert     Bande passante       Retr  Cwnd
[  4]   0.00-1.00   sec   419 MBytes  3.52 Gbits/sec  810    182 KBytes
[  4]   1.00-2.00   sec   393 MBytes  3.30 Gbits/sec  810    228 KBytes
[  4]   2.00-3.00   sec   378 MBytes  3.17 Gbits/sec  810    197 KBytes
[  4]   3.00-4.00   sec   380 MBytes  3.19 Gbits/sec  855    198 KBytes
[  4]   4.00-5.00   sec   375 MBytes  3.15 Gbits/sec  810    182 KBytes
[  4]   5.00-6.00   sec   379 MBytes  3.17 Gbits/sec  765    228 KBytes
[  4]   6.00-7.00   sec   376 MBytes  3.15 Gbits/sec  810    180 KBytes
[  4]   7.00-8.00   sec   379 MBytes  3.18 Gbits/sec  765    253 KBytes
[  4]   8.00-9.00   sec   380 MBytes  3.19 Gbits/sec  810    239 KBytes
[  4]   9.00-10.00  sec   411 MBytes  3.44 Gbits/sec  855    184 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Intervalle           Transfert     Bande passante       Retr
[  4]   0.00-10.00  sec  3.78 GBytes  3.25 Gbits/sec  8100             expéditeur
[  4]   0.00-10.00  sec  3.78 GBytes  3.25 Gbits/sec                  récepteur

Méthodologie de test

  1. Le système de fichiers est en cours de préparation sur le serveur de test avec le premier ensemble de tests, et le dépôt est initialisé sur le serveur de sauvegarde si nécessaire.
    Le processus de sauvegarde est lancé et son temps est mesuré.
  2. Les fichiers sont migrés sur le serveur de test vers le deuxième ensemble de tests. Le processus de sauvegarde est lancé et son temps est mesuré.
  3. Les fichiers sont migrés sur le serveur de test vers le troisième ensemble de tests. Le processus de sauvegarde est lancé et son temps est mesuré.
  4. Le troisième ensemble de tests obtenu est pris comme le nouveau premier ; les étapes 1-3 sont répétées deux fois supplémentaires.
  5. Les données sont saisies dans un tableau récapitulatif, des graphiques avec netdata sont ajoutés.
  6. Un rapport est rédigé sur la méthode de sauvegarde distincte.

Résultats attendus

Étant donné que les 3 candidats sont basés sur la même technologie (rsync), il est prévu que les résultats soient proches de ceux de rsync classique, y compris tous ses avantages, à savoir :

  1. Les fichiers dans le dépôt seront conservés « tels quels ».
  2. La taille du dépôt n'augmentera que d'une partie des différences entre les sauvegardes.
  3. Il y aura une charge relativement importante sur le réseau lors de la transmission des données, ainsi qu'une petite charge sur le processeur.

Un essai du rsync classique sera utilisé comme référence, ses résultats

sont les suivantsSauvegarde, partie 2 : Revue et test des outils de sauvegarde basés sur rsync

Le goulet d'étranglement se trouvait sur le serveur de stockage de sauvegardes sous la forme d'un disque basé sur HDD, ce qui est clairement visible sur les graphiques en forme de scie.

Les données ont été copiées en 4 minutes et 15 secondes.

Test de rdiff-backup

Le premier candidat est rdiff-backup, un script Python qui effectue la sauvegarde d'un répertoire vers un autre. La sauvegarde actuelle est conservée « telle quelle », tandis que les sauvegardes précédentes sont stockées dans un sous-répertoire spécial de manière incrémentale, économisant ainsi de l'espace.

Nous allons vérifier le mode de fonctionnement typique, c'est-à-dire que le client initie lui-même le processus de sauvegarde, et un processus est lancé côté serveur pour réaliser la sauvegarde en acceptant les données.

Voyons de quoi il est capable dans nos conditions.

Sauvegarde, partie 2 : Revue et test des outils de sauvegarde basés sur rsync

Temps d'exécution de chaque lancement de test :

Premier lancement
Deuxième lancement
Troisième lancement

Premier ensemble
16m32s
16m26s
16m19s

Deuxième ensemble
2h5m
2h10m
2h8m

Troisième ensemble
2h9m
2h10m
2h10m

Rdiff-backup réagit très mal à tout gros changement de données, et n'exploite pas complètement le réseau.

Test de rsnapshot

Le deuxième candidat est rsnapshot, qui est un script Perl, dont la principale exigence pour un fonctionnement efficace est la prise en charge des liens durs. Cela permet d'économiser de l'espace disque. Les fichiers qui n'ont pas changé depuis la dernière sauvegarde feront référence au fichier original à l'aide de liens durs.

De plus, la logique du processus de sauvegarde est inversée : le serveur va activement chercher ses clients et récupérer les données.

Résultats des tests

nous avons obtenu les suivantsSauvegarde, partie 2 : Revue et test des outils de sauvegarde basés sur rsync

Premier lancement
Deuxième lancement
Troisième lancement

Premier ensemble
4m22s
4m19s
4m16s

Deuxième ensemble
2m6s
2m10s
2m6s

Troisième ensemble
1m18s
Il a fonctionné très, très rapidement, beaucoup plus vite que rdiff-backup et très près de rsync pur.
Il a fonctionné très, très rapidement, beaucoup plus vite que rdiff-backup et très près de rsync pur.

Test de burp

Une autre option est l'implémentation en C utilisant librsync - burp, qui a une architecture client-serveur comprenant l'authentification des clients, ainsi qu'une interface web (non incluse dans la livraison de base). Une autre caractéristique intéressante est la possibilité de sauvegarde sans droit de restauration pour les clients.

Voyons

11m21sla performance.

Sauvegarde, partie 2 : Revue et test des outils de sauvegarde basés sur rsync

Premier lancement
Deuxième lancement
Troisième lancement

Premier ensemble
11m10s
10m56s
5m37s

Deuxième ensemble
3m33s
5m40s
5m35s

Troisième ensemble
3m24s
3m40s
Il a été deux fois plus lent que rsnapshot, mais également assez rapide, et certainement plus rapide que rdiff-backup. Les graphiques sont légèrement dentelés - la performance dépend à nouveau du sous-système de disque du serveur de stockage des sauvegardes, même si cela n'est pas aussi prononcé que pour rsnapshot.

A fonctionné deux fois plus lentement que rsnapshot, mais reste assez rapide, et certainement plus rapide que rdiff-backup. Les graphiques présentent quelques irrégularités — la performance est de nouveau limitée par le système de stockage des sauvegardes, bien que cela ne soit pas aussi marqué qu'avec rsnapshot.

Résultats

La taille des dépôts de tous les candidats était à peu près similaire, c'est-à-dire une augmentation jusqu'à 10 Go, puis jusqu'à 15 Go, puis jusqu'à 18 Go, etc., ce qui est lié aux caractéristiques du fonctionnement de rsync. Il convient également de noter que tous les candidats fonctionnaient en mode mono-thread (charge sur le processeur d'environ 50 % sur une machine à deux cœurs). Tous les 3 candidats offraient la possibilité de restaurer la dernière sauvegarde "telle quelle", c'est-à-dire qu'il était possible de restaurer des fichiers sans utiliser de programmes tiers, y compris ceux utilisés pour créer les dépôts. C'est également un "héritage" de rsync.

Conclusions

Plus un système de sauvegarde est complexe et plus il a de fonctionnalités différentes, plus il fonctionnera lentement, mais pour des projets peu exigeants, n'importe lequel d'entre eux conviendra, sauf peut-être rdiff-backup.

Annonce

Cet article poursuit le cycle sur la sauvegarde.

Sauvegarde, partie 1 : Pourquoi faire des sauvegardes, aperçu des méthodes et technologies
Sauvegarde, partie 2 : Revue et test des outils de sauvegarde basés sur rsync
Sauvegarde, partie 3 : Aperçu et test de duplicity, duplicaty, deja dup
Sauvegarde, partie 4 : Aperçu et test de zbackup, restic, borgbackup
Sauvegarde, partie 5 : Test de bacula et veeam backup for linux
Sauvegarde, partie 6 : Comparaison des outils de sauvegarde
Sauvegarde, partie 7 : Conclusions

Auteur de la publication: Pavel Demkovitch

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster