Mam serwer CentOS 5.7, który co wieczór tworzy kopie zapasowe swoich plików. Obawiam się, że osoby odwiedzające różne witryny hostowane przez serwer odczują obniżoną wydajność podczas przesyłania kopii zapasowej przez sieć.
Czy można ograniczyć maksymalną dozwoloną przepustowość procesu do interfejsu sieciowego? Chciałbym ograniczyć transfer plików oparty na SSH do połowy dostępnej przepustowości. Może to być po stronie serwera lub klienta; to znaczy, chętnie to zrobię na kliencie, który inicjuje połączenie lub na serwerze, który odbiera połączenie.
(Niestety nie mogę dodać interfejsu do tworzenia kopii zapasowych. Mógłbym zwiększyć moją dostępną przepustowość, ale to tylko oznaczałoby, że transfer sieciowy zostałby ukończony szybciej, ale nadal maksymalizowałby całkowitą pojemność połączenia podczas jego wykonywania.)
Niektóre tło
Być może pewne tło jest w porządku. Cofając się, miałem problem z brakiem wystarczającej ilości miejsca lokalnego do utworzenia kopii zapasowej. Wpisz SSHFS! Kopia zapasowa jest zapisywana na czymś, co jest pozornie dyskiem lokalnym, dzięki czemu na samym serwerze sieciowym nie ma żadnych bitów kopii zapasowej.
Dlaczego to takie ważne? Ponieważ to wydaje się unieważniać użycie czcigodnego rsync --bwlimit
. rsync
tak naprawdę nie wykonuje transferu ani nie może , ponieważ nie mogę nawet zaoszczędzić miejsca na zapisanie pliku kopii zapasowej.
Słyszę, jak pytasz: „Więc czekaj, dlaczego w ogóle potrzebujesz zrobić kopię zapasową? Dlaczego nie tylko rsync
pliki źródłowe i foldery?” Ponieważ denerwująca rzecz o nazwie „Plesk” jest w miksie! To jest mój internetowy klient, który korzysta z Plesk dla wygody. Jako taki używam Plesk do inicjowania kopii zapasowych, ponieważ Plesk dodaje do kopii zapasowej wszelkiego rodzaju dodatkową magię, która sprawia, że korzystanie z niej podczas procedury przywracania jest bardzo bezpieczne.
smutna mina
źródło
ionice
przepustnicy do zapisów, które może wykonać proces. Ponieważ piszę do systemu plików SSHFS, mogę obniżyć klasę procesu tworzenia kopii zapasowej do 3, aby całkowicie ustąpił miejsca innemu procesowi, który chce pisać. W ten sposób uzyskuję pożądany efekt, który nigdy nie pogarsza wrażeń odwiedzających witrynę z powodu nadmiernej przepustowości.Odpowiedzi:
Możesz użyć
iptables
do oznaczenia pakietu (--pid-owner ...), a następnie użyćtc
do ukształtowania ruchu. Można także użyć parametru „--sid-owner”, aby uwzględnić wątki i elementy potomne tego procesu.http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
źródło
--pid-owner processid
Pasuje, jeśli pakiet został utworzony przez proces o podanym identyfikatorze procesu ”. linux.die.net/man/8/iptablesiptables -A OUTPUT -m owner --pid-owner 78
przykład nie wydaje się być kompletny (ponieważ pasuje tylko do pakietów, nie mówi, jak je „oznaczyć”) itc
w ogóle nie został wyjaśniony.-j MARK --set-mark 1
. Aby uzyskać więcej informacji, zobacz: wiki.archlinux.org/index.php/…Jedną z właśnie odkrytych przeze mnie opcji jest użycie strużki .
źródło
trickle
link prowadzi do 404.sudo apt-get install trickle
Jeśli możesz pisać na potoku (lub standardowym wyjściu), możesz zainstalować
pv
komendę (przeglądarka potoków). Pierwotnie został napisany, aby wyświetlać postęp danych przesyłanych przez potok.tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs
źródło
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
Używam rsync z opcją --bwlimit = KBPS z tego samego powodu.
Nasza sieć Ethernet 1 Gbit jest w stanie łatwo zalać nasz stary SCSI320 DAS RAID, a w zasadzie DOS to niektóre nasze starsze urządzenia produkcyjne, które korzystają z niego w sklepach NFS.
źródło
Jak przenosisz dane? (rsync over ssh? scp? sftp? coś innego?)
rsync pozwoli ci ograniczyć przepustowość (zobacz opcję --bwlimit = KBPS). rsync -e ssh --bwlimit ..
Alternatywnie, możesz ustawić qdisc lub ekwiwalent, aby zrobić fantazyjne ograniczenie tempa, ale podejrzewam, że w twoim przypadku byłaby to poważna przesada. Dokumentacja na ten temat jest dostępna w Linux Advanced Routing and Traffic Control HOWTO
źródło