Se han hecho preguntas similares, pero necesito saber qué se recomendaría en esas circunstancias, para saber si me falta algo en mi comprensión del uso de EC2.
Una pequeña startup está ejecutando su negocio en la red EC2 y me pidió algunos consejos sobre opciones de respaldo. Actualmente se autofinancian y están haciendo todo lo posible para ahorrar costos cuando es factible. Sin profundizar demasiado en la configuración de sus sistemas, daré un servidor web como ejemplo; Es un servidor web simple con una base de datos. El problema es que no quieren que se elimine el servidor.
La persona que ha estado haciendo la configuración cree que deberían hacer volcados periódicos de la base de datos y almacenarlos en S3, o crear scripts que reconstruirían un nuevo servidor en Amazon cuando sea necesario haciendo una copia de seguridad de carpetas seleccionadas que contienen información de configuración . Sugirió que crear instantáneas del servidor sería un desperdicio, ya que ocupan mucho espacio en disco y, esencialmente, se pudriría la información entre grandes volcados de datos, por lo que la instantánea quedaría desactualizada rápidamente.
Mi idea era tomar una instantánea de la máquina virtual y luego hacer volcados periódicos de la base de datos y almacenarlos en S3. Si perdieran la instancia de EC2 o si algo así como una actualización la dejara inutilizable, podrían usar la instantánea para crear una copia de seguridad del servidor de forma relativamente rápida con el último volcado de la base de datos, en lugar de comenzar desde cero para construir una nueva instancia desde un completo nuevo AMI.
Tengo entendido que tomar una instantánea de una instancia de EC2 (o tienda EBS) requerirá tiempo de inactividad, algo que dudan tener. También he leído que debe cerrar el servidor para mantener el sistema de archivos coherente cuando se tomó la instantánea. Como todavía no tienen un clúster detrás de un equilibrador, limitan las opciones que involucran instantáneas.
La creación de scripts para construir servidores, a menos que haya algo específico de Amazon que no conozca, implicaría crear un servidor Chef o Puppet que podría implementar nuevos servidores con sus roles asociados en EC2. En este momento, la startup no tiene fondos para mantener ese tipo de servidor en las alas y, en este momento, realmente no necesitan implementar tantos servidores.
Idealmente, tendrían los fondos para crear una cantidad de servidores detrás de un equilibrador virtual o el servicio de equilibrador de Amazon, y luego retirar los servidores de uno en uno para realizar actualizaciones o instantáneas. En este momento estaría nervioso ante la idea de hacer actualizaciones porque si está volcando la base de datos, eso no ayudará si una actualización del sistema altera una biblioteca en la que se basa su aplicación y el servicio deja de funcionar.
También supuse que otra opción es ejecutar un script que crea un volumen EBS, lo monta y, en el servidor, ejecuta algo como rsync para capturar la mayor parte de la información del sistema de archivos en el volumen EBS, luego comprime y copia el contenido en S3, desconecta el volumen y destrúyalo para ahorrar costos de almacenamiento, luego realice un volcado de la base de datos para capturar datos en vuelo que de otro modo serían inconsistentes. Para algunos de sus servidores, lo más probable es que sea necesario guardar en volúmenes temporales de EBS a medida que crecen sus necesidades de base de datos.
Se está creando un sandbox VMWare para recrear sus sistemas de red en un entorno donde las actualizaciones se pueden probar previamente antes de aplicarlas a los sistemas de producción en Amazon. Espero que eso minimice la posibilidad de que una actualización del sistema elimine su aplicación.
Entonces ... dadas las restricciones de ejecutar un servidor, con la base de datos y el servidor de aplicaciones en el sistema, buscando tener el menor tiempo de inactividad posible (restringir el uso de instantáneas y hacer que el proceso de copia de seguridad sea lo más "activo" posible ( creado en vivo sin apagar el servidor), ¿estoy en el camino equivocado para sugerir programar una hora para crear una instantánea de la instancia de EC2 en su estado de funcionamiento y desde allí hacer volcados de la base de datos para copiar en S3? ¿Hay una mejor estrategia para seguir? en la creación de una copia de seguridad en vivo de un servidor si las instantáneas crearán tiempo de inactividad?
fuente
Respuestas:
Hay algo interesante sobre esta pregunta, específicamente con respecto a la idea del tiempo de inactividad. Parte de la idea es que si una aplicación es sensible al tiempo de inactividad, el tiempo de recuperación también debe tenerse en cuenta. (Como argumento extremo, las copias de seguridad no requieren tiempo de inactividad, a menos que necesite esas copias de seguridad, en cuyo caso el tiempo de inactividad puede llegar al infinito )
Un poco sobre EBS
Los volúmenes y las instantáneas de EBS funcionan a nivel de bloque, lo que permite tomar instantáneas mientras se ejecuta una instancia, incluso si el volumen de EBS está en uso. Sin embargo, solo los datos que están realmente en el disco (es decir, no en un caché de archivos) se incluirán en la instantánea. Es la última razón que da lugar a la idea de instantáneas consistentes.
Un punto interesante aquí es que en los dos casos anteriores, no necesita esperar a que la instantánea termine para volver a conectarse / descongelarse y reanudar la escritura en el disco; una vez que se haya iniciado la instantánea, sus datos serán consistentes en ese momento. Por lo general, esto solo requiere unos segundos durante los cuales su disco está bloqueado contra escritura. Además, dado que la mayoría de las bases de datos estructuran sus archivos en el disco de manera razonable, existe una buena posibilidad de que las inserciones tengan un efecto mínimo en los bloques existentes, lo que minimiza los datos agregados a la instantánea.
Considere el punto de la copia de seguridad
Los volúmenes EBS ya están replicados dentro de una zona de disponibilidad, por lo que hay un cierto grado de redundancia incorporada. Si su instancia finaliza, simplemente puede adjuntar el volumen EBS a una nueva instancia y (después de superar la falta de coherencia) reanudar donde Parado. En muchos aspectos, esto hace que el volumen de EBS se parezca mucho a una instantánea inconsistente, siempre que pueda acceder a él. Dicho esto, la mayoría de los usuarios de EC2 probablemente recuerden las fallas en cascada de los volúmenes de EBS desde principios de 2011: los volúmenes fueron inaccesibles durante varios días y algunos usuarios también perdieron datos.
RAID1
Si está intentando protegerse contra la falla de un disco EBS (sucede), puede considerar una configuración RAID1. Dado que los volúmenes EBS son dispositivos de bloque, puede usar fácilmente mdadm para configurarlos en la configuración deseada. Si uno de sus volúmenes EBS no está funcionando según las especificaciones, es bastante fácil fallarlo manualmente (y luego reemplazarlo con otro volumen EBS). Por supuesto, esto tiene desventajas: mayor tiempo para cada escritura, mayor susceptibilidad al rendimiento variable, el doble del costo de E / S (monetariamente, no en términos de rendimiento), no hay protección real contra una falla de AWS más extendida (un problema común el año pasado fue la incapacidad de separar los volúmenes de EBS que estaban en estado bloqueado) y, por supuesto, el estado inconsistente del disco en caso de falla.
S3FS
Una opción para ciertas aplicaciones (definitivamente NO para bases de datos) es montar S3 como un sistema de archivos local (por ejemplo, a través de s3fs). Esto es lento, carece de algunas de las características que uno esperaría de un sistema de archivos y puede no comportarse como se espera (consistencia eventual). Dicho esto, para un propósito simple como hacer que los archivos cargados estén disponibles en todas las instancias, puede tener mérito. Obviamente no es para nada que requiera un buen rendimiento de lectura / escritura.
MySQL bin-log
Una opción más específica para MySQL puede ser el uso del bin-log. Puede configurar un segundo volumen EBS que almacenará su bin-log (para minimizar el efecto de las escrituras agregadas en su base de datos), y usarlo junto con los volcados de la base de datos que realice. Incluso es posible que pueda hacer esto con s3fs, lo que en realidad puede tener mérito si el rendimiento es tolerable (un rsync probablemente sería mejor que tratar de usar s3fs directamente, y definitivamente querrá comprimir lo que pueda).
Una vez más, sin embargo, volvemos a la idea del propósito. Considere lo que sucedería con las sugerencias anteriores:
Entonces, realmente, RAID1 es inútil en su mayoría, y bin-log lleva demasiado tiempo; ambos pueden tener mérito en ciertas circunstancias, pero están lejos de ser la idea de copia de seguridad.
Instantáneas
Es importante tener en cuenta que las instantáneas son diferenciales y solo almacenan los bloques reales que contienen datos (y están comprimidos). A diferencia de un volumen EBS, donde si tiene un volumen de 20 GB, pero solo usa 1 GB, todavía se le cobrará por el almacenamiento 'provisto' (20 GB). Con una instantánea, solo se le cobra por lo que usa. Si no hay cambios de datos entre las instantáneas, (teóricamente) no hay cargo. (Las instantáneas se cobran por PUTS / GETS y el almacenamiento usado).
Por otro lado, recomendaría encarecidamente que los datos de su aplicación (incluidas las bases de datos) no se almacenen en su volumen raíz (que ya puede haber configurado). Una de las ventajas es que, con suerte, su volumen raíz verá un mínimo de cambio, lo que significa que sus instantáneas pueden ser menos frecuentes (o tendrán un mínimo de cambio) reduciendo el costo y la facilidad de uso.
También es importante mencionar que puede eliminar instantáneas antiguas en cualquier momento; aunque sean diferenciales, no afectarán a las otras instantáneas. Dicho esto, cada bloque asignado a una instantánea no se entregará hasta que no haya una instantánea que aún haga referencia a ese bloque.
El problema con los volcados periódicos es, en primer lugar, el tiempo entre volcados (posiblemente abordado mediante el uso del bin-log de MySQL) y también la dificultad de la recuperación. Se necesita tiempo para importar un volcado grande y reproducir todos los eventos desde un bin-log. Además, crear un volcado no está exento de implicaciones de rendimiento. Podría decirse que estos vertederos probablemente requieren mucho más almacenamiento que una instantánea. Configurar un volumen EBS únicamente para las bases de datos e instantáneas que sería preferible en la mayoría de los aspectos (dicho esto, tomar una instantánea también tiene un poco de implicación en el rendimiento).
La belleza de las instantáneas y los volúmenes de EBS es que pueden usarse en otros casos. Si su instancia no se inicia, puede adjuntar el volumen raíz a otra instancia para diagnosticar y solucionar el problema, o simplemente para copiar sus datos, y puede cambiar los volúmenes raíz con solo unos minutos de tiempo de inactividad (detener la instancia, desconectar el volumen raíz, adjunte un nuevo volumen raíz, inicie la instancia). Esta misma idea se aplica a tener sus datos en un segundo volumen de EBS. Esencialmente, simplemente activa una nueva instancia desde su AMI personalizada y adjunta su volumen EBS actual, lo que ayuda a minimizar el tiempo de inactividad.
(Se podría argumentar (y probablemente no lo recomendaría) que podría configurar dos copias de MySQL en el mismo servidor (Maestro-esclavo), utilizando dos volúmenes EBS, y luego apagar su esclavo para tomar una instantánea de su Volumen de EBS: será constante, sin tiempo de inactividad, pero es probable que los costos de rendimiento no valgan la pena).
AWS tiene escala automática, que podrá mantener un número constante de instancias (incluso si ese número es 1), sin embargo, se implementaría desde una instantánea, por lo que si su instantánea no es útil, entonces la premisa no es de mucha utilidad .
Otro par de puntos: puede implementar tantas instancias como desee desde una única instantánea (a diferencia de un volumen EBS, que solo se puede adjuntar a una única instancia en un momento dado). Además, los volúmenes de EBS están restringidos para su uso dentro de una zona de disponibilidad, mientras que las instantáneas se pueden usar dentro de una región.
Idealmente, con una instantánea, si su servidor se cae, puede iniciar una nueva usando la última instantánea, especialmente si separa su volumen raíz de sus datos, una mala actualización debería resultar en un mínimo de tiempo de inactividad (ya que simplemente transfiera el volumen de EBS que contiene sus datos, y tome una instantánea para preservar cualquier cosa que pueda corromperse debido a la inconsistencia).
Como nota al margen, Amazon afirma que la tasa de falla de los volúmenes de EBS aumenta con la cantidad de datos modificados desde la última instantánea.
Recomendaciones finales
Lectura recomendada:
(Creo que he escrito demasiado, pero no dije lo suficiente, pero espero que encuentre algo que valga la pena leer).
fuente
Es posible tomar una instantánea de un volumen EBS en vivo , sin embargo, debe asegurarse de que el sistema de archivos esté en un estado consistente y luego congelado mientras se inicia la instantánea. No todos los sistemas de archivos lo permiten, aunque definitivamente es posible y es la base de nuestra propia solución de respaldo.
Las instantáneas de EBS también son bastante baratas, ya que solo cobran por los datos modificados, y los cargos por datos son muy razonables por sí mismos. Sin embargo, tenga en cuenta que esto se basa en cambios de nivel de bloque, por lo que puede cambiar con bastante rapidez. Esto también es cierto entre las instantáneas, solo se cobran los datos modificados entre las instantáneas. Para darle una idea de los costos, pagamos <$ 10 por mes por el almacenamiento de instantáneas, y tomamos instantáneas diarias, manteniendo los últimos 7 diarios y el valor de los últimos meses de instantáneas semanales, y tenemos 2 servidores que siguen este esquema (~ 20 instantáneas, Discos duros de 20GB).
fuente
¿Qué tal una solución de respaldo barata y económica como Zmanda Cloud Backup? Lo usamos para hacer una copia de seguridad de aproximadamente 6 servidores y 1 servidor SQL y solo cuesta aproximadamente $ 10 por mes. Puede cifrar sus datos con un certificado autofirmado y ellos usan s3 para almacenar los datos (por lo que no hay tarifas de transferencia de datos si realiza una copia de seguridad desde EC2).
fuente