
Tengo un servidor CentOS 5.7 que realizará una copia de seguridad de sus archivos todas las noches. Me preocupa que los visitantes de los distintos sitios alojados en 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 ser en el lado del servidor o del cliente; es decir, estaré encantado de hacer esto en el cliente que inicia la conexión o en el servidor que la recibe.
(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 aún así maximizaría la capacidad total de la conexión mientras lo hago).
Algunos antecedentes
Quizás sea necesario contar con algunos antecedentes. Volviendo atrás, tuve el problema de no tener suficiente espacio local para crear la copia de seguridad. ¡Ingrese a 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 del venerable rsync --bwlimit
. rsync
en realidad no está haciendo la transferencia nipoderporque ni siquiera tengo espacio para guardar el archivo de copia de seguridad.
Puedo oírte preguntar: "Espera, ¿por qué necesitas crear un archivo de copia de seguridad? ¿Por qué no sólo rsync
los archivos y carpetas de origen?" ¡Porque hay una cosa molesta llamada "Plesk" en la mezcla! Este es mi servidor web orientado al cliente que utiliza Plesk por conveniencia. 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
Respuesta1
Una opción que acabo de descubrir es usartrickle
.
trickle
es un modelador de ancho de banda de espacio de usuario liviano y portátil. Puede ejecutarse en modo colaborativo (junto contrickled
) o en modo autónomo.
trickle
Funciona aprovechando la precarga del cargador Unix. Básicamente, proporciona a la aplicación una nueva versión de la funcionalidad necesaria para enviar y recibir datos a través de sockets. Luego limita el tráfico basándose en el retraso del envío y la recepción de datos a través de un socket.trickle
se ejecuta completamente en el espacio de usuario y no requiere privilegios de root.
Para usuarios de Ubuntu, instálelo ejecutando
sudo apt install trickle
Y como ejemplo, ejecútelo maven build
limitándolo a una velocidad de descarga de 20 kB/s y 111 kB/s para carga:
trickle -sd 20 -u 111 mvn build
Respuesta2
Puede usarlo iptables
para marcar un paquete (--pid-owner...) y luego usarlo tc
para dar forma al tráfico. También se puede utilizar "--sid-owner" para incluir subprocesos e hijos de ese proceso.
http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
Fósforo --pid-propietario
Núcleo2.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 paquetes según el ID de proceso (PID) responsable de ellos. Esta coincidencia es un poco más difícil de usar, pero un ejemplo sería permitir que el PID 94 envíe paquetes desde el puerto HTTP (si el proceso HTTP no tiene subprocesos, 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 la que se muestra en el ejemplo Pid-owner.txt.
Respuesta3
Si puede escribir en una tubería (o salida estándar), puede instalar el pv
comando (visor de tuberías). Fue escrito originalmente 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
-L RATE, --rate-limit RATE
Limit the transfer to a maximum of RATE bytes per second. A
suffix of "k", "m", "g", or "t" can be added to denote kilobytes
(*1024), megabytes, and so on.
Respuesta4
¿Cómo estás transfiriendo los datos? (rsync sobre ssh? ¿scp? ¿sftp? ¿algo más?)
rsync le permitirá limitar el ancho de banda (consulte la opción --bwlimit=KBPS). rsync -e ssh --bwlimit ..
Alternativamente, puede configurar una qdisc o equivalente para realizar una limitación de velocidad elegante, pero sospecho que en su caso esto sería una exageración. La documentación sobre esto está disponible enEl CÓMO de control de tráfico y enrutamiento avanzado de Linux