Ограничение пропускной способности интерфейса виртуальных машин


В последнее время наибольшей популярностью все чаще пользуется VDS. VDS (Virtual Dedicated Server) или виртуальный выделенный сервер  – это абсолютно полноценная *nix-подобная система, работающая на компьютере, где установлены несколько подобных систем.

Допустим у вас уже имеетя VDS на основе Debian linux, использующее KVM (Kernel-based Virtual Machine) для виртуализации, и вы хотите создать идеальную платформу для продажи VDS. Но Вам временами мешают периодические кратковременные скочки скорости сети, вызываемые backup-хостом для одного из серверов, расположенном на отдельном VDS. Как же разрешить этот неприятный инцидент?

На debian.org  было найдено простое решение. Очень удобная утилита wondershaper используется для нарезки трафика или его ограничения.

Как использовать wondershaper? Синтаксис очень прост:

  • wondershaper [ interface ] [ downlink ][ uplink ] — устанавливает ограничение для интерфейса;
  • wondershaper [ interface ] — показывает ограничение для интерфейса;
  • wondershaper clear [ interface ] — удаляет ограничение для интерфейса.

Теперь подробнее применительно к KVM. Для начала нам необходимо узнать какой интерфейс использует VDS с жутким потреблением сетевого трафика. Сделать это можно через virt-manager или отключая интерфейсы через iptables, пингуя нужную VDS.

Debian:~# ps aux | grep vds10
root 3351 3.4 8.4 1685376 691888 ? Sl Jun16 1340:50 /usr/bin/kvm -S -M pc -m 1024 -smp 1 -name vds10 -monitor pty -boot c -drive file=/vms/vds10.img,if=ide,index=0,boot=on -drive file=/iso/debian-504-i386-CD-1.iso,if=ide,media=cdrom,index=2 -net nic,macaddr=54:52:00:38:00:fb,vlan=0 -net tap,fd=11,script=,vlan=0,ifname=vnet0 -serial pty -parallel none -usb -vnc 127.0.0.1:0 -k en-us

В данном случае vds10 у нас работает с интерфейсом vnet0. Теперь выставим ограничение для интерфейса vnet0 в 20000 кбит в секунду на download и 20000 кбит в секунду на upload:

Debian:~# wondershaper vnet0 20000 20000

Как указывать ограничения в мегабитах и прочие тонкости настройки оставляю на вас.

Debian:~# wondershaper vnet0

Эта команда выводит нам статистику по интерфейсу vnet0.

Теперь что необходимо сделать, если нам понадобится убрать ограничение для интерфейса vnet0 нашей VDS?

Debian:~# wondershaper vnet0 clear

Ограничение на интерфейс больше не распространяется.

Данный метод в общем-то полезен, только если вы желаете ограничить скорость исходящего трафика VDS. Ограничивать входящую скорость я не рекомендую.

Как видите, работа с wondershaper быстрая и понятная. Но на этом возможности этой утилиты не заканчиваются. Ну например, ограничивать суммарную скорость всех VDS на сервере, если они используют одно устройство bridge, чтобы у хоста оставалась гарантированная свободная полоса.

Debian:~# wondershaper br0 200 300

Можно группировать несколько VDS на разные bridge и ограничивать им скорость по группам… Подробнее об этом и многом другом вы также можете прочитать…

Надо отметить, что wondershaper есть в составе большинства дистрибутивов, так как является достаточно удобным универсальным инструментом, работающим с сетевыми интерфейсами.