Tengo un servidor CentOS 5.7 que realizará copias de seguridad de sus archivos todas las noches. Me preocupa que los visitantes de los distintos sitios que aloja el servidor experimentarán un rendimiento degradado mientras la copia de seguridad se transfiere a través de la red.
¿Es posible limitar el rendimiento máximo permitido de un proceso a una interfaz de red? Me gustaría limitar la transferencia de archivos basada en SSH a solo la mitad de mi ancho de banda disponible. Esto podría estar en el lado del servidor o del cliente; es decir, me complacería hacerlo en el cliente que inicia la conexión o en el servidor que recibe la conexión.
(Desafortunadamente, no puedo agregar una interfaz para dedicarla a las copias de seguridad. Podría aumentar mi rendimiento disponible, pero eso solo significaría que la transferencia de red se completaría más rápido, pero aún así maximizaría la capacidad total de la conexión al hacerlo).
Algunos antecedentes
Tal vez algunos antecedentes están en orden. Al retroceder, tuve un problema al no tener suficiente espacio local para crear la copia de seguridad. Ingrese SSHFS! La copia de seguridad se guarda en lo que aparentemente es una unidad local para que nunca haya bits de copia de seguridad en el servidor web.
¿Por qué es eso importante? Porque eso parecería invalidar el uso de lo venerable rsync --bwlimit
. rsync
en realidad no está haciendo la transferencia ni puede hacerlo porque ni siquiera puedo ahorrar espacio para guardar el archivo de copia de seguridad.
Puedo escucharle preguntar: "Espera, ¿por qué necesita hacer un archivo de respaldo? ¿Por qué no solo rsync
los archivos y carpetas de origen?" ¡Porque una cosa molesta llamada "Plesk" está en la mezcla! Este es mi proveedor de alojamiento web orientado al cliente que utiliza Plesk por conveniencia. Como tal, utilizo Plesk para iniciar las copias de seguridad porque Plesk agrega todo tipo de magia adicional a la copia de seguridad que hace que su consumo durante un procedimiento de restauración sea muy seguro.
cara triste
fuente
ionice
para estrangular las escrituras que puede hacer un proceso. Como estoy escribiendo en un sistema de archivos SSHFS, puedo reducir la clase del proceso de copia de seguridad a 3 para que dé paso a cualquier otro proceso que quiera escribir. De esa forma obtengo el efecto que quiero, que es nunca degradar la experiencia de un visitante del sitio debido al ancho de banda de acaparamiento de respaldo.Respuestas:
Puede usar
iptables
para marcar un paquete (--pid-owner ...), luego usartc
para dar forma al tráfico. También se puede usar "--sid-owner" para incluir hilos y elementos secundarios de ese proceso.http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
fuente
--pid-owner processid
Coincide si el paquete fue creado por un proceso con el ID de proceso dado ". linux.die.net/man/8/iptablesiptables -A OUTPUT -m owner --pid-owner 78
ejemplo dado no parece estar completo (ya que solo coincide con los paquetes, no dice cómo "marcarlos") ytc
no se explica en absoluto.-j MARK --set-mark 1
. Para más detalles ver: wiki.archlinux.org/index.php/…Una opción que acabo de descubrir es usar goteo .
fuente
trickle
enlace que le dio conduce a un 404.sudo apt-get install trickle
Si puede escribir en una tubería (o stdout), puede instalar el
pv
comando (visor de tuberías). Originalmente se escribió para mostrar el progreso de los datos transferidos a través de una tubería.tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs
fuente
ssh my-remote-server bash -c "'find / -xdev|cpio -o|gzip -c1'"|pv --rate-limit 1M > my-remote-root.cpio.gz
.ssh my-remote-server ionice -c3 bash -c "'find / -xdev|cpio -o|gzip -c1'"|pv --rate-limit 1M > my-remote-root.cpio.gz
Yo uso rsync con la opción --bwlimit = KBPS por la misma razón.
Nuestra ethernet de 1 Gbit es capaz de inundar fácilmente nuestro antiguo SCSI320 DAS RAID, y esencialmente DOS es algunas de nuestras cajas de producción más antiguas que dependen de él para sus tiendas NFS.
fuente
¿Cómo transfieres los datos? (rsync sobre ssh? scp? sftp? algo más?)
rsync le permitirá limitar el ancho de banda (vea la opción --bwlimit = KBPS). rsync -e ssh --bwlimit ..
Alternativamente, puede configurar un qdisc o equivalente para limitar la velocidad de fantasía, pero sospecho que en su caso esto sería una exageración severa. La documentación sobre esto está disponible en el COMO de Linux Advanced Routing and Traffic Control
fuente