Copia de seguridad Parte 2: revisión y prueba de herramientas de copia de seguridad basadas en rsync

Copia de seguridad Parte 2: revisión y prueba de herramientas de copia de seguridad basadas en rsync
Esta nota continúa

ciclo sobre copia de seguridad

  1. Copia de seguridad, parte 1: Por qué es necesaria la copia de seguridad, una descripción general de los métodos, las tecnologías
  2. Copia de seguridad Parte 2: Revisión y prueba de herramientas de copia de seguridad basadas en rsync
  3. Copia de seguridad Parte 3: revisión y prueba de duplicidad, duplicación, deja dup
  4. Backup Parte 4: Revisión y prueba de zbackup, restic, borgbackup
  5. Copia de seguridad Parte 5: Probando bacula y veeam backup para linux
  6. Copia de seguridad Parte 6: Comparación de herramientas de copia de seguridad
  7. Copia de seguridad Parte 7: Conclusiones

Como ya escribimos en el primer artículo, existe una gran cantidad de programas de copia de seguridad basados ​​en rsync.

De los que mejor se adaptan a 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.

Primer set: 10 GB de archivos multimedia y aproximadamente 50 MB: el código fuente del sitio en PHP, tamaños de archivo desde varios kilobytes para el código fuente hasta decenas de megabytes para archivos multimedia. El objetivo es imitar un sitio estático.

segundo set: 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 respaldo al cambiar el nombre de un directorio.

Tercer set: obtenido del primero eliminando 3 GB de archivos multimedia y agregando nuevos 3 GB 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 se acompaña de un restablecimiento de las cachés del sistema de archivos con los comandos sync и echo 3 > /proc/sys/vm/drop_caches tanto en el lado del servidor de prueba como en el servidor de almacenamiento de respaldo.

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

También creo que el servidor de almacenamiento de respaldo es más lento en términos de procesador que el servidor principal, pero tiene discos más espaciosos con una velocidad de escritura aleatoria relativamente baja, la situación más común durante las copias de seguridad, y debido al hecho de que el servidor de respaldo no debería correctamente, no realizaré un seguimiento de otras tareas excepto la copia de seguridad, su carga mediante netdata.

También cambié los servidores en los que verificaré varios sistemas para realizar copias de seguridad.

Ahora tienen las siguientes características.procesador

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, lectura...

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 x.x.x.x port 59402 connected to y.y.y.y 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. En el servidor de prueba, se prepara un sistema de archivos con el primer conjunto de prueba y, en el servidor de almacenamiento de respaldo, si es necesario, se inicializa el repositorio.
    Se inicia el proceso de copia de seguridad y se mide su tiempo.
  2. En el servidor de prueba, los archivos se migran al segundo conjunto de prueba. Se inicia el proceso de copia de seguridad y se mide su tiempo.
  3. En el servidor de prueba, la migración se realiza hasta el tercer conjunto de prueba. Se inicia el proceso de copia de seguridad y se mide su tiempo.
  4. El tercer conjunto de pruebas resultante se acepta como el nuevo primero; Los pasos 1-3 se repiten 2 veces más.
  5. Los datos se ingresan en una tabla dinámica y se agregan gráficos con datos de red.
  6. Se genera un informe para el método de copia de seguridad individual.

Resultados esperados

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

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

Se utilizará como referencia una ejecución de prueba de rsync normal, sus resultados

estos sonCopia de seguridad Parte 2: revisión y prueba de herramientas de copia de seguridad basadas en rsync

El cuello de botella estaba en el servidor de almacenamiento de datos de respaldo en forma de disco basado en HDD, lo cual es claramente visible en los gráficos en forma de dientes de sierra.

Los datos se copiaron en 4 minutos y 15 segundos.

Prueba de copia de seguridad rdiff

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

Comprobaremos el modo de funcionamiento típico, es decir. El inicio del proceso de copia de seguridad lo inicia el propio cliente y, en el lado del servidor, se inicia un proceso de copia de seguridad que recibe datos.

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

Copia de seguridad Parte 2: revisión y prueba de herramientas de copia de seguridad basadas en rsync

Tiempo de ejecución de cada prueba:

Первый запуск
Segunda carrera
Tercer lanzamiento

Primer set
16m32s
16m26s
16m19s

segundo set
2h5m
2h10m
2h8m

Tercer set
2h9m
2h10m
2h10m

Rdiff-backup reacciona de manera muy dolorosa ante cualquier cambio importante en los datos y tampoco utiliza completamente la red.

prueba de instantáneas

El segundo candidato, rsnapshot, es un script Perl cuyo principal requisito para un funcionamiento eficaz es la compatibilidad con enlaces físicos. Esto ahorra espacio en disco. En este caso, los archivos que no han cambiado desde la copia de seguridad anterior se vincularán al archivo original mediante enlaces físicos.

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

Resultados de la prueba

resultó lo siguienteCopia de seguridad Parte 2: revisión y prueba de herramientas de copia de seguridad basadas en rsync

Первый запуск
Segunda carrera
Tercer lanzamiento

Primer set
4m22s
4m19s
4m16s

segundo set
2m6s
2m10s
2m6s

Tercer set
1m18s
1m10s
1m10s

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

prueba de eructo

Otra opción es una implementación en C además de librsync - burp, que tiene una arquitectura cliente-servidor que incluye autorización del cliente, así como una interfaz web (no incluida en el paquete básico). Otra característica interesante son las copias de seguridad sin recuperación del lado del cliente.

Echemos un vistazo aпроизводительность.

Copia de seguridad Parte 2: revisión y prueba de herramientas de copia de seguridad basadas en rsync

Первый запуск
Segunda carrera
Tercer lanzamiento

Primer set
11m21s
11m10s
10m56s

segundo set
5m37s
5m40s
5m35s

Tercer set
3m33s
3m24s
3m40s

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

resultados

El tamaño de los repositorios para todos los candidatos fue aproximadamente el mismo, es decir, primero creció a 10 GB, luego a 15 GB, luego a 18 GB, etc., lo cual se debe a la peculiaridad de rsync. También vale la pena señalar que todos los candidatos son de un solo subproceso (la carga del procesador es aproximadamente del 50% en una máquina de doble núcleo). Los 3 candidatos ofrecieron la capacidad de restaurar la última copia de seguridad "tal cual", es decir, era posible restaurar archivos sin utilizar ningún programa de terceros, incluidos los utilizados para crear repositorios. Este es también el "legado ancestral" de rsync.

Hallazgos

Cuanto más complejo sea el sistema de respaldo y más capacidades diferentes tenga, más lento funcionará, pero para proyectos no muy exigentes cualquiera de ellos será adecuado, excepto, quizás, rdiff-backup.

anuncio

Esta nota continúa el ciclo sobre el respaldo.

Copia de seguridad, parte 1: Por qué es necesaria la copia de seguridad, una descripción general de los métodos, las tecnologías
Copia de seguridad Parte 2: revisión y prueba de herramientas de copia de seguridad basadas en rsync
Copia de seguridad Parte 3: revisión y prueba de duplicidad, duplicación, deja dup
Backup Parte 4: Revisión y prueba de zbackup, restic, borgbackup
Copia de seguridad Parte 5: Probando bacula y veeam backup para linux
Copia de seguridad Parte 6: Comparación de herramientas de copia de seguridad
Copia de seguridad Parte 7: Conclusiones

autores: Pavel Demkovich

Fuente: habr.com

Añadir un comentario