Copia de seguridad, Parte 1: Propósito, descripción general de técnicas y tecnologías

Copia de seguridad? ¡No necesito respaldo!

¿Por qué necesitas hacer copias de seguridad? Después de todo, el equipo es muy, muy confiable, además, hay "nubes" que son mejores que los servidores físicos en términos de confiabilidad: si está configurado correctamente, el servidor "en la nube" sobrevivirá fácilmente a la falla del servidor físico de la infraestructura, y desde el punto de vista de los usuarios del servicio, habrá un pequeño salto en el tiempo apenas perceptible servicio Además, la duplicación de información a menudo requiere un pago por tiempo de procesador "extra", carga de disco y tráfico de red.

Un programa ideal funciona rápido, no fluye a través de la RAM, no tiene agujeros y no existe.

—Desconocido
Como los desarrolladores de proteínas todavía escriben los programas y el proceso de prueba a menudo está ausente, además la entrega de programas es extremadamente rara con el uso de "mejores prácticas" (que también son programas en sí mismos y, por lo tanto, imperfectos), los administradores de sistemas a menudo tienen que resolver problemas que suenan breve pero sucintamente: "volver como estaba", "devolver la base a su funcionamiento normal", "funciona lentamente, retrocedemos", y también mi favorito "No sé qué, pero arréglenlo".

Además de los errores lógicos que surgen como resultado del trabajo descuidado de los desarrolladores, o una combinación de circunstancias, así como el conocimiento incompleto o la incomprensión de las pequeñas características de los programas de construcción, incluidos los ligantes y los sistemas, incluidos los sistemas operativos, los controladores y el firmware, también hay otros errores. Por ejemplo, la mayoría de los desarrolladores confían en el tiempo de ejecución, olvidando por completo las leyes físicas que aún son imposibles de eludir con la ayuda de los programas. Esto incluye la confiabilidad infinita del subsistema de disco y de cualquier subsistema de almacenamiento de datos en general (¡incluyendo RAM y caché del procesador!), Y tiempo de procesamiento cero en el procesador, y la ausencia de errores durante la transmisión a través de la red y durante el procesamiento en el procesador, y la latencia de la red, que son 0. No descuides la fecha límite notoria, porque si no tienes tiempo para ello, habrá problemas más limpios que los matices de la red y el disco.

Chef, todo se fue! basado en k \ f Diamante mano

¿Pero qué pasa con los problemas que surgen en pleno crecimiento y se ciernen sobre datos valiosos? No hay nada que reemplace a los desarrolladores en vivo, y no el hecho de que será posible en el futuro cercano. Por otro lado, para demostrar completamente que el programa funcionará según lo previsto, hasta ahora solo unos pocos proyectos han tenido éxito, y no es posible tomar y aplicar la evidencia a otros proyectos similares. Además, dicha evidencia lleva mucho tiempo y requiere habilidades y conocimientos especiales, y esto prácticamente minimiza la posibilidad de que su aplicación tenga en cuenta los plazos. Además, todavía no sabemos cómo utilizar tecnología ultrarrápida, barata e infinitamente confiable para almacenar, procesar y transmitir información. Tales tecnologías, si existen, entonces en forma de conceptos, o, con mayor frecuencia, solo en libros y películas de ciencia ficción.
Los buenos artistas copian, los grandes artistas roban.

—Pablo Picasso.
Las soluciones más exitosas y las cosas sorprendentemente simples generalmente suceden donde hay absolutamente incompatibles, a primera vista, conceptos, tecnologías, conocimiento, campos de la ciencia.

Por ejemplo, las aves y los aviones tienen alas, pero a pesar de la similitud funcional: el principio de funcionamiento en algunos modos es el mismo, y los problemas técnicos se resuelven de manera similar: huesos huecos, el uso de materiales fuertes y livianos, etc., los resultados son completamente diferentes, aunque muy similar Las mejores muestras que observamos en nuestra tecnología también se toman principalmente de la naturaleza: compartimentos herméticos en barcos y submarinos, una analogía directa con los anélidos; construir matrices de incursiones y verificar la integridad de los datos: duplicación de la cadena de ADN; Además de los órganos emparejados, la independencia del trabajo de varios órganos del sistema nervioso central (función automática del corazón) y los reflejos son sistemas autónomos en Internet. Por supuesto, tomar y aplicar soluciones preparadas "de frente" está lleno de problemas, pero quién sabe, tal vez no haya otras soluciones.
¡Si supiera dónde caerías, pondría pajitas!

—Proverbio bielorruso
Por lo tanto, las copias de seguridad son vitales para quienes desean:

  • Para poder restaurar el funcionamiento de sus sistemas con un tiempo de inactividad mínimo, o incluso sin ellos
  • Siéntase libre de actuar, porque en caso de error siempre existe la posibilidad de una reversión
  • Minimizar los efectos de la corrupción intencional de datos.

Aquí hay un poco de teoría
Cualquier clasificación es arbitraria. La naturaleza no clasifica. Clasificamos, porque es más conveniente para nosotros. Y clasificamos de acuerdo con los datos, que también tomamos arbitrariamente.

—Jan Bruler
Independientemente del método de almacenamiento físico, el almacenamiento lógico de datos se puede dividir en 2 formas de acceder a estos datos: bloque y archivo. Esta división recientemente ha sido muy borrosa, porque no existen almacenamientos lógicos puramente en bloque, así como simplemente en archivos. Sin embargo, por simplicidad, asumimos que lo son.

El almacenamiento en bloque de datos implica que hay un dispositivo físico donde los datos se registran en algunas partes fijas, bloques. El acceso a los bloques va a una determinada dirección, cada bloque tiene su propia dirección dentro del dispositivo.

Una copia de seguridad generalmente se realiza copiando bloques de datos. Para garantizar la integridad de los datos en el momento de la copia, se suspende la grabación de nuevos bloques, así como la modificación de los existentes. Si tomamos una analogía del mundo ordinario, el armario más cercano está con las mismas celdas numeradas.

Bloquear almacenamiento de datos

El almacenamiento de archivos de datos por el principio de un dispositivo lógico está cerca del bloqueo de almacenamiento y a menudo se organiza en la parte superior. Las diferencias importantes son la existencia de una jerarquía de almacenamiento y nombres legibles por humanos. La abstracción se resalta en forma de un archivo, un área de datos con nombre, así como un directorio, un archivo especial en el que se almacenan las descripciones y los accesos a otros archivos. Los archivos se pueden suministrar con metadatos adicionales: tiempo de creación, indicadores de acceso, etc. Por lo general, realizan una copia de seguridad de esta manera: buscan los archivos modificados, luego los copian a otro almacenamiento de archivos con la misma estructura. La integridad de los datos generalmente se implementa por la ausencia de los archivos en los que se está escribiendo. Los metadatos del archivo se respaldan de manera similar. La analogía más cercana es la biblioteca, que tiene secciones con diferentes libros, así como un catálogo con nombres de libros legibles por humanos.

Almacenamiento de datos de archivos

Recientemente, a veces se describe otra opción, con la cual, en principio, comenzó el almacenamiento de archivos de datos, y que tiene las mismas características arcaicas: almacenamiento de datos de objetos.

Se diferencia del almacenamiento de archivos en que no tiene más de un anidamiento (diseño plano), y los nombres de los archivos, aunque son legibles por humanos, son más adecuados para el procesamiento por máquinas. Al realizar una copia de seguridad, los almacenes de objetos se tratan con mayor frecuencia como almacenamientos de archivos, pero ocasionalmente hay otras opciones.
- Hay dos tipos de administradores del sistema, los que no hacen copias de seguridad y los que ya lo hacen.
- En realidad, hay tres tipos: también hay quienes verifican que se pueden restaurar las copias de seguridad.

—Desconocido
También vale la pena entender que el proceso de copia de seguridad de los datos lo llevan a cabo los programas, por lo que tiene las mismas desventajas que otro programa. Para eliminar (¡no excluir!) La dependencia del factor humano, así como las características, que individualmente no influyen fuertemente, pero juntas pueden dar un efecto tangible, aplican el llamado regla 3-2-1. Hay muchas opciones para descifrarlo, pero prefiero la siguiente interpretación: debe almacenar 3 conjuntos de los mismos datos, 2 conjuntos deben almacenarse en diferentes formatos y 1 conjunto debe almacenarse en un almacenamiento geográficamente remoto.

El formato de almacenamiento debe entenderse de la siguiente manera:

  • Si hay una dependencia del método de almacenamiento físico, cambiamos el método físico.
  • Si existe una dependencia del método de almacenamiento lógico, cambiamos el método lógico.

Para lograr el máximo efecto de la regla 3-2-1, se recomienda cambiar el formato de almacenamiento en ambos sentidos.

Desde el punto de vista de la preparación de la copia de seguridad para su propósito previsto: la restauración de la operatividad, existen copias de seguridad "en caliente" y "en frío". El calor del frío difiere solo en una cosa: están listos para trabajar de inmediato, mientras que el frío para la recuperación requiere algunas acciones adicionales: descifrado, extracción del archivo, etc.

No confunda las copias en caliente y en frío con las copias en línea y fuera de línea, que implican el aislamiento físico de los datos y, de hecho, son otra señal de la clasificación de los métodos de copia de seguridad. Por lo tanto, una copia sin conexión, que no está conectada directamente al sistema donde debe restaurarse, puede estar caliente o fría (en términos de preparación para la recuperación). Una copia en línea puede estar disponible directamente donde necesita ser restaurada, y la mayoría de las veces hace calor, pero también hay copias frías.

Además, no olvide que el proceso de creación de copias de seguridad generalmente no termina con la creación de una sola copia de seguridad, y puede haber bastantes copias. Por lo tanto, es necesario distinguir entre copias de seguridad completas, es decir aquellos que son recuperables independientemente de otras copias de seguridad, así como copias diferenciales (incrementales, diferenciales, decrementales, etc.): aquellas que no se pueden restaurar de forma independiente y requieren la restauración preliminar de una o más copias de seguridad adicionales.

Copias de seguridad incrementales diferenciales: un intento de ahorrar la cantidad de espacio para almacenar copias de seguridad. Por lo tanto, solo los datos modificados de la copia de seguridad anterior se escriben en la copia de seguridad.

Los decrementos de diferencia se crean con el mismo propósito, pero de una manera ligeramente diferente: se realiza una copia de seguridad completa, pero solo se almacena la diferencia entre la copia nueva y la anterior.

Por separado, vale la pena considerar el proceso de copia de seguridad en la parte superior del almacenamiento, que admite la ausencia de almacenamiento duplicado. Por lo tanto, si escribe copias de seguridad completas encima, solo se registrará la diferencia entre las copias de seguridad, sin embargo, el proceso de restauración de copias de seguridad será similar al de una copia completa y completamente transparente.

Quis custodiet ipsos custodes?

(¿Quién cuidará a los vigilantes ellos mismos? - lat.)


Es muy desagradable cuando no hay copias de seguridad, pero es mucho peor si la copia de seguridad parece estar hecha, pero durante la restauración resulta que no se puede restaurar, porque:

  • Se ha violado la integridad de los datos de origen.
  • El almacenamiento de respaldo está dañado.
  • La recuperación funciona muy lentamente, no puede usar datos que se hayan restaurado parcialmente.


Un proceso de copia de seguridad correctamente construido debe tener en cuenta dichos comentarios, especialmente los dos primeros.

La integridad de los datos de origen se puede garantizar de varias maneras. Los más utilizados son: a) crear instantáneas del sistema de archivos a nivel de bloque, b) congelar el estado del sistema de archivos, c) un dispositivo de bloque especial con almacenamiento de versiones, d) grabación secuencial de archivos o bloques. Las sumas de verificación también se utilizan para garantizar la verificación de datos durante la recuperación.

El daño al almacenamiento también se puede detectar mediante sumas de verificación. Un método adicional es el uso de dispositivos especializados o sistemas de archivos en los que es imposible modificar datos ya grabados, pero puede agregar otros nuevos.

Para acelerar la recuperación, la recuperación de datos se utiliza con varios procesos de recuperación, siempre que no haya un "cuello de botella" en forma de una red lenta o un sistema de disco lento. Para sortear la situación con datos parcialmente restaurados, es posible dividir el proceso de copia de seguridad en subtareas relativamente pequeñas, cada una de las cuales se realiza por separado. Por lo tanto, se hace posible restaurar constantemente el rendimiento con la predicción del tiempo de recuperación. Este problema a menudo se encuentra en el plano organizacional (SLA), por lo que no nos detendremos en esto en detalle.

Sabe mucho acerca de las especias, no el que las agrega a cada plato, sino el que nunca agrega nada superfluo.

—B. Sinyavsky


La práctica con respecto al software utilizado por los administradores del sistema puede variar, pero los principios generales siguen siendo los mismos, de una forma u otra, en particular:

  • Las soluciones preparadas son muy recomendables.
  • Los programas deberían funcionar de manera predecible, es decir No debe haber características indocumentadas o cuellos de botella.
  • La configuración de cada programa debe ser lo suficientemente simple como para que no tenga que leer el manual o la hoja de trucos cada vez.
  • La solución debe ser universal, si es posible. Los servidores en sus especificaciones de hardware pueden variar muy, muy.


Los siguientes programas comunes están disponibles para eliminar copias de seguridad de dispositivos de bloque:

  • dd, familiar para los veteranos de la administración del sistema, también se aplican programas similares aquí (el mismo dd_rescue, por ejemplo).
  • Utilidades (utilidades) integradas en algunos sistemas de archivos que crean un volcado del sistema de archivos.
  • Utilidades omnívoras; por ejemplo, clon parcial.
  • Decisiones propias, a menudo patentadas; por ejemplo, NortonGhost y versiones posteriores.


Para los sistemas de archivos, la tarea de copia de seguridad se resuelve parcialmente utilizando métodos aplicables a dispositivos de bloque, sin embargo, el problema se puede resolver de manera más eficiente, utilizando, por ejemplo:

  • Rsync, un programa y protocolo universal para sincronizar el estado de los sistemas de archivos.
  • Herramientas de archivo integradas (ZFS).
  • Herramientas de archivo de terceros; El representante más popular es el alquitrán. Hay otros, por ejemplo, que reemplazan el alquitrán con un enfoque en los sistemas modernos.

Por separado, vale la pena mencionar el software de coherencia de datos al crear copias de seguridad. Las opciones más utilizadas son:

  • Montar el sistema de archivos en modo de solo lectura (solo lectura) o congelar el sistema de archivos (congelar): el método es limitado.
  • Crear instantáneas del estado de un sistema de archivos o dispositivo de bloque (LVM, ZFS).
  • El uso de herramientas de terceros para organizar elenco, incluso en los casos en que los párrafos anteriores no se pueden proporcionar por cualquier motivo (programas como hotcopy).
  • La técnica de copia en cambio (CopyOnWrite), sin embargo, a menudo está vinculada al FS utilizado (BTRFS, ZFS).


Por lo tanto, para un servidor pequeño, debe proporcionar un esquema de respaldo que cumpla con los siguientes requisitos:

  • Fácil de usar: no se requieren pasos adicionales especiales al trabajar, pasos mínimos para crear y restaurar copias.
  • Universal: funciona en servidores grandes y pequeños; Esto es importante al aumentar el número de servidores o al escalar.
  • Es instalado por el administrador de paquetes, o en uno o dos comandos del tipo "descargar y descomprimir".
  • Estable: utiliza un formato de almacenamiento estándar o de larga data.
  • Rápido en el trabajo.

Solicitantes de quienes más o menos cumplen con los requisitos:

  • rdiff-backup
  • rsnapshot
  • eructo
  • duplicati
  • duplicidad
  • deja dup
  • dar
  • zbackup
  • restic
  • borgbackup

Cama Procrustean

Se utilizará una máquina virtual (basada en XenServer) con las siguientes características como banco de pruebas:

  • 4 núcleos a 2.5 GHz,
  • 16 GB de RAM
  • Almacenamiento híbrido de 50 GB (almacenamiento con almacenamiento en caché en SSD al 20% del tamaño del disco virtual) como un disco virtual separado sin particiones,
  • Canal de Internet de 200 Mbps.

Se usará casi la misma máquina que el servidor de destino de respaldo, solo con un disco duro de 500 GB.

Sistema operativo - Centos 7 x64: el desglose es estándar, se utilizará una partición adicional como fuente de datos.

Tomemos un sitio de wordpress como fuente de datos, con archivos multimedia de 40 GB, una base de datos mysql. Dado que los servidores virtuales varían mucho en características, así como para una mejor reproducibilidad, hay

resultados de la prueba del servidor utilizando sysbench.
sysbench --threads = 4 --time = 30 --cpu-max-prime = 20,000 cpu run
sysbench 1.1.0-18a9f86 (usando el paquete LuaJIT 2.1.0-beta3)
Ejecutando la prueba con las siguientes opciones:
Número de hilos: 4
Inicializando el generador de números aleatorios desde la hora actual

Límite de números primos: 20,000

Inicializando subprocesos de trabajo ...

¡Hilos comenzados!

Velocidad de la CPU:
eventos por segundo: 836.69

Rendimiento:
eventos / s (eps): 836.6908
tiempo transcurrido: 30.0039s
cantidad total de eventos: 25104

Latencia (ms):
min: 2.38
promedio: 4.78
max: 22,39
Percentil 95: 10.46
suma: 119923.64

Hilos de equidad:
eventos (avg / stddev): 6276.0000 / 13.91
tiempo de ejecución (avg / stddev): 29.9809 / 0.01

sysbench --threads = 4 --time = 30 --memory-block-size = 1K --memory-scope = global --memory-total-size = 100G --memory-oper = leer memoria ejecutada
sysbench 1.1.0-18a9f86 (usando el paquete LuaJIT 2.1.0-beta3)
Ejecutando la prueba con las siguientes opciones:
Número de hilos: 4
Inicializando el generador de números aleatorios desde la hora actual

Ejecución de prueba de velocidad de memoria con las siguientes opciones:
tamaño de bloque: 1 KB
tamaño total: 102400MiB
operación: leer
alcance: global

Inicializando subprocesos de trabajo ...

¡Hilos comenzados!

Operaciones totales: 50900446 (1696677.10 por segundo)

49707.47 MiB transferido (1656.91 MiB / seg)

Rendimiento:
eventos / s (eps): 1696677.1017
tiempo transcurrido: 30,0001s
cantidad total de eventos: 50900446

Latencia (ms):
min: 0.00
promedio: 0.00
max: 24.01
Percentil 95: 0.00
suma: 39106.74

Hilos de equidad:
eventos (avg / stddev): 12725111.5000 / 137775.15
tiempo de ejecución (avg / stddev): 9.7767 / 0.10

sysbench --threads = 4 --time = 30 --memory-block-size = 1K --memory-scope = global --memory-total-size = 100G --memory-oper = memoria de escritura
sysbench 1.1.0-18a9f86 (usando el paquete LuaJIT 2.1.0-beta3)
Ejecutando la prueba con las siguientes opciones:
Número de hilos: 4
Inicializando el generador de números aleatorios desde la hora actual

Ejecución de prueba de velocidad de memoria con las siguientes opciones:
tamaño de bloque: 1 KB
tamaño total: 102400MiB
operación: escribir
alcance: global

Inicializando subprocesos de trabajo ...

¡Hilos comenzados!

Operaciones totales: 35910413 (1197008.62 por segundo)

35068.76 MiB transferido (1168.95 MiB / seg)

Rendimiento:
eventos / s (eps): 1197008.6179
tiempo transcurrido: 30,0001s
cantidad total de eventos: 35910413

Latencia (ms):
min: 0.00
promedio: 0.00
max: 16.90
Percentil 95: 0.00
suma: 43604.83

Hilos de equidad:
eventos (avg / stddev): 8977603.2500 / 233905.84
tiempo de ejecución (avg / stddev): 10.9012 / 0.41

sysbench --threads = 4 --file-test-mode = rndrw --time = 60 --file-block-size = 4K --file-total-size = 1G fileio run
sysbench 1.1.0-18a9f86 (usando el paquete LuaJIT 2.1.0-beta3)
Ejecutando la prueba con las siguientes opciones:
Número de hilos: 4
Inicializando el generador de números aleatorios desde la hora actual

Banderas adicionales para abrir archivos: (ninguna)
128 archivos, 8MiB cada uno
Tamaño total de archivo de 1GiB
Tamaño de bloque 4KiB
Número de solicitudes IO: 0
Relación lectura / escritura para prueba de E / S aleatoria combinada: 1.50
Periódico FSYNC habilitado, llamando a fsync () cada 100 solicitudes.
Llamar a fsync () al final de la prueba, habilitado.
Usar el modo de E / S sincrónico
Hacer una prueba aleatoria de r / w
Inicializando subprocesos de trabajo ...

¡Hilos comenzados!

Rendimiento:
leer: IOPS = 3868.21 15.11 MiB / s (15.84 MB / s)
escribir: IOPS = 2578.83 10.07 MiB / s (10.56 MB / s)
fsync: IOPS = 8226.98

Latencia (ms):
min: 0.00
promedio: 0.27
max: 18.01
Percentil 95: 1.08
suma: 238469.45

Esta nota comienza a lo grande



: Finnix

Source: https://habr.com/ru/post/449282/


All Articles