У меня есть сервер CentOS 5.7, который будет выполнять резервное копирование своих файлов каждую ночь. Я обеспокоен тем, что посетители различных сайтов, на которых размещается сервер, будут испытывать снижение производительности, пока резервная копия передается по сети.
Можно ли ограничить максимально допустимую пропускную способность процесса сетевым интерфейсом? Я хотел бы ограничить передачу файлов по SSH только половиной моей доступной пропускной способности. Это может быть на стороне сервера или клиента; то есть я был бы рад сделать это либо на клиенте, который инициирует соединение, либо на сервере, который получает соединение.
(К сожалению, я не могу добавить интерфейс для выделения резервных копий. Я мог бы увеличить доступную пропускную способность, но это просто означало бы, что передача по сети завершится быстрее, но при этом максимально увеличит общую емкость соединения.)
Некоторый Фон
Возможно, какой-то фон в порядке. Возвращаясь назад, я столкнулся с проблемой нехватки локального пространства для создания самой резервной копии. Введите SSHFS! Резервная копия сохраняется на том, что якобы является локальным диском, поэтому на самом веб-сервере никогда не будет битов резервного копирования.
Почему это важно? Потому что это, казалось бы, делает недействительным использование почтенного rsync --bwlimit
. rsync
фактически не выполняет передачу, и не может, потому что я даже не могу сэкономить место для сохранения файла резервной копии.
Я слышу, как вы спрашиваете: «Итак, подождите, зачем вам вообще делать файл резервной копии? Почему не только rsync
исходные файлы и папки?» Потому что надоедливая штука под названием "Plesk" в миксе! Это мой клиентский веб-хостинг, который использует Plesk для удобства. Поэтому я использую Plesk для запуска резервного копирования, потому что Plesk добавляет в резервную копию все виды дополнительной магии, что делает ее использование во время процедуры восстановления очень безопасным.
грустное лицо
источник
ionice
для регулирования записи, которую может сделать процесс. Поскольку я пишу в файловую систему SSHFS, я могу снизить класс процесса резервного копирования до 3, чтобы он полностью уступил любому другому процессу, который хочет писать. Таким образом, я получаю эффект, который я хочу - никогда не ухудшать впечатления посетителя сайта из-за пропускной способности резервного копирования.Ответы:
Вы можете использовать
iptables
для маркировки пакета (--pid-owner ...), а затем использоватьtc
для формирования трафика. Также «--sid-owner» может использоваться для включения потоков и дочерних элементов этого процесса.http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
источник
--pid-owner processid
Соответствует, если пакет был создан процессом с заданным идентификатором процесса ». linux.die.net/man/8/iptablesiptables -A OUTPUT -m owner --pid-owner 78
пример не кажется законченным (поскольку он только сопоставляет пакеты, он не говорит, как «пометить» их) иtc
вообще не объясняется.-j MARK --set-mark 1
. Для более подробной информации смотрите: wiki.archlinux.org/index.php/…Один из вариантов, который я только что обнаружил, - это использовать струйку .
источник
trickle
Ссылку вы дали приводит к 404.sudo apt-get install trickle
Если вы можете писать в канал (или стандартный вывод), вы можете установить команду
pv
(просмотрщик каналов). Первоначально он был написан для отображения хода передачи данных по каналу.tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs
источник
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
Я использую rsync с опцией --bwlimit = KBPS по той же причине.
Наша 1-гигабитная сеть Ethernet легко может забить наш старый SCSI320 DAS RAID, и, по сути, некоторые из наших старых производственных систем DOS, которые используют его для своих хранилищ NFS.
источник
Как вы переносите данные? (rsync через ssh? scp? sftp? что-то еще?)
rsync позволит вам ограничить пропускную способность (см. параметр --bwlimit = KBPS). rsync -e ssh --bwlimit ..
В качестве альтернативы, вы можете установить qdisc или его эквивалент, чтобы ограничить причудливую скорость, но я подозреваю, что в вашем случае это будет серьезным излишним. Документация по этому вопросу доступна в HOWTO по расширенной маршрутизации и управлению трафиком в Linux.
источник