Sauvegarde, partie 1: objectif, vue d'ensemble des techniques et technologies

Sauvegarde? Je n'ai pas besoin de sauvegarde !!

Pourquoi avez-vous besoin de faire des sauvegardes? Après tout, l'équipement est très, très fiable, en plus, il y a des «clouds» meilleurs que les serveurs physiques en termes de fiabilité: s'il est correctement configuré, le serveur «cloud» survivra facilement à la panne du serveur physique de l'infrastructure, et du point de vue des utilisateurs du service, il y aura un petit saut dans le temps à peine perceptible service. De plus, la duplication d'informations nécessite souvent le paiement du temps processeur "supplémentaire", de la charge du disque et du trafic réseau.

Un programme idéal s'exécute rapidement, ne passe pas par la RAM, n'a pas de trous et n'existe pas.

—Inconnu
Étant donné que les programmes sont toujours écrits par des développeurs de protéines et que le processus de test est souvent absent, de plus, la livraison de programmes est extrêmement rare avec l'utilisation de "meilleures pratiques" (qui sont également des programmes en eux-mêmes et donc imparfaits), les administrateurs système doivent souvent résoudre des problèmes qui sonnent brièvement mais succinctement: "revenir tel quel", "ramener la base à un fonctionnement normal", "ça marche lentement - on recule", et aussi mon préféré "je ne sais pas quoi, mais le réparer".

En plus des erreurs logiques résultant d'un travail négligent des développeurs ou d'une combinaison de circonstances, ainsi que d'une connaissance incomplète ou d'une mauvaise compréhension des petites fonctionnalités des programmes de construction - y compris les classeurs et ceux du système, y compris les systèmes d'exploitation, les pilotes et le micrologiciel - il existe également d'autres erreurs. Par exemple, la plupart des développeurs s'appuient sur le runtime, oubliant complètement les lois physiques qui sont toujours impossibles à contourner à l'aide de programmes. Cela inclut la fiabilité infinie du sous-système de disque et de tout sous-système de stockage de données en général (y compris la RAM et le cache du processeur!), Et le temps de traitement nul sur le processeur, et l'absence d'erreurs lors de la transmission sur le réseau et pendant le traitement sur le processeur, et la latence du réseau, qui sont 0. Ne négligez pas le délai notoire, car si vous n’avez pas le temps, il y aura des problèmes plus propres que les nuances du réseau et du disque.

Chef, tout est parti! basé sur k \ f Diamond hand

Mais qu'en est-il des problèmes qui surviennent en pleine croissance et qui pèsent sur des données précieuses? Il n'y a rien pour remplacer les développeurs en direct, et pas le fait que ce sera possible dans un avenir proche. D'autre part, pour prouver pleinement que le programme fonctionnera comme prévu, jusqu'à présent, seuls quelques projets ont réussi, et il n'est pas du tout possible de prendre et d'appliquer les preuves à d'autres projets similaires. De plus, de telles preuves prennent beaucoup de temps et nécessitent des compétences et des connaissances particulières, ce qui minimise pratiquement la possibilité de leur application en tenant compte des délais. De plus, nous ne savons toujours pas comment utiliser une technologie ultrarapide, bon marché et infiniment fiable pour stocker, traiter et transmettre des informations. De telles technologies, si elles existent, se présentent alors sous forme de concepts, ou - le plus souvent - uniquement dans les livres et films de science-fiction.
Les bons artistes copient, les grands artistes volent.

—Pablo Picasso.
Les solutions les plus réussies et les choses étonnamment simples se produisent généralement là où il y a absolument incompatibles, à première vue, les concepts, les technologies, les connaissances, les domaines scientifiques.

Par exemple, les oiseaux et les avions ont des ailes, mais malgré la similitude fonctionnelle - le principe de fonctionnement dans certains modes est le même, et les problèmes techniques sont résolus de la même manière: os creux, utilisation de matériaux solides et légers, etc. - les résultats sont complètement différents, bien que très similaire. Les meilleurs échantillons que nous observons dans notre technologie sont également principalement empruntés à la nature: compartiments étanches à l'air dans les navires et les sous-marins - une analogie directe avec les annélides; construction de tableaux de raid et vérification de l'intégrité des données - duplication de la chaîne d'ADN; ainsi que les organes appariés, l'indépendance du travail de divers organes par rapport au système nerveux central (fonction cardiaque automatique) et les réflexes sont des systèmes autonomes sur Internet. Bien sûr, prendre et appliquer des solutions toutes faites «de front» est semé d'embûches, mais qui sait, il n'y a peut-être pas d'autres solutions.
Si je savais où tu tomberais, je mettrais des pailles!

—Proverbe biélorusse
Les sauvegardes sont donc vitales pour ceux qui veulent:

  • Pour pouvoir restaurer le fonctionnement de leurs systèmes avec un minimum de temps d'arrêt, ou même sans eux
  • N'hésitez pas à agir, car en cas d'erreur il y a toujours la possibilité d'un rollback
  • Minimisez les effets de la corruption intentionnelle des données

Voici un peu de théorie
Toute classification est arbitraire. La nature ne classe pas. Nous classons, car c'est plus pratique pour nous. Et nous classons selon les données, que nous prenons également arbitrairement.

—Jan Bruler
Quelle que soit la méthode de stockage physique, le stockage logique des données peut être divisé en 2 façons d'accéder à ces données: bloc et fichier. Cette division a récemment été très floue, car les stockages logiques purement blocs, comme purement les fichiers, n'existent pas. Cependant, pour simplifier, nous supposons qu'ils le sont.

Le stockage en bloc des données implique qu'il existe un périphérique physique où les données sont enregistrées dans certaines parties fixes, des blocs. L'accès aux blocs va à une certaine adresse, chaque bloc a sa propre adresse dans l'appareil.

Une sauvegarde se fait généralement en copiant des blocs de données. Pour garantir l'intégrité des données au moment de la copie, l'enregistrement des nouveaux blocs, ainsi que la modification des blocs existants, est suspendu. Si nous prenons une analogie avec le monde ordinaire, le placard le plus proche est avec les mêmes cellules numérotées.

Bloquer le stockage des données

Le stockage de fichiers de données par le principe d'un périphérique logique est proche du stockage en bloc et est souvent organisé en haut. Les différences importantes sont l'existence d'une hiérarchie de stockage et de noms lisibles par l'homme. L'abstraction est mise en évidence sous la forme d'un fichier - une zone de données nommée, ainsi que d'un répertoire - un fichier spécial dans lequel les descriptions et les accès à d'autres fichiers sont stockés. Les fichiers peuvent être fournis avec des métadonnées supplémentaires: heure de création, drapeaux d'accès, etc. Ils sauvegardent généralement de cette façon: ils recherchent les fichiers modifiés, puis les copient vers un autre stockage de fichiers avec la même structure. L'intégrité des données est généralement mise en œuvre par l'absence des fichiers sur lesquels l'écriture est effectuée. Les métadonnées des fichiers sont sauvegardées de la même manière. L'analogie la plus proche est la bibliothèque, qui a des sections avec différents livres, ainsi qu'un catalogue avec des noms de livres lisibles par l'homme.

Stockage de données de fichiers

Récemment, une autre option est parfois décrite, avec laquelle, en principe, le stockage de fichiers de données a commencé, et qui a les mêmes caractéristiques archaïques: le stockage de données d'objets.

Il diffère du stockage de fichiers en ce qu'il ne comporte pas plus d'une imbrication (disposition plate), et les noms de fichiers, bien que lisibles par l'homme, sont néanmoins plus adaptés au traitement par des machines. Lors de la sauvegarde, les magasins d'objets sont le plus souvent traités comme des stockages de fichiers, mais il existe parfois d'autres options.
- Il existe deux types d'administrateurs système, ceux qui ne font pas de sauvegardes et ceux qui le font déjà.
- En fait, il existe trois types: il y a aussi ceux qui vérifient que les sauvegardes peuvent être restaurées.

—Inconnu
Il est également utile de comprendre que le processus de sauvegarde des données est effectué par des programmes, il présente donc les mêmes inconvénients qu'un autre programme. Pour supprimer (pas exclure!) La dépendance à l'égard du facteur humain, ainsi que des caractéristiques - qui individuellement n'influencent pas fortement, mais peuvent ensemble donner un effet tangible - appliquent ce que l'on appelle règle 3-2-1. Il existe de nombreuses options pour le décrypter, mais je préfère l'interprétation suivante: vous devez stocker 3 ensembles des mêmes données, 2 ensembles doivent être stockés dans des formats différents et 1 ensemble doit être stocké dans un stockage géographiquement distant.

Le format de stockage doit être compris comme suit:

  • S'il existe une dépendance à la méthode de stockage physique, nous changeons la méthode physique.
  • S'il existe une dépendance à la méthode de stockage logique, nous changeons la méthode logique.

Pour obtenir l'effet maximal de la règle 3-2-1, il est recommandé de modifier le format de stockage dans les deux sens.

Du point de vue de la préparation de la sauvegarde à sa destination - restauration de l'opérabilité, il existe des sauvegardes «à chaud» et «à froid». Le chaud du froid ne diffère que par une chose: ils sont immédiatement prêts pour le travail, tandis que le froid pour la récupération nécessite des actions supplémentaires: déchiffrement, extraction de l'archive, etc.

Ne confondez pas les copies chaudes et froides avec les copies en ligne et hors ligne, ce qui implique l'isolement physique des données, et en fait, sont un autre signe de la classification des méthodes de sauvegarde. Ainsi, une copie hors ligne - non connectée directement au système où elle doit être restaurée - peut être à chaud ou à froid (en termes de préparation à la récupération). Une copie en ligne peut être disponible directement là où elle doit être restaurée, et le plus souvent elle est chaude, mais il y en a aussi des froides.

En outre, n'oubliez pas que le processus de création de sauvegardes ne se termine généralement pas par la création d'une seule sauvegarde et qu'il peut y avoir beaucoup de copies. Par conséquent, il est nécessaire de distinguer les sauvegardes complètes, c'est-à-dire celles qui sont récupérables indépendamment des autres sauvegardes, ainsi que les copies différentielles (incrémentielles, différentielles, décrémentielles, etc.) - celles qui ne peuvent pas être restaurées seules et nécessitent la restauration préalable d'une ou plusieurs autres sauvegardes.

Sauvegardes incrémentielles différentielles - une tentative d'économiser l'espace pour le stockage des sauvegardes. Ainsi, seules les données modifiées de la sauvegarde précédente sont écrites dans la sauvegarde.

Les décrémentiels de différence sont créés dans le même but, mais d'une manière légèrement différente: une sauvegarde complète est effectuée, mais seule la différence entre la nouvelle copie et la précédente est réellement stockée.

Séparément, il convient de considérer le processus de sauvegarde au-dessus du stockage, qui prend en charge l'absence de stockage en double. Ainsi, si vous écrivez des sauvegardes complètes par-dessus, en réalité, seule la différence entre les sauvegardes sera enregistrée, cependant, le processus de restauration des sauvegardes sera similaire à la restauration à partir d'une copie complète et complètement transparente.

Quis custodiet ipsos custodes?

(Qui gardera les gardiens eux-mêmes? - lat.)


C'est très désagréable quand il n'y a pas de sauvegarde, mais c'est bien pire si la sauvegarde semble être faite, mais pendant la restauration il s'avère qu'elle ne peut pas être restaurée, car:

  • L'intégrité des données source a été violée.
  • Le stockage de sauvegarde est corrompu.
  • La récupération fonctionne très lentement, vous ne pouvez pas utiliser de données partiellement restaurées.


Un processus de sauvegarde correctement construit doit prendre en compte ces commentaires, en particulier les deux premiers.

L'intégrité des données source peut être garantie de plusieurs manières. Les plus couramment utilisés sont: a) la création d'instantanés du système de fichiers au niveau du bloc, b) le gel de l'état du système de fichiers, c) un périphérique de bloc spécial avec stockage de version, d) l'enregistrement séquentiel des fichiers ou des blocs. Les sommes de contrôle sont également utilisées pour assurer la vérification des données pendant la récupération.

Les dommages au stockage peuvent également être détectés à l'aide de sommes de contrôle. Une autre méthode consiste à utiliser des appareils ou des systèmes de fichiers spécialisés dans lesquels il est impossible de modifier des données déjà enregistrées, mais vous pouvez en ajouter de nouvelles.

Pour accélérer la récupération, la récupération de données est utilisée avec plusieurs processus de récupération - à condition qu'il n'y ait pas de «goulot d'étranglement» sous la forme d'un réseau lent ou d'un système de disque lent. Afin de contourner la situation avec des données partiellement restaurées, il est possible de diviser le processus de sauvegarde en sous-tâches relativement petites, chacune étant exécutée séparément. Ainsi, il devient possible de restaurer systématiquement les performances avec une prédiction du temps de récupération. Ce problème se situe le plus souvent dans le plan organisationnel (SLA), nous ne nous attarderons donc pas là-dessus en détail.

En sait beaucoup sur les épices non pas celui qui les ajoute à chaque plat, mais celui qui n'y ajoute jamais rien de superflu.

—B. Sinyavsky


La pratique concernant les logiciels utilisés par les administrateurs système peut varier, mais les principes généraux sont toujours les mêmes, d'une manière ou d'une autre, en particulier:

  • Des solutions toutes faites sont fortement recommandées.
  • Les programmes devraient fonctionner de manière prévisible, c'est-à-dire Il ne devrait pas y avoir de fonctionnalités ou de goulots d'étranglement non documentés.
  • La configuration de chaque programme doit être suffisamment simple pour que vous n'ayez pas à lire le manuel ou le cheat sheet à chaque fois.
  • La solution devrait être universelle, si possible. les serveurs dans leurs spécifications matérielles peuvent varier très, très.


Les programmes courants suivants sont disponibles pour supprimer les sauvegardes des périphériques de bloc:

  • dd, familier aux vétérans de l'administration système, des programmes similaires s'appliquent également ici (le même dd_rescue, par exemple).
  • Utilitaires (utilitaires) intégrés à certains systèmes de fichiers qui créent un vidage du système de fichiers.
  • Utilitaires omnivores; par exemple, clone partiel.
  • Décisions propres, souvent exclusives; par exemple NortonGhost et versions ultérieures.


Pour les systèmes de fichiers, la tâche de sauvegarde est partiellement résolue en utilisant des méthodes applicables aux périphériques de bloc, cependant, le problème peut être résolu plus efficacement, en utilisant, par exemple:

  • Rsync, un programme et protocole universel pour synchroniser l'état des systèmes de fichiers.
  • Outils d'archivage intégrés (ZFS).
  • Outils d'archivage tiers; le représentant le plus populaire est le goudron. Il y en a d'autres, par exemple, le remplacement du goudron par un accent sur les systèmes modernes.

Séparément, il convient de mentionner le logiciel de cohérence des données lors de la création de sauvegardes. Les options les plus couramment utilisées sont:

  • Montage du système de fichiers en mode lecture seule (ReadOnly) ou gel du système de fichiers (gel) - la méthode est limitée.
  • Création d'instantanés de l'état d'un système de fichiers ou d'un périphérique de bloc (LVM, ZFS).
  • L'utilisation d'outils tiers pour organiser les conversions, même dans les cas où les paragraphes précédents ne peuvent pas être fournis pour une raison quelconque (des programmes tels que la copie à chaud).
  • La technique de copie sur modification (CopyOnWrite), cependant, elle est le plus souvent liée au FS utilisé (BTRFS, ZFS).


Ainsi, pour un petit serveur, vous devez fournir un schéma de sauvegarde qui répond aux exigences suivantes:

  • Facile à utiliser - aucune étape supplémentaire spéciale n'est requise lors du travail, étapes minimales pour créer et restaurer des copies.
  • Universel - fonctionne sur des serveurs petits et grands; ceci est important lors de l'augmentation du nombre de serveurs ou de la mise à l'échelle.
  • Il est installé par le gestionnaire de paquets, ou en une ou deux commandes de type "download and unzip".
  • Stable - utilise un format de stockage standard ou établi de longue date.
  • Rapide au travail.

Candidats de ceux qui répondent plus ou moins aux exigences:

  • rdiff-backup
  • rsnapshot
  • rots
  • duplicati
  • duplicité
  • deja dup
  • Dar
  • zbackup
  • restic
  • borgbackup

Lit procrustien

Une machine virtuelle (basée sur XenServer) avec les caractéristiques suivantes sera utilisée comme banc de test:

  • 4 cœurs 2,5 GHz,
  • 16 Go de RAM
  • 50 Go de stockage hybride (stockage avec mise en cache sur SSD à 20% de la taille du disque virtuel) en tant que disque virtuel séparé sans partitionnement,
  • Canal Internet 200 Mbps.

Presque la même machine sera utilisée comme serveur de destination de sauvegarde, uniquement avec un disque dur de 500 Go.

Système d'exploitation - Centos 7 x64: la panne est standard, une partition supplémentaire sera utilisée comme source de données.

Prenons un site wordpress comme données source, avec des fichiers multimédias de 40 Go, une base de données mysql. Étant donné que les serveurs virtuels varient considérablement en termes de caractéristiques, ainsi que pour une meilleure reproductibilité, il existe

résultats des tests du serveur à l'aide de sysbench.
sysbench --threads = 4 --time = 30 --cpu-max-prime = 20,000 cpu run
sysbench 1.1.0-18a9f86 (en utilisant LuaJIT 2.1.0-beta3 fourni)
Exécution du test avec les options suivantes:
Nombre de fils: 4
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle

Limite du nombre premier: 20 000

Initialisation des threads de travail ...

Les discussions ont commencé!

Vitesse CPU:
événements par seconde: 836,69

Débit:
événements / s (eps): 836.6908
temps écoulé: 30.0039s
nombre total d'événements: 25104

Latence (ms):
min: 2,38
moyenne: 4.78
max: 22.39
95e centile: 10,46
somme: 119923.64

Équité des fils:
événements (avg / stddev): 6276.0000 / 13.91
temps d'exécution (avg / stddev): 29.9809 / 0.01

sysbench --threads = 4 --time = 30 --memory-block-size = 1K --memory-scope = global --memory-total-size = 100G --memory-oper = read memory run
sysbench 1.1.0-18a9f86 (en utilisant LuaJIT 2.1.0-beta3 fourni)
Exécution du test avec les options suivantes:
Nombre de fils: 4
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle

Exécution du test de vitesse de mémoire avec les options suivantes:
taille du bloc: 1 Ko
taille totale: 102400MiB
opération: lire
portée: globale

Initialisation des threads de travail ...

Les discussions ont commencé!

Total opérations: 50900446 (1696677,10 par seconde)

49707,47 Mio transférés (1656,91 Mio / s)

Débit:
événements / s (eps): 1696677.1017
temps écoulé: 30.0001s
nombre total d'événements: 50900446

Latence (ms):
min: 0,00
moyenne: 0.00
max: 24.01
95e centile: 0,00
somme: 39106.74

Équité des fils:
événements (avg / stddev): 12725111.5000 / 137775.15
temps d'exécution (avg / stddev): 9.7767 / 0.10

sysbench --threads = 4 --time = 30 --memory-block-size = 1K --memory-scope = global --memory-total-size = 100G --memory-oper = écriture mémoire exécutée
sysbench 1.1.0-18a9f86 (en utilisant LuaJIT 2.1.0-beta3 fourni)
Exécution du test avec les options suivantes:
Nombre de fils: 4
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle

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

Initialisation des threads de travail ...

Les discussions ont commencé!

Total des opérations: 35910413 (1197008,62 par seconde)

35068,76 Mio transférés (1168,95 Mio / s)

Débit:
événements / s (eps): 1197008.6179
temps écoulé: 30.0001s
nombre total d'événements: 35910413

Latence (ms):
min: 0,00
moyenne: 0.00
max: 16.90
95e centile: 0,00
somme: 43604.83

Équité des fils:
événements (avg / stddev): 8977603.2500 / 233905.84
temps d'exécution (avg / stddev): 10.9012 / 0.41

sysbench --threads = 4 --file-test-mode = rndrw --time = 60 --file-block-size = 4K --file-total-size = 1G fileio run
sysbench 1.1.0-18a9f86 (en utilisant LuaJIT 2.1.0-beta3 fourni)
Exécution du test avec les options suivantes:
Nombre de fils: 4
Initialisation du générateur de nombres aléatoires à partir de l'heure actuelle

Indicateurs d'ouverture de fichier supplémentaire: (aucun)
128 fichiers, 8 Mo chacun
Taille totale du fichier 1GiB
Taille de bloc 4KiB
Nombre de demandes d'E / S: 0
Rapport lecture / écriture pour le test IO aléatoire combiné: 1,50
FSYNC périodique activé, appelant fsync () toutes les 100 demandes.
Appel de fsync () à la fin du test, activé.
Utilisation du mode d'E / S synchrone
Faire un test R / W aléatoire
Initialisation des threads de travail ...

Les discussions ont commencé!

Débit:
lire: IOPS = 3868,21 15,11 MiB / s (15,84 Mo / s)
écriture: IOPS = 2578,83 10,07 Mio / s (10,56 Mo / s)
fsync: IOPS = 8226,98

Latence (ms):
min: 0,00
moyenne: 0,27
max: 18.01
95e centile: 1,08
somme: 238469.45

Cette note commence grand



: Finnix

Source: https://habr.com/ru/post/fr449282/


All Articles