Ich habe einen CentOS 5.7-Server, dessen Dateien jede Nacht gesichert werden. Ich mache mir Sorgen, dass die Leistung der Besucher der verschiedenen Sites, die auf dem Server gehostet werden, abnimmt, während das Backup über das Netzwerk übertragen wird.
Ist es möglich, den maximal zulässigen Durchsatz eines Prozesses auf eine Netzwerkschnittstelle zu beschränken? Ich möchte die SSH-basierte Dateiübertragung auf die Hälfte meiner verfügbaren Bandbreite beschränken. Dies kann auf der Server- oder Clientseite erfolgen. Das heißt, ich würde dies gerne entweder auf dem Client tun, der die Verbindung initiiert, oder auf dem Server, der die Verbindung empfängt.
(Leider kann ich keine Schnittstelle für Backups hinzufügen. Ich könnte meinen verfügbaren Durchsatz erhöhen, aber das würde lediglich bedeuten, dass die Netzwerkübertragung schneller abgeschlossen wird, aber die Gesamtkapazität der Verbindung dabei immer noch maximal ist.)
Einige Hintergrundinformationen
Vielleicht ist etwas Hintergrundwissen angebracht. Als ich zurücktrat, hatte ich ein Problem, weil ich nicht genug lokalen Speicherplatz hatte, um das Backup selbst zu erstellen. Geben Sie SSHFS ein! Die Sicherung wird auf einem angeblich lokalen Laufwerk gespeichert, sodass sich keine Sicherungsbits auf dem Webserver befinden.
Warum ist das so wichtig? Denn das scheint den Gebrauch des Ehrwürdigen zunichte zu machen rsync --bwlimit
. rsync
führt die Übertragung nicht durch und kann es auch nicht, weil ich nicht einmal den Speicherplatz für die Sicherungsdatei frei habe.
Ich kann Sie fragen hören: "Warten Sie, warum müssen Sie überhaupt eine Sicherungsdatei erstellen? Warum nicht nur rsync
die Quelldateien und -ordner?" Denn eine nervige Sache namens "Plesk" ist in der Mischung! Dies ist mein Client-konformer Webhost, der Plesk zur Vereinfachung verwendet. Daher verwende ich Plesk, um die Sicherungen zu initiieren, da Plesk dem Backup jede Menge zusätzliche Magie hinzufügt, die es während eines Wiederherstellungsvorgangs sehr sicher macht.
trauriges Gesicht
quelle
ionice
, die Schreibvorgänge zu drosseln, die ein Prozess ausführen kann. Da ich in ein SSHFS-Dateisystem schreibe, kann ich die Klasse des Sicherungsprozesses auf 3 setzen, damit er allen anderen Prozessen, die schreiben möchten, vollständig nachgibt. Auf diese Weise erhalte ich den gewünschten Effekt, der die Erfahrung eines Website-Besuchers aufgrund der Backup-Hogging-Bandbreite nicht beeinträchtigt.Antworten:
Mit können Sie
iptables
ein Paket markieren (--pid-owner ...) und danntc
den Datenverkehr formen. "--Sid-owner" kann auch verwendet werden, um Threads und untergeordnete Elemente dieses Prozesses einzuschließen.http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
quelle
--pid-owner processid
ob das Paket von einem Prozess mit der angegebenen Prozess-ID erstellt wurde ." linux.die.net/man/8/iptablesiptables -A OUTPUT -m owner --pid-owner 78
Beispiel scheint nicht vollständig zu sein (da es nur mit Paketen übereinstimmt, nicht sagt, wie sie "markiert" werden sollen) undtc
wird überhaupt nicht erklärt.-j MARK --set-mark 1
. Weitere Informationen finden Sie unter: wiki.archlinux.org/index.php/…Eine Option, die ich gerade entdeckt habe, ist die Verwendung von Rinnsal .
quelle
trickle
Ihnen angegebene Link führt zu einer 404.sudo apt-get install trickle
Wenn Sie in eine Pipe (oder stdout) schreiben können, können Sie den
pv
Befehl (pipe viewer) installieren . Es wurde ursprünglich geschrieben, um den Fortschritt der über eine Pipe übertragenen Daten anzuzeigen.tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs
quelle
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
Aus dem gleichen Grund verwende ich rsync mit der Option --bwlimit = KBPS.
Unser 1-Gbit-Ethernet ist problemlos in der Lage, unser altes SCSI320-DAS-RAID zu überfluten, und im Grunde genommen sind es einige unserer älteren DOS-Produktionsboxen, die es für ihre NFS-Stores verwenden.
quelle
Wie übertragen Sie die Daten? (rsync über ssh? scp? sftp? noch etwas?)
Mit rsync können Sie die Bandbreite begrenzen (siehe die Option --bwlimit = KBPS). rsync -e ssh --bwlimit ..
Alternativ könnten Sie eine qdisc oder ein Äquivalent einrichten, um die Phantasierate zu begrenzen, aber ich vermute, dass dies in Ihrem Fall ein schwerwiegender Overkill wäre. Die Dokumentation hierzu finden Sie im Linux Advanced Routing and Traffic Control HOWTO
quelle