Tengo varias máquinas virtuales Xen que se ejecutan en varios servidores Linux. Estas máquinas virtuales almacenan sus imágenes de disco en volúmenes Linux LVM con nombres de dispositivos en la línea de / dev / xenVG / SERVER001OS y así sucesivamente. Me gustaría realizar copias de seguridad periódicas de esas imágenes de disco para poder restaurar las máquinas virtuales en caso de que lo necesitemos (los dispositivos LVM ya están reflejados con DRBD entre dos máquinas físicas cada uno, solo estoy siendo más paranoico aquí).
¿Cómo hago esto? Obviamente, el primer paso es tomar una instantánea del dispositivo LVM, pero ¿cómo transfiero los datos a un servidor de respaldo de la manera más eficiente posible? Simplemente podría copiar todo el dispositivo, algo como:
dd if=/dev/xenVG/SERVER001OS | ssh administrator@backupserver "dd of=/mnt/largeDisk/SERVER001OS.img"
... pero eso requeriría mucho ancho de banda. ¿Existe una herramienta similar a rsync para sincronizar contenidos de bloques de disco enteros entre servidores remotos? Algo como:
rsync /dev/xenVG/SERVER001OS backupServer:/mnt/largeDisk/SERVER001OS.img
Si entiendo la página de manual de rsync correctamente, el comando anterior no funcionará realmente (¿verdad?), Pero muestra lo que estoy buscando. Entiendo que la opción --devices rsync es copiar los dispositivos ellos mismos, no el contenido de esos dispositivos. Hacer una copia local de la imagen de VM antes de sincronizarlo con el servidor remoto no es una opción, ya que no hay espacio en disco.
¿Existe alguna utilidad útil que pueda sincronizarse entre dispositivos de bloque y un archivo de respaldo en un servidor remoto? Puedo escribir uno si es necesario, pero una solución existente sería mejor. ¿Me he perdido una opción rsync que hace esto por mí?
Aunque hay parches de 'dispositivo de escritura' y 'dispositivo de copia' para RSync, solo funcionan bien en imágenes pequeñas (1-2GB). RSync pasará años buscando bloques coincidentes en imágenes más grandes y es casi inútil con dispositivos / archivos de 40 GB o más.
Usamos lo siguiente para realizar una comparación de suma de verificación por 1MB y luego simplemente copiamos el contenido si no coincide. Usamos esto para respaldar servidores en un host virtual en los EE. UU. En un sistema de respaldo en el Reino Unido, a través de Internet público. Muy poca actividad de la CPU y el impacto en el rendimiento de la instantánea es solo después de horas:
Crear instantánea:
Siembra inicial:
Copia de seguridad nocturna incremental (solo envía bloques modificados):
Eliminar instantánea:
fuente
read ARGV,$buf,1024
lugar deread STDIN,$buf,1024
@ sysadmin1138? (Estoy tratando de responder a stackoverflow.com/q/22693823/2987828 y no entiendo ARGV aquí). Uso todos los días la variante en la pregunta stackoverflow.com/q/22693823/2987828 y funciona bien.A las personas interesadas en hacer esto específicamente con instantáneas LVM les puede gustar mi herramienta lvmsync , que lee la lista de bloques modificados en una instantánea y envía solo esos cambios.
fuente
Eche un vistazo a Zumastor Linux Storage Project , implementa una copia de seguridad de "instantánea" utilizando "rsync" binario a través de la herramienta ddsnap .
Desde la página del manual:
ddsnap proporciona la replicación de dispositivos de bloque dada una instalación de instantáneas a nivel de bloque capaz de almacenar múltiples instantáneas simultáneas de manera eficiente. ddsnap puede generar una lista de fragmentos de instantáneas que difieren entre dos instantáneas y luego enviar esa diferencia por cable. En un servidor posterior, escriba los datos actualizados en un dispositivo de bloque capturado.
fuente
Hay un script de Python llamado blocksync, que es una manera simple de sincronizar dos dispositivos de bloque a través de una red a través de ssh, solo transfiriendo los cambios.
Recientemente lo pirateé para limpiarlo y cambiarlo para usar el mismo algoritmo de suma de comprobación rápida que rsync ( Adler-32 ).
fuente
Si está tratando de minimizar la cantidad de espacio vacío que enviaría a través del cable con un plano
dd
, ¿no podría simplemente conectarlo a gzip antes de conectarlo a ssh?por ejemplo, dd if = / dev / xenVG / SERVER001OS | gzip | administrador ssh @ servidor de respaldo "dd of = / mnt / largeDisk / SERVER001OS.img.gz"
fuente
Solo tenga en cuenta que el rendimiento de un sistema que tiene instantáneas LVM es proporcional al número de instantáneas.
Por ejemplo, rendimiento Mysql con instantáneas lvm
fuente
Además de la respuesta de David Herselman, el siguiente script se sincronizará con un dispositivo local:
Hasta donde yo sé, ambos scripts se publicaron por primera vez en lists.samba.org .
fuente
Esta es una vieja pregunta, pero nadie mencionó dos herramientas muy útiles para sincronizar eficientemente dos dispositivos de bloque:
bdsync , que utiliza un enfoque de transferencia y parche de diferencias;
blocksync (aquí puede encontrar mi versión mejorada ), que utiliza un enfoque de reescritura en el lugar.
Recomiendo jugar con ambas herramientas y seleccionar la que mejor se adapte a su uso previsto.
fuente
Después de buscar durante varios años, recientemente creé una herramienta para sincronizar instantáneas LVM entre servidores. Está diseñado para usar un IO mínimo y permitir que los sistemas se ejecuten mientras se produce la sincronización.
Es similar al envío / recepción de ZFS, ya que sincroniza las diferencias entre las instantáneas LVM y utiliza el aprovisionamiento delgado para que el impacto en el rendimiento sea mínimo.
Me gustaría recibir comentarios, así que por favor eche un vistazo.
fuente
Hubo algunas eficiencias que se hicieron a este script:
fuente