Comment les pools zfs peuvent-ils être sauvegardés de manière continue / incrémentielle hors site?
Je reconnais que send/receive
over ssh est une méthode qui implique cependant de devoir gérer les instantanés manuellement.
Il y a certains outils que j'ai trouvés, mais la plupart ne sont plus pris en charge.
Le seul outil qui semble prometteur est https://github.com/jimsalterjrs/sanoid mais je crains qu'un outil peu connu puisse faire plus de mal que de bien car il peut corrompre / supprimer des données.
Comment les sauvegardes zfs continues / incrémentielles sont-elles effectuées?
Réponses:
ZFS est un système de fichiers incroyable et résout bon nombre de mes besoins de stockage de données locaux et partagés.
Bien que j'aime l'idée de ZFS en cluster dans la mesure du possible, parfois ce n'est pas pratique, ou j'ai besoin d'une séparation géographique des nœuds de stockage.
L'un des cas d'utilisation que j'ai concerne le stockage répliqué hautes performances sur les serveurs d'applications Linux. Par exemple, je prends en charge un produit logiciel hérité qui bénéficie de disques SSD NVMe à faible latence pour ses données. L'application a une option de mise en miroir au niveau de l'application qui peut être répliquée sur un serveur secondaire, mais elle est souvent inexacte et est un RPO de 10 minutes .
J'ai résolu ce problème en ayant un serveur secondaire (exécutant également ZFS sur un matériel similaire ou différent) qui peut être local, distant ou les deux. En combinant les trois utilitaires détaillés ci-dessous, j'ai conçu une solution de réplication qui me donne une réplication continue, une rétention d'instantanés approfondie et des options de basculement flexibles.
zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot
Juste un outil pratique pour activer des instantanés périodiques au niveau du système de fichiers ZFS. Je cours généralement avec le calendrier suivant sur les volumes de production:
Syncoid (Sanoid) - https://github.com/jimsalterjrs/sanoid
Ce programme peut exécuter un snap / réplication ad hoc d'un système de fichiers ZFS sur une cible secondaire. J'utilise uniquement la partie syncoid du produit.
En supposant que server1 et server2 , une commande simple exécutée à partir de server2 pour extraire les données de server1 :
Monit - https://mmonit.com/monit/
Monit est un planificateur de tâches et un gestionnaire d'exécution extrêmement flexibles. Par défaut, cela fonctionne sur un intervalle de 30 secondes, mais je modifie la configuration pour utiliser un cycle de base de 15 secondes.
Un exemple de configuration qui exécute le script de réplication ci-dessus toutes les 15 secondes (1 cycle)
C'est simple à automatiser et à ajouter via la gestion de la configuration. En encapsulant l'exécution de l'instantané / réplication dans Monit, vous obtenez un état centralisé, un contrôle des tâches et des alertes (e-mail, SNMP, script personnalisé).
Le résultat est que j'ai des serveurs qui ont plusieurs mois d'instantanés mensuels et de nombreux points de restauration et de rétention dans: https://pastebin.com/zuNzgi0G - Plus, une réplique atomique continue de 15 secondes:
# monit status
la source
Vous pouvez procéder de deux manières différentes:
rsync
ouBacula
. Là, vous avez testé et (espérons-le) un gros logiciel stable qui peut être personnalisé pour des déploiements massifs et peut être utilisé même si vous quittez ZFSsend/recv
. Il peut s'agir de votre propre solution, d'un script ou d'un script étendu parmi les différents de Github et al., Ou d'outils plus riches en fonctionnalités comme Sanoid ou ZnapZend (envoi / recv avec prise en charge de mbuffer et plans de rétention). Dans ce cas, vous ne trouverez probablement pas de grandes solutions "d'entreprise" (au sens négatif), mais des outils qui ne font que la tâche unique et peuvent être combinés avec d'autres outils pour répondre à votre configuration spécifique.En général, je ne ferais confiance qu'à un outil dont le code source est disponible, et je le garderais aussi simple que possible. Si vous utilisez
send/recv
, vous n'avez pas besoin de gérer beaucoup, il vous suffit de supprimer l'instantané n-1 du côté local lorsque la transmission et l'établissement de l'instantané n du côté distant ont réussi.Vous pouvez diviser votre transport comme vous le souhaitez, il peut même être asynchrone (les instantanés ne doivent pas être reçus immédiatement), si vous conservez la règle de fer selon laquelle vous ne pouvez envoyer qu'un diff entre l'instantané local actuel / nouveau et l'instantané local précédent et que l'instantané local précédent est le plus récent du côté distant (jusqu'à ce que la sauvegarde se termine et que tout soit réinitialisé).
Maintenant que j'y pense, vous pourriez probablement encoder cela dans une machine d'état et être sûr qu'aucun cas imprévu ne peut passer.
la source
rsync
solution basée sur le système évoluerait pour répliquer en continu un système de fichiers à grande échelle. Les changements pourraient se produire plus rapidement que lesrsync
découvrir.