Copia de seguridad, Parte 2: Descripción general y prueba de herramientas de copia de seguridad basadas en rsync


Este articulo continua


Como ya escribimos en el primer artículo, hay una gran cantidad de programas de respaldo basados ​​en rsync.

De los que son más adecuados para nuestras condiciones, consideraré 3: rdiff-backup, rsnapshot y burp.

Conjuntos de archivos de prueba


Los conjuntos de archivos de prueba serán los mismos para todos los candidatos, incluidos los artículos futuros.

El primer conjunto : 10 GB de archivos multimedia y aproximadamente 50 MB: el código fuente del sitio en php, tamaños de archivo desde unos pocos kilobytes para el código fuente, hasta decenas de megabytes para archivos multimedia. El objetivo es simular un sitio con estadísticas.

El segundo conjunto : obtenido del primero al cambiar el nombre de un subdirectorio con archivos multimedia de 5 GB. El objetivo es estudiar el comportamiento del sistema de copia de seguridad al cambiar el nombre de un directorio.

Tercer conjunto : obtenido del primero eliminando 3GB de archivos multimedia y agregando nuevos 3GB de archivos multimedia. El objetivo es estudiar el comportamiento del sistema de respaldo durante una operación típica de actualización del sitio.

Obteniendo resultados


Cualquier copia de seguridad se realiza al menos 3 veces y va acompañada de un restablecimiento de las memorias caché del sistema de archivos con los echo 3 > /proc/sys/vm/drop_caches sync y echo 3 > /proc/sys/vm/drop_caches tanto en el servidor de prueba como en el servidor de almacenamiento de copia de seguridad.

En el servidor que será la fuente de las copias de seguridad, se instala un software de monitoreo: netdata, con el que se calculará la carga en el servidor durante la copia de seguridad, esto es necesario para evaluar la carga en el servidor mediante el proceso de copia de seguridad.

También creo que el servidor de almacenamiento de respaldo es más lento que el servidor principal, pero tiene discos más potentes con una velocidad de escritura aleatoria relativamente baja, la situación más común cuando se realiza una copia de respaldo, y debido al hecho de que el servidor de respaldo no debería hacer nada bueno No monitorearé la carga que no sea una copia de seguridad, no monitorearé su carga usando netdata.

Además, mis servidores han cambiado, en los cuales revisaré varios sistemas para realizar copias de seguridad.

Ahora tienen las siguientes características
CPU

 sysbench --threads=2 --time=30 --cpu-max-prime=20000 cpu run sysbench 1.0.17 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 2 Initializing random number generator from current time Prime numbers limit: 20000 Initializing worker threads... Threads started! CPU speed: events per second: 1081.62 General statistics: total time: 30.0013s total number of events: 32453 Latency (ms): min: 1.48 avg: 1.85 max: 9.84 95th percentile: 2.07 sum: 59973.40 Threads fairness: events (avg/stddev): 16226.5000/57.50 execution time (avg/stddev): 29.9867/0.00 

RAM, leyendo ...

 sysbench --threads=4 --time=30 --memory-block-size=1K --memory-scope=global --memory-total-size=100G --memory-oper=read memory run sysbench 1.0.17 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 4 Initializing random number generator from current time Running memory speed test with the following options: block size: 1KiB total size: 102400MiB operation: read scope: global Initializing worker threads... Threads started! Total operations: 104857600 (5837637.63 per second) 102400.00 MiB transferred (5700.82 MiB/sec) General statistics: total time: 17.9540s total number of events: 104857600 Latency (ms): min: 0.00 avg: 0.00 max: 66.08 95th percentile: 0.00 sum: 18544.64 Threads fairness: events (avg/stddev): 26214400.0000/0.00 execution time (avg/stddev): 4.6362/0.12 

... y grabando

 sysbench --threads=4 --time=30 --memory-block-size=1K --memory-scope=global --memory-total-size=100G --memory-oper=write memory run sysbench 1.0.17 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 4 Initializing random number generator from current time Running memory speed test with the following options: block size: 1KiB total size: 102400MiB operation: write scope: global Initializing worker threads... Threads started! Total operations: 91414596 (3046752.56 per second) 89272.07 MiB transferred (2975.34 MiB/sec) General statistics: total time: 30.0019s total number of events: 91414596 Latency (ms): min: 0.00 avg: 0.00 max: 1022.90 95th percentile: 0.00 sum: 66430.91 Threads fairness: events (avg/stddev): 22853649.0000/945488.53 execution time (avg/stddev): 16.6077/1.76 

Disco en el servidor de origen de datos

 sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio run sysbench 1.0.17 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 4 Initializing random number generator from current time Extra file open flags: (none) 128 files, 8MiB each 1GiB total file size Block size 4KiB Number of IO requests: 0 Read/Write ratio for combined random IO test: 1.50 Periodic FSYNC enabled, calling fsync() each 100 requests. Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random r/w test Initializing worker threads... Threads started! File operations: reads/s: 4587.95 writes/s: 3058.66 fsyncs/s: 9795.73 Throughput: read, MiB/s: 17.92 written, MiB/s: 11.95 General statistics: total time: 60.0241s total number of events: 1046492 Latency (ms): min: 0.00 avg: 0.23 max: 14.45 95th percentile: 0.94 sum: 238629.34 Threads fairness: events (avg/stddev): 261623.0000/1849.14 execution time (avg/stddev): 59.6573/0.00 

Disco en el servidor de almacenamiento de respaldo

 sysbench --threads=4 --file-test-mode=rndrw --time=60 --file-block-size=4K --file-total-size=1G fileio run sysbench 1.0.17 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 4 Initializing random number generator from current time Extra file open flags: (none) 128 files, 8MiB each 1GiB total file size Block size 4KiB Number of IO requests: 0 Read/Write ratio for combined random IO test: 1.50 Periodic FSYNC enabled, calling fsync() each 100 requests. Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random r/w test Initializing worker threads... Threads started! File operations: reads/s: 11.37 writes/s: 7.58 fsyncs/s: 29.99 Throughput: read, MiB/s: 0.04 written, MiB/s: 0.03 General statistics: total time: 73.8868s total number of events: 3104 Latency (ms): min: 0.00 avg: 78.57 max: 3840.90 95th percentile: 297.92 sum: 243886.02 Threads fairness: events (avg/stddev): 776.0000/133.26 execution time (avg/stddev): 60.9715/1.59 

Velocidad de red entre servidores

 iperf3 -c backup Connecting to host backup, port 5201 [ 4] local xxxx port 59402 connected to yyyy port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 419 MBytes 3.52 Gbits/sec 810 182 KBytes [ 4] 1.00-2.00 sec 393 MBytes 3.30 Gbits/sec 810 228 KBytes [ 4] 2.00-3.00 sec 378 MBytes 3.17 Gbits/sec 810 197 KBytes [ 4] 3.00-4.00 sec 380 MBytes 3.19 Gbits/sec 855 198 KBytes [ 4] 4.00-5.00 sec 375 MBytes 3.15 Gbits/sec 810 182 KBytes [ 4] 5.00-6.00 sec 379 MBytes 3.17 Gbits/sec 765 228 KBytes [ 4] 6.00-7.00 sec 376 MBytes 3.15 Gbits/sec 810 180 KBytes [ 4] 7.00-8.00 sec 379 MBytes 3.18 Gbits/sec 765 253 KBytes [ 4] 8.00-9.00 sec 380 MBytes 3.19 Gbits/sec 810 239 KBytes [ 4] 9.00-10.00 sec 411 MBytes 3.44 Gbits/sec 855 184 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 3.78 GBytes 3.25 Gbits/sec 8100 sender [ 4] 0.00-10.00 sec 3.78 GBytes 3.25 Gbits/sec receiver 


Metodología de prueba


  1. Se prepara un sistema de archivos con el primer conjunto de prueba en el servidor de prueba, y el repositorio se inicializa en el servidor de almacenamiento de respaldo si es necesario.
    El proceso de respaldo comienza y se mide su tiempo.
  2. Los archivos se migran al segundo conjunto de pruebas en el servidor de prueba. El proceso de respaldo comienza y se mide su tiempo.
  3. El servidor de prueba migra al tercer conjunto de pruebas. El proceso de respaldo comienza y se mide su tiempo.
  4. El nuevo conjunto de pruebas resultante es aceptado por el nuevo primero; los puntos 1-3 se repiten 2 veces más.
  5. Los datos se ingresan en la tabla dinámica, se agregan gráficos con netdata.
  6. Se prepara un informe utilizando un método de copia de seguridad separado.

Resultados esperados


Dado que los 3 candidatos se basan en la misma tecnología (rsync), se espera que los resultados se aproximen al rsync habitual, incluidas todas sus ventajas, a saber:

  1. Los archivos en el repositorio se almacenarán "tal cual".
  2. El tamaño del repositorio crecerá solo incluyendo la diferencia entre las copias de seguridad.
  3. Habrá una carga relativamente grande en la red al transmitir datos, así como una pequeña carga en el procesador.

La ejecución de prueba de un rsync regular se usará como referencia, sus resultados

estos son


El cuello de botella se encontraba en el servidor de almacenamiento de respaldo en forma de disco basado en HDD, que es claramente visible en los gráficos en forma de sierra.

Los datos se copiaron en 4 minutos y 15 segundos.


Prueba de rdiff-backup


El primer candidato es rdiff-backup, un script de Python que realiza una copia de seguridad de un directorio en otro. Al mismo tiempo, la copia de seguridad actual se almacena "tal cual", y las copias de seguridad realizadas anteriormente se almacenan en un subdirectorio especial de forma incremental, y por lo tanto se ahorra espacio.

Comprobaremos el modo típico de operación, es decir El cliente inicia el proceso de copia de seguridad por sí mismo y, en el lado del servidor, el proceso que recibe los datos se inicia para la copia de seguridad.

Vamos a ver
¿De qué es capaz en nuestras condiciones?
.



El tiempo de ejecución de cada prueba:

Primer lanzamientoSegundo lanzamientoTercer lanzamiento
Primer set16m32s16m26s16m19s
Segundo set2h5m2h10m2h8m
Tercer set2h9m2h10m2h10m


Rdiff-backup reacciona muy dolorosamente a cualquier gran cambio de datos, y tampoco utiliza completamente la red.

Prueba de rsnapshot


El segundo candidato, rsnapshot, es un script perl cuyo principal requisito para un trabajo efectivo es el soporte para enlaces duros. Esto ahorra espacio en disco. Al mismo tiempo, los archivos que no han cambiado desde la copia de seguridad anterior se referenciarán al archivo original mediante enlaces duros.

La lógica del proceso de copia de seguridad también se invierte: el servidor "camina" activamente sobre sus propios clientes y toma datos.

Resultados de la prueba

lo siguiente


Primer lanzamientoSegundo lanzamientoTercer lanzamiento
Primer set4 min 22 s4 min 19 s4 min 16 s
Segundo set2m6s2m10s2m6s
Tercer set1 min 18 s1m10s1m10s

Funcionó muy, muy rápido, mucho más rápido que rdiff-backup y muy cerca de rsync puro.

Prueba de eructos


Otra opción es la implementación de C sobre librsync - burp, que tiene una arquitectura cliente-servidor que incluye la autorización del cliente, así como una interfaz web (no incluida en el paquete base). Otra característica interesante es la copia de seguridad sin el derecho de recuperación de los clientes.

Veamos
rendimiento
.



Primer lanzamientoSegundo lanzamientoTercer lanzamiento
Primer set11 min 21 s11m10s10m56s
Segundo set5 min 37 s5m40s5m35s
Tercer set3m33s3 min 24 s3m40s

Funcionó 2 veces más lento que rsnapshot, pero también bastante rápido, y ciertamente más rápido rdiff-backup. Los gráficos son un poco de diente de sierra: el rendimiento nuevamente descansa en el subsistema de disco del servidor de almacenamiento de respaldo, aunque esto no es tan pronunciado como el de rsnapshot.

Resultados


El tamaño de los repositorios para todos los candidatos fue aproximadamente el mismo, es decir, en un primer crecimiento de hasta 10 GB, luego un crecimiento de hasta 15 GB, luego un crecimiento de hasta 18 GB, etc., debido a la peculiaridad de rsync. También vale la pena señalar el enhebrado único de todos los candidatos (la utilización de la CPU es de aproximadamente el 50% con una máquina de doble núcleo). Los 3 candidatos brindaron la oportunidad de restaurar la última copia de seguridad "tal cual", es decir, fue posible restaurar archivos sin usar ningún programa de terceros, incluidos los utilizados para crear repositorios. Este es también el "legado genérico" de rsync.

Conclusiones


Cuanto más complejo sea el sistema de respaldo y más características diferentes tenga, más lento funcionará, pero para proyectos no muy exigentes, ninguno de ellos lo hará, excepto, posiblemente, rdiff-backup.

Anuncio


Esta nota continúa el ciclo de respaldo.

Copia de seguridad, parte 1: ¿Por qué necesita una copia de seguridad, una descripción general de los métodos y las tecnologías?
Copia de seguridad, Parte 2: Descripción general y prueba de herramientas de copia de seguridad basadas en rsync
Copia de seguridad, Parte 3: Descripción general y prueba de duplicidad, duplicación
Copia de seguridad, Parte 4: Descripción general y prueba de zbackup, restic, borgbackup
Backup, Parte 5: Prueba de Bacula y Veeam Backup para Linux
Copia de seguridad: parte solicitada por los lectores: revisión de AMANDA, UrBackup, BackupPC
Copia de seguridad, Parte 6: Comparación de herramientas de copia de seguridad
Copia de seguridad Parte 7: Conclusiones

Publicado por Finnix

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


All Articles