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:
# /etc/cron.d/zfs-auto-snapshot
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
*/5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 //
00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 //
59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 //
59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 //
00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 //
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 :
#!/bin/bash
/usr/local/bin/syncoid root@server1:vol1/data vol2/data
exit $?
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)
check program storagesync with path /usr/local/bin/run_storagesync.sh
every 1 cycles
if status != 0 then alert
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
Program 'storagesync'
status Status ok
monitoring status Monitored
last started Wed, 05 Apr 2017 05:37:59
last exit value 0
data collected Wed, 05 Apr 2017 05:37:59
.
.
.
Program 'storagesync'
status Status ok
monitoring status Monitored
last started Wed, 05 Apr 2017 05:38:59
last exit value 0
data collected Wed, 05 Apr 2017 05:38:59