¿Cómo realizar copias de seguridad incrementales / continuas del grupo zfs?

25

¿Cómo se puede realizar una copia de seguridad continua / incremental de los grupos zfs fuera del sitio?

Reconozco que send/receiveover ssh es un método que, sin embargo, implica tener que administrar instantáneas manualmente.

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

La única herramienta que parece prometedora es https://github.com/jimsalterjrs/sanoid, sin embargo, me preocupa que una herramienta poco conocida pueda hacer más daño que bien, ya que puede dañar / eliminar datos.

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

Greg
fuente
2
Responderé un poco más tarde, pero tengo una solución que realiza este tipo de replicación cada 15 segundos desde el servidor ZFS primario al secundario.
ewwhite

Respuestas:

33

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

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

Uno de los casos de uso que tengo es para el almacenamiento replicado de alto rendimiento en servidores de aplicaciones Linux. Por ejemplo, apoyo un producto de software heredado que se beneficia de las unidades SSD NVMe de baja latencia para sus datos. La aplicación tiene una opción de duplicación a 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 teniendo un servidor secundario (que también ejecuta ZFS en hardware similar o diferente) que puede ser local, remoto o ambos. Al combinar las tres utilidades detalladas a continuación, he creado una solución de replicación que me brinda replicación continua, retención profunda de instantáneas y opciones flexibles de conmutación por error.

zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot

Solo es una herramienta útil para habilitar instantáneas periódicas de nivel de sistema de archivos ZFS. Normalmente ejecuto el siguiente cronograma en 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 //

Syncoid (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. Solo uso la porción sincoide del producto.

Suponiendo que el servidor1 y el servidor2 , el comando simple se ejecuta desde el servidor2 para extraer datos del servidor1 :

#!/bin/bash

/usr/local/bin/syncoid root@server1:vol1/data vol2/data

exit $?

Monit - https://mmonit.com/monit/

Monit es un planificador de trabajos y administrador de ejecución extremadamente flexible. Por defecto, funciona en un intervalo de 30 segundos, pero modifico la configuración para usar un ciclo de tiempo base de 15 segundos.

Una configuración de ejemplo 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 mediante la administración de la configuración. Al ajustar la ejecución de la instantánea / replicación en Monit, obtiene un estado centralizado, control de trabajo 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
ewwhite
fuente
44
Gracias por publicar, su respuesta es fenomenal y exactamente lo que estaba buscando (desde la latencia hasta el monitoreo del proceso). También estoy leyendo github.com/ewwhite/zfs-ha/wiki y estoy completamente impresionado. Gracias una vez más :)
Greg
6

Tiene dos formas diferentes de hacerlo:

  1. La forma tradicional y agnóstica del sistema de archivos que se utilizó durante las últimas décadas, con herramientas como rsynco Bacula. Allí ha probado y (con suerte) un software estable y grande que puede personalizarse para implementaciones enormes y puede usarse incluso si cambia de ZFS
  2. Una de las herramientas que aprovechan ZFS send/recv. Puede ser su propia solución, un script o un script extendido de los diversos en Github et al., O más herramientas ricas en características como Sanoid o ZnapZend (envío / recepción con soporte de mbuffer y planes de retención). En este caso, lo más probable es que no encuentre grandes soluciones "empresariales" (en el sentido negativo), sino herramientas que realicen la única tarea y puedan combinarse con otras herramientas para adaptarse a su configuración específica.

En general, solo confiaría en una herramienta cuyo código fuente esté disponible, y lo mantendría lo más simple posible. Si lo usa send/recv, no tiene que administrar mucho, solo 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 tuvieron éxito.

Puede dividir su transporte de la forma que desee, incluso puede ser asíncrono (no es necesario recibir instantáneas de inmediato), si solo mantiene la regla de hierro de que solo puede enviar una diferencia entre la instantánea local actual / nueva y local 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 se restablezca todo).

Ahora que lo pienso, probablemente podría codificar eso en una máquina de estado y luego asegurarse de que no se puedan pasar casos imprevistos.

usuario121391
fuente
No veo cómo una rsyncsolución basada en escala se escalaría para replicar continuamente un gran sistema de archivos a escala empresarial. Los cambios podrían ocurrir más rápido de lo que rsyncpodrían descubrirlos.
Andrew Henle
2
@AndrewHenle Yo tampoco lo recomendaría, solo quería presentarlo, porque la pregunta no especificaba el alcance / tamaño de los datos o el marco temporal. Entonces, en caso de acción poco frecuente, podría ser una posibilidad si fuera independiente del sistema de archivos. Por supuesto, perdería los agradables deltas a nivel de bloque ...
user121391
@ user121391 Totalmente de acuerdo con usted con respecto a que OpenSource es el camino a seguir. Gracias por tu respuesta detallada.
Greg
@Dave justo cuando estoy escribiendo ...
ewwhite
1
muy recomendable znapzend
Trent Lloyd