J'ai un serveur CentOS 5.7 qui sauvegardera ses fichiers tous les soirs. Je crains que les visiteurs des différents sites hébergés par le serveur ne voient leurs performances se dégrader lors du transfert de la sauvegarde sur le réseau.
Est-il possible de limiter le débit maximum autorisé d'un processus à une interface réseau? J'aimerais limiter le transfert de fichiers basé sur SSH à la moitié de ma bande passante disponible. Cela pourrait être du côté serveur ou client; c'est-à-dire que je serais heureux de le faire sur le client qui initie la connexion ou sur le serveur qui reçoit la connexion.
(Malheureusement, je ne peux pas ajouter une interface à dédier aux sauvegardes. Je pourrais augmenter mon débit disponible, mais cela signifierait simplement que le transfert réseau s'achèverait plus rapidement, tout en maximisant la capacité totale de la connexion.)
Un peu de fond
Peut-être un peu de contexte est en ordre. En revenant en arrière, je n’avais pas assez d’espace local pour créer la sauvegarde elle-même. Entrez SSHFS! La sauvegarde est sauvegardée sur ce qui est apparemment un lecteur local, de sorte qu'aucun bit de sauvegarde ne soit jamais sur le serveur Web lui-même.
Pourquoi est-ce important? Parce que cela semblerait invalider l'utilisation du vénérable rsync --bwlimit
. rsync
ne fait pas le transfert ni ne peut le faire car je ne peux même pas ménager de l’espace pour sauvegarder le fichier de sauvegarde.
Je peux vous entendre demander: «Alors, attendez, pourquoi avez-vous même besoin de créer un fichier de sauvegarde? Pourquoi ne pas simplement rsync
les fichiers source et les dossiers?" Parce qu'une chose agaçante appelée "Plesk" est dans le mélange! Il s’agit de mon hébergeur web qui utilise Plesk pour plus de commodité. En tant que tel, j’utilise Plesk pour lancer les sauvegardes, car Plesk ajoute toutes sortes de magie supplémentaire à la sauvegarde, ce qui la rend très sûre lors d’une procédure de restauration.
visage triste
la source
ionice
à limiter les écritures qu'un processus peut générer. Étant donné que j'écris sur un système de fichiers SSHFS, je peux laisser tomber la classe du processus de sauvegarde sur 3 pour le laisser complètement passer à tout autre processus qui souhaite écrire. De cette façon, je produis l'effet que je veux, à savoir ne jamais dégrader l'expérience d'un visiteur du site en raison de la bande passante accablante de sauvegarde.Réponses:
Vous pouvez utiliser
iptables
pour marquer un paquet (--pid-owner ...), puis utilisertc
pour façonner le trafic. De même, "--sid-owner" peut être utilisé pour inclure les threads et les enfants de ce processus.http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
la source
--pid-owner processid
Correspond si le paquet a été créé par un processus avec l'ID de processus donné ." linux.die.net/man/8/iptablesiptables -A OUTPUT -m owner --pid-owner 78
exemple donné ne semble pas être complet (car il ne fait que correspondre aux paquets, il ne dit pas comment les "marquer") ettc
n'est pas expliqué du tout.-j MARK --set-mark 1
. Pour plus de détails, voir: wiki.archlinux.org/index.php/…Une option que je viens de découvrir est d'utiliser le filet .
la source
trickle
lien que vous avez donné mène à un 404.sudo apt-get install trickle
Si vous pouvez écrire sur un tuyau (ou une stdout), vous pouvez installer la commande
pv
(visualiseur de tuyaux). Il a été écrit à l'origine pour afficher la progression des données transférées via un canal.tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs
la source
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
J'utilise rsync avec l'option --bwlimit = KBPS pour la même raison.
Notre réseau Ethernet 1 Gbit est capable de submerger notre ancien SCAS320 DAS RAID et, en gros, certains de nos anciens boîtiers de production qui en dépendent pour ses magasins NFS.
la source
Comment transférez-vous les données? (rsync sur ssh? scp? sftp? autre chose?)
rsync vous permettra de limiter la bande passante (voir l'option --bwlimit = KBPS). rsync -e ssh --bwlimit ..
Alternativement, vous pouvez configurer un disque ou un équivalent pour limiter le taux de fantaisie, mais je soupçonne que, dans votre cas, cela serait excessif. La documentation à ce sujet est disponible sur le HOWTO Linux Advanced Routing and Traffic Control
la source