Tengo un servidor CentOS 5.7 que realizará copias de seguridad de sus archivos todas las noches. Me preocupa que los visitantes de los diversos sitios que aloja el servidor experimenten 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, estaría feliz de hacer esto 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 simplemente significaría que la transferencia de red se completaría más rápido, pero aun así maximizaría la capacidad total de la conexión mientras lo hago .)
Algunos antecedentes
Tal vez algunos antecedentes estén en orden. Retrocediendo, tuve el problema de no tener suficiente espacio local para crear la copia de seguridad. ¡Entra SSHFS! La copia de seguridad se guarda en lo que aparentemente es una unidad local, de modo que nunca haya bits de copia de seguridad en el propio servidor web.
¿Por qué es eso importante? Porque eso parecería invalidar el uso del venerable rsync --bwlimit
. rsync
en realidad no está haciendo la transferencia ni puede porque ni siquiera puedo prescindir del espacio para guardar el archivo de copia de seguridad.
Puedo oírte preguntar:“Entonces, espera, ¿por qué necesitas hacer un archivo de copia de seguridad? ¿Por qué no simplemente 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 para mayor comodidad. Como tal, uso Plesk para iniciar las copias de seguridad porque Plesk agrega todo tipo de magia adicional a la copia de seguridad que hace que consumirla durante un procedimiento de restauración sea muy seguro.
cara triste
Respuesta aceptada:
Puedes usar iptables
para marcar un paquete (–pid-owner …), luego use tc
para dar forma al tráfico.
También se puede usar “–sid-owner” para incluir subprocesos e hijos de ese proceso.
http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
Coincidencia –pid-propietario
Núcleo 2.3, 2.4, 2.5 y 2.6
Ejemplo iptables -A SALIDA -m propietario –pid-propietario 78
Explicación Esta coincidencia se utiliza para hacer coincidir los paquetes en función del ID de proceso (PID) responsable de ellos. Esta coincidencia es un poco más difícil de usar, pero un ejemplo sería solo permitir que PID 94 envíe paquetes desde el puerto HTTP (si el proceso HTTP no está enhebrado, por supuesto). Alternativamente, podríamos escribir un pequeño script que tome el PID de una salida ps para un demonio específico y luego agregue una regla para él. Por ejemplo, podría tener una regla como se muestra en el ejemplo de Pid-owner.txt