¿Cómo realizar copias de seguridad incrementales / continuas de la agrupación zfs?

¿Cómo pueden las piscinas zfs estar continuamente / incrementalmente respaldadas fuera de sitio?

Reconozco que el send/receive sobre ssh es un método sin embargo que implica tener que manejar las instantáneas manualmente.

Hay algunas herramientas que he encontrado, pero la mayoría ya no son compatibles.

La única herramienta que parece prometedora es https://github.com/jimsalterjrs/sanoid sin embargo me preocupa que la herramienta no ampliamente conocida puede hacer más daño entonces bueno en que puede dañar / corrupción de datos.

¿Cómo se realizan las copias de seguridad zfs continuas o incrementales?

ZFS es un sistema de archivos increíble y resuelve muchas de mis necesidades de almacenamiento de datos locales y compartidas.

Mientras, me gusta la idea de ZFS agrupado siempre que sea posible, a veces no es práctico, o necesito una separación geográfica de los nodos de almacenamiento.

Uno de los casos de uso que tengo es para almacenamiento replicado de alto rendimiento en servidores de aplicaciones Linux. Por ejemplo, apoyo un producto de software que requiere unidades SSD NVMe de baja latencia para sus datos. La aplicación tiene una opción de duplicación de nivel de aplicación que puede replicarse en un servidor secundario, pero a menudo es inexacta y es un RPO de 10 minutos.

He resuelto este problema con un servidor secundario (también ejecutando ZFS en hardware similar o diferente) que puede ser local, remoto o ambos. Al combinar las tres utilidades que se detallan a continuación, he creado una solución de replicación que me proporciona una replicación continua, una retención profunda de instantáneas y opciones de conmutación por error flexibles.

Zfs-auto-snapshothttps://github.com/zfsonlinux/zfs-auto-snapshot

Sólo una herramienta útil para habilitar instantáneas de nivel de sistema de archivos ZFS periódicas. Por lo general, se ejecuta con el siguiente calendario sobre los volúmenes de producción:

 # /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 // 

Syncoide (Sanoid)https://github.com/jimsalterjrs/sanoid

Este programa puede ejecutar snap / replicación ad-hoc de un sistema de archivos ZFS a un objetivo secundario. Sólo utilizo la porción sincoide del producto.

Asumiendo server1 y server2 , el comando simple se ejecuta desde server2 para extraer datos de server1 :

 #!/bin/bash /usr/local/bin/syncoid root@server1:vol1/data vol2/data exit $? 

Monithttps://mmonit.com/monit/

Monit es un programador de tareas extremadamente flexible y administrador de ejecución. De forma predeterminada, funciona en un intervalo de 30 segundos, pero modifico la configuración para utilizar un ciclo de tiempo base de 15 segundos.

Un ejemplo de configuración que ejecuta el script de replicación anterior cada 15 segundos (1 ciclo)

 check program storagesync with path /usr/local/bin/run_storagesync.sh every 1 cycles if status != 0 then alert 

Esto es simple de automatizar y agregar a través de la gestión de configuración. Al envolver la ejecución de la instantánea / replicación en Monit, obtendrá un estado centralizado, control de tareas y alertas (correo electrónico, SNMP, script personalizado).


El resultado es que tengo servidores que tienen varios meses de instantáneas mensuales y muchos puntos de reversión y retención dentro de: https://pastebin.com/zuNzgi0G – Además, una réplica atómica continua de 15 segundos:

# 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 

Usted tiene dos maneras diferentes de hacerlo:

  1. La forma tradicional, sistema de ficheros-agnóstico que es / fue utilizado durante las últimas décadas, con herramientas como rsync o Bacula . Allí usted ha probado y (esperanzadamente) el software estable, grande que se puede modificar para requisitos particulares para los despliegues enormes y se puede utilizar incluso si usted cambia lejos de ZFS
  2. Una de las herramientas que aprovechan ZFS send/recv . Esto puede ser su propia solución, un guión o guión extendido de los varios en Github et al., O más herramientas ricas en características como Sanoid o ZnapZend (enviar / recv con soporte mbuffer y planes de retención). En este caso lo más probable es que no encuentre grandes soluciones "de empresa" (en el sentido negativo), sino herramientas que hagan sólo una tarea y que puedan combinarse con otras herramientas para satisfacer su configuración específica.

En general, sólo confiaría en una herramienta cuyo código fuente está disponible, y lo mantendría lo más simple posible. Si utiliza send/recv , no tiene que administrar mucho, sólo tiene que eliminar la instantánea n-1 en el lado local cuando la transmisión y el establecimiento de la instantánea n en el lado remoto ha tenido éxito.

Puedes dividir tu transporte de la forma que quieras, incluso puede ser asíncrona (las instantáneas no tienen que ser recibidas de inmediato), si sólo tienes que mantener la regla de hierro que sólo se puede enviar un diff entre el local actual / nuevo y local instantánea anterior , Y que la instantánea anterior local es la más reciente en el lado remoto (hasta que finalice la copia de seguridad y todo se restablezca).

Ahora que lo pienso, probablemente podrías codificar eso en una máquina estatal y luego estar seguro de que ningún caso imprevisto puede pasar.