¿Cómo se puede realizar una copia de seguridad continua / incremental de los grupos zfs fuera del sitio?
Reconozco que send/receive
over 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?
Respuestas:
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:
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 :
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)
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
fuente
Tiene dos formas diferentes de hacerlo:
rsync
oBacula
. Allí ha probado y (con suerte) un software estable y grande que puede personalizarse para implementaciones enormes y puede usarse incluso si cambia de ZFSsend/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.
fuente
rsync
solució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 quersync
podrían descubrirlos.