Estoy buscando algún consejo o las mejores prácticas para realizar una copia de seguridad del depósito S3.
El propósito de realizar una copia de seguridad de los datos de S3 es evitar la pérdida de datos debido a lo siguiente:
- Problema S3
- problema donde borro accidentalmente estos datos de S3
Después de investigar un poco, veo las siguientes opciones:
- Utilice el control de versiones http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html
- Copie de un bucket de S3 a otro con AWS SDK
- Copia de seguridad en Amazon Glacier http://aws.amazon.com/en/glacier/
- Copia de seguridad en el servidor de producción, que a su vez está respaldado
¿Qué opción debo elegir y qué tan seguro sería almacenar datos solo en S3? Quiere escuchar sus opiniones.
Algunos enlaces útiles:
amazon-web-services
amazon-s3
backup
amazon-glacier
Sergey Alekseev
fuente
fuente
Respuestas:
Sincronice su bucket de S3 con un servidor EC2 periódicamente
Esto se puede lograr fácilmente utilizando múltiples utilidades de línea de comando que hacen posible sincronizar un depósito S3 remoto con el sistema de archivos local.
s3cmd
Al principio,
s3cmd
parecía muy prometedor. Sin embargo, después de probarlo en mi enorme cubo S3, no se pudo escalar, con un error deSegmentation fault
. Sin embargo, funcionó bien en cubos pequeños. Como no funcionó para cubos enormes, me propuse buscar una alternativa.s4cmd
La alternativa más nueva de subprocesos múltiples a
s3cmd
. Sin embargo, parecía aún más prometedor, noté que seguía volviendo a descargar archivos que ya estaban presentes en el sistema de archivos local. Ese no es el tipo de comportamiento que esperaba del comando de sincronización. Debería comprobar si el archivo remoto ya existe localmente (la comprobación de hash / hash estaría bien) y omitirlo en la próxima ejecución de sincronización en el mismo directorio de destino. Abrí un problema ( bloomreach / s4cmd / # 46 ) para informar este extraño comportamiento. Mientras tanto, me propuse buscar otra alternativa.awscli
Y luego encontré
awscli
. Esta es la interfaz de línea de comandos oficial de Amazon para interactuar con sus diferentes servicios en la nube, incluido S3.Proporciona un comando de sincronización útil que descarga rápida y fácilmente los archivos del depósito remoto a su sistema de archivos local .
Beneficios:
Eliminación accidental
Convenientemente, el
sync
comando no eliminará archivos en la carpeta de destino (sistema de archivos local) si faltan en el origen (depósito S3) y viceversa. Esto es perfecto para hacer una copia de seguridad de S3: en caso de que los archivos se eliminen del depósito, volver a sincronizarlos no los eliminará localmente. Y en caso de que elimine un archivo local, tampoco se eliminará del depósito de origen.Configuración de awscli en Ubuntu 14.04 LTS
Comencemos por instalar
awscli
. Hay varias formas de hacer esto, sin embargo, me resultó más fácil instalarlo a través deapt-get
.Configuración
A continuación, debemos configurar
awscli
con nuestro ID de clave de acceso y clave secreta, que debe obtener de IAM , creando un usuario y adjuntando la política AmazonS3ReadOnlyAccess . Esto también evitará que usted o cualquier persona que obtenga acceso a estas credenciales elimine sus archivos S3. Asegúrese de ingresar su región S3, comous-east-1
.Preparación
Preparemos el directorio de respaldo local de S3, preferiblemente en formato
/home/ubuntu/s3/{BUCKET_NAME}
. Asegúrese de reemplazarlo{BUCKET_NAME}
con el nombre real de su depósito.Sincronización inicial
Sigamos adelante y sincronicemos el depósito por primera vez con el siguiente comando:
Suponiendo que el depósito existe, las credenciales y la región de AWS son correctas y la carpeta de destino es válida,
awscli
comenzará a descargar el depósito completo en el sistema de archivos local.Dependiendo del tamaño del depósito y de su conexión a Internet, podría llevar desde unos segundos hasta horas. Cuando termine, seguiremos adelante y configuraremos un trabajo cron automático para mantener actualizada la copia local del depósito.
Configuración de un trabajo cron
Continúe y cree un
sync.sh
archivo en/home/ubuntu/s3
:Copie y pegue el siguiente código en
sync.sh
:Asegúrese de reemplazar {BUCKET_NAME} con el nombre de su depósito de S3, dos veces a lo largo de la secuencia de comandos.
A continuación, asegúrese de
chmod
utilizar el script para que pueda ejecutarlocrontab
.Intentemos ejecutar el script para asegurarnos de que realmente funcione:
La salida debería ser similar a esta:
A continuación, editemos el usuario actual
crontab
ejecutando el siguiente comando:Si es la primera vez que lo ejecuta
crontab -e
, deberá seleccionar un editor preferido. Recomiendo seleccionarlonano
ya que es el más fácil de trabajar para los principiantes.Frecuencia de sincronización
Necesitamos decir con
crontab
qué frecuencia ejecutar nuestro script y dónde reside el script en el sistema de archivos local escribiendo un comando. El formato de este comando es el siguiente:El siguiente comando se configura
crontab
para ejecutar elsync.sh
script cada hora (especificado mediante los parámetros minuto: 0 y hora: *) y para que canalice la salida del script a unsync.log
archivo en nuestros3
directorio:Debe agregar esta línea al final del
crontab
archivo que está editando. Luego, continúe y guarde el archivo en el disco presionando Ctrl + W y luego Enter . A continuación, puede salirnano
pulsando Ctrl + X .crontab
ahora ejecutará la tarea de sincronización cada hora.¡Todo listo! Su bucket de S3 ahora se sincronizará con su servidor EC2 cada hora automáticamente, y debería estar listo para comenzar. Tenga en cuenta que con el tiempo, a medida que su bucket de S3 crece, es posible que deba aumentar el tamaño del volumen de EBS de su servidor EC2 para dar cabida a nuevos archivos. Siempre puede aumentar el tamaño de su volumen de EBS siguiendo esta guía .
fuente
awscli
soporte sincronice esto automáticamente en elaws s3 sync
comando. Parece que debe implementar esto manualmente.Teniendo en cuenta el enlace relacionado, que explica que S3 tiene una durabilidad del 99,999999999%, descartaría su preocupación # 1. Seriamente.
Ahora, si el n. ° 2 es un caso de uso válido y una preocupación real para usted, definitivamente me quedaría con las opciones n. ° 1 o n. ° 3. ¿Cual de ellos? Realmente depende de algunas preguntas:
Amazon Glacier is optimized for data that is infrequently accessed and for which retrieval times of several hours are suitable.
¿Esto está bien para ti?A menos que su uso de almacenamiento sea realmente enorme, me quedaría con el control de versiones de cubos. De esta manera, no necesitará ningún código / flujo de trabajo adicional para hacer una copia de seguridad de los datos en Glacier, en otros depósitos o incluso en cualquier otro servidor (que es realmente una mala elección en mi humilde opinión, olvídese).
fuente
Puede hacer una copia de seguridad de sus datos de S3 utilizando los siguientes métodos
Programe el proceso de copia de seguridad mediante la tubería de datos de AWS; se puede realizar de las 2 formas mencionadas a continuación:
a. Utilizando copyActivity de la tubería de datos con la que puede copiar de un depósito s3 a otro depósito s3.
segundo. Usando ShellActivity de datapipeline y comandos "S3distcp" para hacer la copia recursiva de carpetas recursivas s3 de un depósito a otro (en paralelo).
Utilice el control de versiones dentro del depósito S3 para mantener una versión diferente de los datos
Use glacier para hacer una copia de seguridad de sus datos (utilícelo cuando no necesite restaurar rápidamente la copia de seguridad a los depósitos originales (se necesita algún tiempo para recuperar los datos de glacier ya que los datos se almacenan en formato comprimido) o cuando desee guardar algunos costos al evitar usar otro bucket de s3 para la copia de seguridad), esta opción se puede configurar fácilmente usando la regla del ciclo de vida en el bucket de s3 para el que desea realizar una copia de seguridad.
La opción 1 puede brindarle más seguridad, por ejemplo, en caso de que elimine accidentalmente su depósito s3 original y otro beneficio es que puede almacenar su copia de seguridad en carpetas con fecha en otro depósito s3, de esta manera sabrá qué datos tenía en una fecha en particular y puede restaurar una copia de seguridad de una fecha específica. Todo depende de tu caso de uso.
fuente
¿Qué tal si se utiliza la función de replicación entre regiones disponible en los depósitos de S3? Aquí hay algunos artículos útiles sobre la función.
fuente
Pensaría que a estas alturas ya habría una forma más fácil de simplemente mantener algún tipo de copias de seguridad incrementales en una región diferencial.
Todas las sugerencias anteriores no son soluciones realmente simples o elegantes. Realmente no considero glaciar como una opción, ya que creo que es más una solución de archivo que una solución de respaldo. Cuando pienso en la copia de seguridad, pienso en la recuperación ante desastres de un desarrollador junior que elimina recursivamente un depósito o tal vez un exploit o error en su aplicación que elimina cosas de s3.
Para mí, la mejor solución sería un script que simplemente haga una copia de seguridad de un depósito en otra región, una diaria y otra semanal, de modo que si sucede algo terrible, simplemente pueda cambiar de región. No tengo una configuración como esta, he investigado, pero no he podido hacerlo porque tomaría un poco de esfuerzo hacerlo, por lo que desearía que hubiera alguna solución estándar para usar.
fuente
Si bien esta pregunta se publicó hace algún tiempo, pensé que era importante mencionar la protección contra eliminación de MFA con las otras soluciones. El OP está tratando de resolver la eliminación accidental de datos. La autenticación multifactor (MFA) se manifiesta en dos escenarios diferentes aquí:
Eliminación permanente de versiones de objetos: habilite la eliminación de MFA en el control de versiones del depósito.
Eliminación accidental del depósito en sí: configure una política de depósito que niegue la eliminación sin autenticación MFA.
Combine la replicación y el control de versiones entre regiones para reducir el riesgo de pérdida de datos y mejorar los escenarios de recuperación.
Aquí hay una publicación de blog sobre este tema con más detalles.
fuente
Si, tenemos demasiados datos. Si ya tiene un cubo, la primera vez que la sincronización llevará demasiado tiempo. En mi caso, tenía 400 GB. Tomó 3 horas la primera vez. Así que creo que podemos hacer que la réplica sea una buena solución para la copia de seguridad de S3 Bucket.
fuente