¿Cuál es una estrategia de copia de seguridad externa efectiva para un grupo reflejado ZFS?


9

Utilizo un grupo de ZFS que consta de dos discos duplicados. Para realizar copias de seguridad fuera del sitio, compré dos discos más.

Mi plan inicial era crear la copia de seguridad fuera del sitio conectando un tercer disco al espejo, esperando que ZFS se recupere, luego desconecte la unidad y la lleve fuera del sitio. Esto funciona bastante bien, pero me ha sorprendido que parezca realizar una recuperación completa cada vez que se conecta un disco (leí, y posiblemente entendí mal, que cada conexión daría como resultado una recuperación incremental o delta). Esto hace que las copias de seguridad demoren más de lo aceptable.

Mis requisitos son tener una copia externa de mi zpool y todas sus instantáneas que pueda rotar diariamente. Esto significa que la recuperación debe durar como máximo 24 horas, actualmente está cerca de eso, pero nuestros planes de hacer crecer nuestro grupo lo llevarán más allá de ese plazo.

¿Cómo puedo mantener copias de seguridad fuera del sitio que no requieren una operación de recuperación completa? ¿Debo usar un sistema de archivos diferente en mis unidades de copia de seguridad (por ejemplo, exportar una imagen en lugar de hacer que formen parte del grupo ZFS)? ¿Debo tener las copias de seguridad en un grupo separado y enviarle nuevas instantáneas a medida que se crean?


Mi estrategia actual es el método de agrupación múltiple, con zfs enviar y recibir para mantener sincronizadas las instantáneas. Me encantaría saber si has encontrado un argumento en contra de esto o una mejor opción.
so12311

Respuestas:


3

Después de mucho retoques y experimentación, he encontrado una solución, aunque con una compensación bastante grande.

En primer lugar, las opciones que tuve que descartar:

  • Tener un segundo servidor ZFS externo con un grupo reflejado no era una opción debido al costo. Si hubiera sido una opción, este hubiera sido el mejor enfoque, utilizando ZFS enviar / recibir para enviar instantáneas al grupo remoto.

  • Tener un segundo grupo reflejado de ZFS en el sitio, del cual podría eliminar discos para llevar a casa. Esto es más factible que la primera opción, pero necesitaría que el segundo grupo siempre tenga dos discos en el sitio (o usar dos copias de datos en un solo disco en el sitio). Actualmente tengo cuatro discos y no hay más espacio para un quinto en el servidor. Este sería un enfoque justo pero aún no ideal.

  • Usando ZFS adjuntar y desconectar para girar el disco de copia de seguridad dentro y fuera del grupo reflejado. Esto funciona bien, pero tiene que realizar una recuperación completa cada vez que se agrega el disco. Esto lleva inaceptablemente largo, por lo que no podía confiar en esto.

Mi solución es similar a usar attachy detach, sin embargo, usa onliney offline. Esto tiene la ventaja de realizar una recuperación delta frente a una recuperación completa, pero el inconveniente de que la agrupación siempre informa un DEGRADEDestado (la agrupación siempre tiene dos discos; los discos rotativos externos se marcan offlinecuando están en almacenamiento remoto y recuperación y luego se conectan cuando están en el sitio).

Entonces, un resumen rápido y una descripción general de mi configuración:

Tengo un servidor ZFS y cuatro discos idénticos. ZFS está configurado para usar un grupo reflejado. Dos de los cuatro discos son miembros permanentes de este grupo. Los otros dos discos giran; uno está siempre en almacenamiento externo, el otro es parte del grupo para actuar como una copia de seguridad lista para usar.

Cuando llegue el momento de rotar las copias de seguridad:

  • Espero zfs scruba que se complete para asegurar razonablemente que el disco de copia de seguridad esté libre de errores

  • Yo zfs offlineel disco que se llevará a distancia. Después de que está fuera de línea, lo hice hdparm -Y /dev/idgirar. Después de un minuto, remuevo parcialmente el trineo del disco (lo suficiente como para asegurar que pierda energía) y luego le doy otro minuto antes de tirar completamente de la unidad para garantizar que ha dejado de girar. El disco va en una bolsa estática y luego en un estuche protector y sale del sitio.

  • Traigo el otro disco externo. Se instala en la bandeja de hotswap y gira. Utilizo zfs onlinepara restaurar el disco en el grupo y poner en marcha una recuperación parcial para que sea concurrente.

Este sistema garantiza que en cualquier momento tenga dos ONLINEdiscos espejo y un OFFLINEdisco remoto (que ha sido borrado). El cuarto disco se está recuperando o está en línea, lo que tiene la ventaja de que, en caso de que falle una unidad en funcionamiento, es probable que el grupo siga siendo consistente con dos discos en línea.

Ha funcionado bien durante las últimas dos semanas, pero todavía lo consideraría un enfoque hack. Haré un seguimiento si me encuentro con algún problema importante.


Actualización: después de ejecutar esto durante un par de meses, descubrí que en mi uso en el mundo real, la recuperación está tomando el mismo tiempo para desconectar / adjuntar y desconectar / en línea. En mis pruebas, no creo que estuviese ejecutando un exfoliante; mi presentimiento es que si una unidad está fuera de línea para un exfoliante, entonces requiere un resiliente completo.


¿Esto definitivamente no funcionará con solo tres dispositivos en lugar de cuatro? La Guía de administración de Oracle Solaris ZFS establece que se produce un error en un conjunto de espejos "Si se quitan todos los componentes de un espejo" [énfasis mío], lo que parece implicar que una cuarta unidad no es estrictamente necesaria.
Kenny Evitt

1
Por tres dispositivos, ¿quiere decir dos discos que siempre están en el grupo y uno que ocasionalmente está fuera del sitio, o un disco que siempre está en el grupo y dos que giran fuera del sitio? Con la segunda opción, esperaría la pérdida de datos si el grupo encuentra datos incorrectos mientras solo hay un disco completamente en línea (cuando el segundo disco está girando o aún no está completamente recuperado). Mi centavo es asegurar siempre que su grupo reflejado tenga dos discos en línea de tiempo completo.
STW

Me refería a la segunda opción que mencionas. Con esa opción, ¿qué posibilidades hay de que haya datos incorrectos mientras solo un disco está en línea? La recuperación parcial / incremental debería ser relativamente rápida, ¿verdad? E incluso si hubiera datos incorrectos, ¿no debería poder recuperarse de la segunda unidad? ¿O recuperarse de la tercera unidad, el peor de los casos? [Obviamente, hay escenarios en los que la recuperación no es posible; pero eso es cierto incluso con cuatro unidades; o cualquier número en realidad.]
Kenny Evitt

Me apegaría a tener siempre dos discos duplicados en línea, con un tercero y un cuarto para rotar las copias de seguridad. Cada vez que tiene un solo disco en línea en un espejo es un momento en el que es vulnerable, e incluso con mi enfoque existe el riesgo de que el disco de respaldo externo pueda desarrollar problemas de integridad y no ser 100% recuperable (idealmente habría ser dos discos duplicados fuera del sitio en cualquier momento, de modo que se pueda comparar la integridad de los dos).
STW

En resumen, ZFS se trata de evitar una sola copia de datos (o al menos tener paridad, lo que permite la reconstrucción de datos incorrectos). Cuando solo tiene un disco en línea o una copia de los datos de respaldo, corre el riesgo de perder datos.
STW

2

¿Por qué no zfs envía sus instantáneas a una máquina remota ZFS? Utilizo un script bash simple para esto:

#!/usr/local/bin/bash
# ZFS Snapshot BASH script by Shawn Westerhoff
# Updated 1/14/2014

### DATE VARIABLES
# D = Today's date
# D1 = Yesterday's date
# D# = Today less # days date
Y=$(date -v-1d '+%m-%d-%Y')
D=$(date +%m-%d-%Y)
D1=$(date -v-1d '+%m-%d-%Y')
D10=$(date -v-10d '+%m-%d-%Y')
D20=$(date -v-20d '+%m-%d-%Y')

# Step 1: Make the snapshots

for i in $( zfs list -H -o name ); do
    if [ $i == tier1 ]
    then echo "$i found, skipping"
    else
    zfs snapshot $i@$D
    fi
done

# Step 2: Send the snapshots to backup ZFS sever

    for i in $( zfs list -H -o name ); do
        zfs send -i $i@$D1 $i@$D | ssh -c arcfour root@10.10.10.10 zfs recv $i
    done

# Step 3: Destroy snapshots that are 20 days old

for i in $( zfs list -H -o name ); do
        if [ $i == tier1 ]
        then echo "$i found, skipping"
        else
        zfs destroy $i@$D20
        fi
done

0

Creé una herramienta llamada snapdump que le permite crear volcados incrementales de sus conjuntos de datos zfs en un sistema de archivos extraño (no zfs). Snapdump también admite la restauración de una cadena de instantánea incremental con un solo comando.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.