Comment sauvegarder un serveur Linode en cours d'exécution?


21

Nous voulons prendre une sauvegarde de tout sur notre serveur Debian, qui fonctionne à distance à l'autre bout du monde (hébergé par Linode), sans l'arrêter.

Ce système exécute shell, e-mail, XMPP / prosody et web, avec quelques configurations nginx simples.
Nous voulons sauvegarder des fichiers liés à ces choses juste pour être sûr. Par exemple, les fichiers que les utilisateurs ont stockés dans leurs répertoires personnels.

Nous n'avons pas besoin de copier exactement la configuration existante dans chaque fichier / etc; au lieu de cela, la raison pour laquelle nous faisons même la sauvegarde en premier lieu est pour que nous puissions tout déplacer vers une nouvelle configuration (une version plus récente de Debian toujours sur Linode).

Je vois que Linode propose un service de sauvegarde. Mais à long terme, nous avons également besoin de nos propres sauvegardes, ici, au cas où elles tomberaient en panne ou si quelque chose d'autre se produisait.

La raison pour laquelle cette question existe est que lorsque j'ai essayé de faire des sauvegardes dans le passé, j'ai continué à faire l'une de ces deux erreurs:

  • Je suis allé "OK, je vais juste copier /et tout ce qui se trouve en dessous", puis je me suis retrouvé coincé dans une boucle infinie étrange à cause du lecteur sur lequel je copiais était monté sous / media / backup et il se copiait récursivement [obv ce problème spécifique ne s'applique pas ici puisque nous allons sauvegarder sur rsync ou similaire] ou il est coincé en essayant de copier des trucs "vivants" dans / proc ou / var ou autre, comme essayer de suivre les journaux en constante évolution, ou
  • Je suis allé "OK, je vais juste prendre le strict minimum de ce dont nous avons besoin ... hmm, les répertoires personnels de tout le monde et nos répertoires de serveur Web (tous ci-dessous /var) et accrochons une copie de /etcet tous les anciens mails sous / var / vmail "et puis j'ai invariablement foutu les autorisations de fichiers ou les horodatages (je vais m'assurer que je ne sauvegarde pas les fichiers unix sur un lecteur FAT cette fois) ou j'ai oublié quelque chose (" oh, shoot, j'avais des scripts personnalisés dans / usr / local / bin que je n'ai jamais stocké ailleurs, j'ai oublié de les obtenir, je suppose qu'ils sont partis maintenant ").

Donc, obv copier tout le lecteur directement a conduit à des pièges et la copie sélective de répertoires a conduit à des pièges. Je veux savoir comment le faire correctement.

La question de panne de serveur De quoi a-t-on besoin pour un système de sauvegarde complet? couvre la philosophie et les bonnes pratiques, mais je recherche ces détails plus spécifiques de:

  • Quels répertoires dois-je copier et lesquels dois-je exclure (étant donné que c'est un système qui fonctionne actuellement et qui sert un wiki, un chat XMPP, un courrier électronique - avec de nouveaux messages qui arrivent pendant que le travail de copie est en cours d'exécution)
  • Quels attributs de fichier tels que les horodatages et le propriétaire et le groupe dois-je présenter et comment dois-je procéder? ← Je pense que je peux répondre à cette moitié de la question moi - même avec quelque chose comme ... euh ... rsync -HXazje pense est une bonne option pour nous? L' -zobv n'est pas vraiment lié à la question qui est "qu'est-ce que je préserve"

Un grand nombre des conseils de sauvegarde que je vois, comme l'utilisation dd, semblent présupposer que le lecteur n'est pas monté et n'est pas utilisé. Mais suis - je pas censé exclure « vivant » comme des répertoires / proc et certains des sous - répertoires sous / var (cependant, certaines des choses sous / var Je sais que nous vraiment faire besoin de garder) et / montage? À quoi d'autre dois-je penser dans cette situation? Ensuite, je suppose que je peux simplement le snarf avec rsync et en utilisant un tas de --excludedrapeaux.

Ou existe-t-il de meilleures idées, en particulier celles qui conviennent aux logiciels libres?


Je comprends que cette question semble extrêmement basique, mais après avoir utilisé ce type de systèmes pendant si longtemps, j'ai gâché cela encore et encore et je n'ai jamais vraiment cherché à le faire correctement
Sandra


Pour ce qu'il vaut, cp -r -aconserve autant d'attributs de fichier que possible lors de la copie de fichiers (en fonction de ce que le système de fichiers cible prend en charge). Le -adrapeau demande cpde conserver les attributs. Pour copier sur un réseau ou via un système de fichiers qui ne prend pas en charge les attributs requis, cela tar -ca toujours fonctionné pour moi, bien que je pense qu'il existe certains cas marginaux qu'il ne couvre pas et, en particulier, je crois que, tarpar défaut, il dépend des noms d'utilisateur correspondant à les deux systèmes. Cela dit, j'ai copié un système Linux entier (non monté) en utilisant tarsans aucun problème apparent.
Micheal Johnson

Y a-t-il également une raison particulière pour laquelle il est nécessaire de copier le système en direct?
Micheal Johnson

Utilisez le service d'instantané de linode?
ivanivan

Réponses:


15

Donc, vous voulez sauvegarder tout votre lecteur sans toutes ces erreurs désagréables et filtrer également tous les / proc et autres dossiers temporaires?

Une option consiste à monter le dossier racine sur un autre dossier du système de fichiers, comme ceci:

$ cd /mnt
$ mkdir drive
$ mount --bind / drive

Cela vous donnera tous les fichiers présents sur votre disque qui ne sont pas considérés comme temporaires (comme les dossiers / proc ou / sys).

Maintenant que vous avez une vue claire de votre dossier racine, vous pouvez simplement le copier sur votre lecteur de sauvegarde en utilisant standard cpou rsync. Quelque chose dans le sens de:

cp -R /mnt/drive /mnt/backupdrive

Cela résout les deux problèmes mentionnés:

  • Vous n'entrez pas dans la récursivité, car le disque de sauvegarde n'est pas monté dans le lecteur (point de vue)
  • vous ne manquez aucun fichier important, car vous les prenez tous

Voir aussi: monture homme (8)


6
Attention, avec cette solution, vous pouvez copier des fichiers en cours d'écriture, tels que des bases de données. Je recommande d'exécuter un script pour vider la base de données dans un fichier séparé avant de copier les fichiers. Par exemple pour MySQL, vous pouvez utiliser mysqldump.
Marco Martinelli

10

Sous Linux, tout est un fichier. C'est possible via rsync, mais il y a des choses à savoir, qui sont (au mieux) difficiles à contourner.

Vous devez d'abord penser à la réplication, en particulier pour les bases de données. C'est également une bonne idée de configurer un proxy / équilibreur de charge devant votre serveur principal, afin que vous puissiez facilement basculer entre vos serveurs principal et miroir pendant la transition.

Au niveau matériel, la meilleure situation sera d'avoir un serveur de type miroir d'un autre côté, avec le même nombre de ports Ethernet, la même disposition de disque dur, etc. Tout ce qui diffère implique la nécessité de modifier la configuration du système.

c'est-à-dire que si vous avez deux ports eth, vous voulez vous assurer que la configuration réseau, le pare-feu et ainsi de suite correspondent au nom de l'interface sur les deux serveurs, et dans le cas où il diffère, vous devez soit changer la configuration après rsync, soit changer le nom du périphérique sur le second serveur (de destination).

Idem avec la disposition des partitions. Vous devez créer les mêmes partitions que sur votre serveur principal, mais si vous les créez à partir de zéro, vous vous retrouverez avec des UUID différents, vous devrez donc modifier fstab, grub, mdadm (si le soft-raid est impliqué), etc. .

Mais, il y a aussi beaucoup de choses qui peuvent mal tourner, comme les bases de données, qui peuvent être incohérentes si elles n'ont pas été précédemment arrêtées (avant de faire rsync).

La meilleure stratégie sera de préparer d'abord le matériel et le système de fichiers (partitions) - pour correspondre à la configuration du serveur principal. Montez ensuite les partitions vides via un système intermédiaire (comme un live CD avec ssh-server installé temporairement). Vous créez vide / proc, / dev, / sys puis rsync le reste, comme ceci:

rsync -avz -H --delete /etc /bin (...and so on) destserver:/mnt/yourrootfs/

Ensuite, vous devez installer grub sur l'appareil et travailler sur la configuration, pour le rendre amorçable, changer la configuration du réseau, fstab et d'autres choses mentionnées précédemment.

Vous pouvez également essayer d'installer un nouveau système (avec la même version que celle que vous utilisez sur votre serveur principal), puis l'éteindre, le monter via un autre système temporaire (comme un live cd), puis remplacer autre chose que / proc, / sys, / dev et / boot avec rsync.

Mais ce n'est qu'une idée générale. Les choses peuvent se compliquer en fonction de ce que vous avez réellement sur ce serveur, de votre configuration, de votre réseau et de votre configuration matérielle. Et à la fin de la journée, cela pourrait être vraiment difficile ou impossible de le faire sans temps d'arrêt notable.


Concernant les bases de données: si vous disposez des abstractions de système de fichiers appropriées (par exemple, un LVM), vous pourrez peut-être prendre un instantané cohérent du lecteur sans avoir recours à la réplication complète de la base de données. Cependant, cela nécessite que votre base de données soit kill -9sécurisée, sinon sa récupération pourrait échouer. Une bonne base de données devrait gérer cette situation, mais un nombre surprenant de produits ne le font pas (ou pire, ils récupèrent presque toujours, mais échouent une fois dans une lune bleue lorsque vous en avez vraiment besoin pour travailler). Dans la pratique, la réplication est donc probablement plus fiable de toute façon.
Kevin

5

Ce que vous voulez réellement, c'est des restaurations. Quoi que vous fassiez, vous devez le restaurer régulièrement.


Linode dispose d'un service de sauvegarde. Les instantanés peuvent être pris selon un calendrier prédéfini limité ou avec une API.

Un avantage des sauvegardes basées sur des instantanés est qu'elles offrent un moment précis, car les données ne changent pas pendant la copie. Les instantanés peuvent également être facilement restaurés sur un hôte différent, un nouveau Linode dans ce cas.


Je ne vois rien sur la garantie que ces sauvegardes fonctionnent toujours si, par exemple. Linode fait faillite.
Mark

J'ai découvert le service de sauvegarde de Linode en tapant l'une des modifications de ma question et j'en ai parlé avec mon collègue et nous y sommes allés. Cela a résolu notre crise immédiate, mais nous allons essayer de trouver un moyen de stocker les données dans nos propres maisons également. Donc, pour avoir fait savoir qu'ils ont ce service, je ne savais pas quand j'ai posté pour la première fois. Mais les restaurations ont le problème suivant: si notre serveur est mal configuré, une boule de chewing-gum et des crochets de fil, nous ne voulons pas nécessairement le restaurer exactement dans le même état mal configuré. Nous voulons cependant nos données préférées.
Sandra

J'avais écrit un peu plus sur l'exportation de cette sauvegarde vers un autre stockage si elle convenait à votre objectif de point de récupération et à vos domaines d'échec. Mais j'ai laissé cela de côté pour être bref. Un bon plan de continuité des activités, dont les sauvegardes ne sont qu'une partie, identifie et gère ces risques.
John Mahowald

1

J'utilise BackupPC pour mon petit serveur privé virtuel, cela fonctionne assez bien. BackupPC peut utiliser rsync sous le capot et prend en charge les sauvegardes complètes et incrémentielles. Jetez-y un œil et voyez si cela répondrait à vos besoins.


1

Exécutez votre système sur ZFS. Ensuite, vous pouvez prendre un instantané atomique instantané en utilisant quelque chose qui ressemble à:

# zfs snap -r tank@name-of-backup

tankest le nom de votre pool ZFS. Cet instantané est garanti comme un instantané instantané dans le temps du système de fichiers et de tous ses systèmes de fichiers enfants.

Une fois que vous avez créé l'instantané, vous pouvez le transférer vers un autre hôte à l'aide de zfs sendet ssh.


0

I mon avis Cela dépend de quoi et où vous exécutez le serveur avec la commande linux interne ce n'est pas possible, vous devez imiter / pipe des données complètes et des bibliothèques. Si vous exécutez sur vmware et bien configuré, il fournit une migration en direct. Sinon, vous devez utiliser des outils tiers. J'espère que ceci vous aidera. Quelques références supplémentaires Comment faire une sauvegarde d'un serveur en direct?

Rsync est une bonne commande pour synchroniser les données entre les serveurs.


0

Il existe 2 solutions disponibles, où vous n'avez plus besoin de compter sur les bits manquants ainsi que sur un élément de votre liste en raison d'une liste de contrôle incomplète ou peut-être simplement parce que quelque chose de chaud est négligé.

Premièrement, si vous déplacez cela sur une plate-forme avec un peu plus de contrôle sur la plate-forme matérielle sous-jacente, vous pouvez prendre des instantanés de disque de tous les fichiers pendant que le serveur est en cours d'exécution. Par exemple, sur AWS, vous pouvez créer un instantané d'un disque EBS et même ne payer que les différences lorsque vous effectuez un autre instantané plus tard.

Deuxièmement, je recommande de scripter la configuration de votre serveur complet avec un système de gestion de configuration, tel qu'Ansible. Cette volonté

  • documenter tout ce que vous avez configuré dans le contrôle de code source

  • vous permettre de tester recréer le serveur à partir de la sauvegarde ou du bare metal pour vous assurer que vos scripts sont à jour

  • vous permet de réexécuter le script sur un système d'exploitation plus récent, généralement avec des modifications assez mineures.


1
Il s'avère que vous pouvez également faire des instantanés sur Linode. Je vais vérifier Ansible! C'est une sorte de sujet parallèle à ce que je voulais savoir à l'origine, mais quelque chose comme ça - et je n'en avais jamais entendu parler [je veux dire, j'avais entendu parler du dispositif fictif des merveilleux livres de Hainish] - sonne merveilleusement!
Sandra
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.