¿Cómo se puede usar eficientemente S3 para hacer una copia de seguridad de los archivos de forma incremental?

42

Entiendo cómo funciona rsync en un nivel alto, pero hay 2 lados. Con S3 no hay ningún demonio para hablar, bueno, lo hay, pero básicamente es solo HTTP.

Parece que hay algunos enfoques.

s3rsync (pero esto solo se atornilla en rsync a s3). Sencillo. No estoy seguro de querer depender de algo de terceros. Deseo que s3 solo sea compatible con rsync.

También hay algunos 'clones' de rsync como duplicidad que dicen admitir s3 sin dicho bolt-on. ¿Pero cómo puede hacer esto? ¿Están manteniendo un archivo de índice localmente? No estoy seguro de cómo puede ser tan eficiente.

Obviamente quiero usar s3 porque es barato y confiable, pero hay cosas para las que rsync es la herramienta, como hacer una copia de seguridad de un directorio gigante de imágenes.

¿Cuáles son las opciones aquí? ¿Qué pierdo al usar duplicity + s3 en lugar de rsync + s3rsync + s3?

Jaimie Sirovich
fuente
44
S3 es barato? Eso es nuevo para mí. ¿De confianza? Por supuesto, pero no es barato.
EEAA
55
Bueno, s3 cuesta $ 0.13 / gb o menos, ya que almacena más o quiere menos redundancia. Una búsqueda rápida revela evbackup.com para el almacenamiento rsync. Mucho más caro. ¿Qué es más barato y tiene cierto nivel de redundancia?
Jaimie Sirovich
Si yo tuviera que diseñar rsync, sería compatible con los plugins para que los nuevos protocolos (por ejemplo, s3: //) podría añadirse. Sin embargo, en la actualidad, rsync no es compatible con esto, por lo que no creo que rsync se pueda usar directamente para hacer una copia de seguridad en S3.
Edward Falk
El siguiente problema es que no creo que S3 almacene metadatos como propiedad o permisos, por lo que usar, por ejemplo, "aws s3 sync" para hacer copias de seguridad funcionará, pero probablemente no sea adecuado para una copia de seguridad completa de un sistema de archivos Unix, ya que se perderían demasiados datos en la restauración. También creo que se perderían enlaces simbólicos, enlaces duros y otros archivos especiales.
Edward Falk

Respuestas:

39

Dado que esta última pregunta fue respondida, existe una nueva herramienta de línea de comandos de AWS, aws.

Se puede sincronizar , como rsync, entre el almacenamiento local y s3. Ejemplo de uso:

aws s3 sync s3://mybucket /some/local/dir/

Si el entorno de Python de su sistema está configurado correctamente, puede instalar el cliente AWS usando pip:

pip install awscli
Dan Pritts
fuente
1
En mi experiencia, esto carga todo, no solo un delta de cambios. Por ejemplo, estaba enviando un sitio estático a un servidor de desarrollo rsync, y me tomó un promedio de 1 segundo, con solo los cambios que se produjeron en mi conexión lenta. aws s3 syncpor otro lado, tardó unos 5 minutos, retransmitiendo todos y cada uno de los archivos.
pan de centeno
2
Creo que no funciona, pero los documentos dicen "Un archivo local requerirá cargarse si el tamaño del archivo local es diferente al tamaño del objeto s3, la última hora modificada del archivo local es más nueva que la hora de la última modificación del objeto s3, o el archivo local no existe bajo el depósito y el prefijo especificados ". Asegúrese de tener la última versión de aws-cli; si puede reproducir esto, presente un error con ellos en github. Respondieron cuando presenté un error hace un tiempo.
Dan Pritts
El comando debe ser: aws s3 sync / some / local / dir / s3: // mybucket
Carlo S
1
Carlos, no estoy seguro de cuál es tu punto. Si quiere sugerir que mi comando de ejemplo es incorrecto, ambos tenemos razón. La sincronización s3 puede funcionar en cualquier dirección.
Dan Pritts
Tarde a la fiesta, pero esto es lo que sucede: al subir a S3, se aplican las reglas de verificación rápida (carga si el tamaño o la fecha han cambiado). Al descargar , no hay reglas de verificación rápida, y todo se descarga incondicionalmente.
Edward Falk
16

La herramienta s3cmd tiene una gran syncopción. Lo uso para sincronizar copias de seguridad locales, usando algo como:

s3cmd sync --skip-existing $BACKUPDIR/weekly/ s3://MYBACKUP/backup/mysql/

Esto --skip-existingsignifica que no intenta comparar la suma de comprobación de los archivos existentes. Si ya hay un archivo con ese nombre, lo omitirá rápidamente y continuará. También hay una --delete-removedopción que eliminará los archivos que no existen localmente, pero quiero seguir en S3 incluso los que he limpiado localmente, así que no lo uso.

Nic Cottrell
fuente
5

No quiero decirle a nadie qué hacer, pero ¿puedo agitar una bandera por duplicidad? u otra solución de respaldo incremental. La sincronización está muy bien, pero si haces una copia de seguridad todas las noches, ¿qué sucede si no notas el problema durante dos días? Respuesta: Es demasiado tarde, sus archivos locales y su copia de seguridad son un espejo el uno del otro y tampoco tienen los datos que necesita. Realmente debería considerar copias de seguridad incrementales o instantáneas para poder recuperarse en un momento particular en el tiempo y para hacer esto de manera eficiente necesita copias de seguridad incrementales. Y si perder sus datos es un escenario del fin del mundo, guarde copias en diferentes proveedores como nunca se sabe, entonces podría perderse, piratear quién sabe.

Uso duplicidad y s3, está bien pero es intensivo en CPU. Pero hace copias de seguridad incrementales. En caso de emergencia, cuando desee restaurar un directorio o un archivo en particular, como fue el miércoles pasado o el pasado enero, sin restaurar los otros archivos en la misma partición, necesita copias de seguridad incrementales y una herramienta donde puede solicitar solo los archivos que necesita.

Tengo un cron, que se llena cada x meses, de lo contrario incremental y elimina más de x meses para mantener bajos los totales de almacenamiento s3, finalmente hace el estado de la colección, así que me envían por correo cada mañana con el estado. Debe vigilarlo regularmente para que note cuando su copia de seguridad no funciona.

Se requiere un espacio temporal local significativo para mantener las firmas locales, así que configure el directorio temporal con cuidado. Esta copia de seguridad / mnt, excluyendo varios directorios dentro de / mnt. Esto es bueno para hacer una copia de seguridad de los datos, ya que las particiones del sistema utilizan imágenes de Amazon o herramientas de instantáneas.

Script PHP:

# Duplicity Backups

$exclude  = "--exclude /mnt/ephemeral ".
            "--exclude /mnt/logs ".
            "--exclude /mnt/service ".
            "--exclude /mnt/mail ".
            "--exclude /mnt/mysql ";

$key = "PASSPHRASE=securegpgpassphrase";

$tmp = "/mnt/mytempdir";

system("mkdir -p $tmp");

# Amazon

$aws = "AWS_ACCESS_KEY_ID=xxxxxx ".
       "AWS_SECRET_ACCESS_KEY=xxxxxx ";

$ops = "-v5 --tempdir=$tmp --archive-dir=$tmp --allow-source-mismatch --s3-european-buckets --s3-use-new-style --s3-use-rrs";
$target = " s3://s3-eu-west-1.amazonaws.com/mybucket";

# Clean + Backup

system("$key $aws /usr/bin/duplicity $ops --full-if-older-than 2M $exclude /mnt $target");
system("$key $aws /usr/bin/duplicity $ops remove-older-than 6M --force $target");
system("$key $aws /usr/bin/duplicity $ops cleanup --force --extra-clean $target");
system("$key $aws /usr/bin/duplicity $ops collection-status $target")
Jack
fuente
1
active el control de versiones para el s3 bucket, luego mantendrá copias antiguas
mcmillab
3

S3 es un sistema de almacenamiento de objetos de propósito general que proporciona suficiente flexibilidad para que pueda diseñar cómo desea usarlo.

No estoy seguro de su pregunta sobre los problemas con rsync (aparte de la indexación) o los problemas con la herramienta 'de terceros' con la que se ha encontrado.

Si tiene un gran conjunto de archivos bien estructurado, puede ejecutar múltiples sincronizaciones s3 en sus subcarpetas.

La buena gente de Amazon también le permite importar / exportar desde su disco duro portátil para transferir archivos grandes a S3 o EBS: http://aws.amazon.com/importexport/ que puede usar para la primera carga.

Consulte las mejores prácticas de Amazon s3 aquí: http://aws.amazon.com/articles/1904

En cuanto a las diferentes herramientas, pruébelas y vea qué funciona mejor para usted. En cuanto a los precios, hay precios de redundancia reducidos si se ajustan a sus necesidades: http://aws.amazon.com/s3/pricing/

Recomendación general: tenga una CPU multinúcleo rápida y una buena conexión de red.

ACTUALIZACIÓN: Mención sobre suma de verificación en S3

En cuanto a S3, almacena datos en pares de valores clave y no existe un concepto de directorios. S3sync verifica la suma de verificación (S3 tiene un mecanismo para enviar la suma de verificación como un encabezado para verificación - Encabezado Content-MD5). Las mejores prácticas enlazan la parte de Integridad de datos que contiene en detalle. S3 le permite enviar / verificar y recuperar sumas de verificación. Hay muchas personas que realizan copias de seguridad incrementales con duplicidad. A pesar de que no hay rsync ejecutándose en S3, puede hacer sumas de verificación como mencioné aquí.

rsync es una herramienta probada y la mayoría de las herramientas modernas usan el mismo algoritmo o biblioteca rsync o llaman a rsync externamente.

Chida
fuente
1
No veo cómo esto responde la pregunta. Estaba preguntando cómo la duplicidad logra hacer lo que rsync hace sin un demonio en el otro lado. Ni siquiera tiene la capacidad de obtener una suma de verificación, o tal vez sí, pero entonces, ¿cómo actualizaría incrementalmente los archivos?
Jaimie Sirovich
OKAY. Entonces está diciendo que Duplicity usa este hash de S3, pero también afirma que funciona a través de FTP. FTP no tiene mecanismo de hashing. Tiendo a errar en el lado seguro y uso las herramientas 'probadas'. Rsync está probado que sí, pero no hará copias de seguridad de s3 sin el servicio adicional s3 sync. Tengo un poco de miedo a la duplicidad, pero tiene un atractivo de protocolo más amplio si puedo obtener algún nivel de funcionalidad similar a rsync con s3 sin dicho servicio accesorio. Simplemente no entiendo qué tan bien funciona (y posiblemente de manera diferente con varios protocolos). ¿Cómo diablos hace sincronización FTP? :)
Jaimie Sirovich
@JaimieSirovich Pruébalo y verás. Si lo hubiera hecho, habría sabido que Duplicity construye archivos "manifiestos" en menos tiempo de lo que le tomó escribir todos estos comentarios sobre lo que podría estar haciendo.
ceejayoz
3

Alternativamente, puede usar minio client aka mc. El uso del comando 'mc mirror' hará el trabajo.

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: cliente minio
  • share / sharegain: directorio local
  • s3: Alias ​​para https://s3.amazonaws.com
  • MyS3Bucket: mi cubo S3 remoto
  • share / sharegain: mi objeto en s3

Puede escribir un script simple como cronjob que mantendrá una sincronización a intervalos periódicos.

Espero eso ayude.

Atul
fuente
También hay una -wbandera ahora, que se usará fsnotifypara observar los cambios. Se puede configurar fácilmente como un servicio del sistema o similar.
alkar
2

No estoy seguro de si rsync verdadero es una buena opción para Amazon.

Según tengo entendido, el algoritmo rsync estándar significa que el cliente calcula los hashes para cada bloque de un archivo y el servidor calcula los hashes para su copia y envía esos hashes al cliente, lo que significa que el cliente puede determinar qué bloques han cambiado y necesitan cargarse.

Eso causa dos problemas para Amazon, ya que se deben enviar muchos hashes a través de Internet y también se necesita potencia de procesamiento para calcular todos los hashes que aumentarían los costos de Amazon, lo que probablemente sea la razón por la que se lo dejan a terceros proveedores que pueden cobrar extra por esa característica.

En cuanto a los clones, obviamente están almacenando los hashes en algún lugar y el lugar puede variar según el clon. Les sería posible almacenar los hashes como un objeto separado por archivo en Amazon o como una base de datos almacenada en Amazon o podrían almacenarlos local y remotamente.

Hay ventajas y desventajas de hacerlo de cualquier manera. Si los hashes se almacenan de forma remota en archivos individuales, puede ser costoso recuperarlos continuamente. Si los hash se almacenan en una base de datos de forma remota, entonces esta base de datos puede ser grande y puede ser costoso recuperarlos y actualizarlos continuamente. Si los hashes se almacenan localmente, esto ayuda a reducir los costos, pero introduce otras complicaciones y problemas.

(Por supuesto, Amazon tiene otros servicios, por lo que sería posible mantener una base de datos en Amazon DB)

Como ejemplo, probé un primer clon rsync hace muchos años. Esto no fue escrito para tener en cuenta la estructura de precios de Amazon y emitía muchos http para recuperar el hash de cada bloque y, dado que Amazon cobra por cada compra, significa que mientras la parte de almacenamiento de mi factura cayó bruscamente, la parte de transferencia globo

¿Qué pierdo al usar duplicity + s3 en lugar de rsync + s3rsync + s3?

Pierde el hecho de que con rsync sabe que está comparando archivos fuente con sus archivos de respaldo. Con duplicidad y otros clones, está comparando sus archivos de origen con un hash que se tomó cuando se realizó la copia de seguridad. Por ejemplo, puede ser posible acceder a S3 directamente y reemplazar uno de sus archivos sin volver a calcular el hash o actualizar la base de datos hash.

sgmoore
fuente
0

Después de comparar las múltiples opciones mencionadas en este hilo, decidí ir a S3fs. Le permite montar S3 como un sistema de archivos local. Luego puede continuar y usar rsync de la forma en que ya lo sabe.

Este es un buen tutorial para comenzar: Amazon S3 con Rsync

El autor utilizó anteriormente el s3sync mencionado, pero luego cambió a la opción con S3Fs. Me gusta porque también tengo otras carpetas de respaldo montadas localmente a través de SSHFS.

Hendrik
fuente
12
¡Peligro, Will Robinson! Esto es realmente costoso ya que no está obteniendo ningún beneficio de la comunicación rsync de bajo ancho de banda --- s3fs terminará leyendo (y luego escribiendo, si cambia) todo el archivo, lo que significa que Amazon le facturará dos veces. En su lugar, considere usar una instancia EC2 y usar rsync de forma remota a través de ssh. Las transferencias a S3 desde una instancia de EC2 son gratuitas, por lo que todo lo que paga es la comunicación de bajo ancho de banda de rsync desde su máquina local a la instancia de EC2. Ejecutar una micro instancia EC2 a pedido no cuesta prácticamente nada.
David dado el
2
¡Esta! Hay muchos malos consejos para aquellos que no entienden rsync y S3 ...
Mark
El único inconveniente de esto es que ahora tiene una micro instancia para administrar. Trivial si sabes cómo, pero una barrera de entrada para muchos. En el lado positivo, el almacenamiento EBS conectado a EC2 es aproximadamente la mitad del precio por byte de S3.
Dan Pritts
@DavidGiven ¿Qué sucede si escribí directamente en el s3fs montado sin usar rysnc y luego logré la longevidad a través del ciclo de vida?
Forethinker