Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: KVM bridge and bonding  (Прочитано 4821 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Melges

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
KVM bridge and bonding
« : 28 Января 2013, 16:46:07 »
Добрый день,

Хотел бы попросить помощи в настройке связки bridge over bonding для работы с KVM. Идея в следующем, есть два сетевых интерфейса eth0 и eth1 на машине которая используется как хост для виртуальных машин. Сетевые интерфейсы подключены в одну локальную сеть, хотелось бы настроить bonding для балансировки нагрузки между ними.

Настроил bonding, сделал поверх него мост, указал мост как интерфейс в виртуальных машинах. Результат: в хост-системе сеть есть, даже балансируется и казалось бы все хорошо... Но вот в виртуальных машинах сети нет.

Итак, конфиги:
~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface working in bonding
auto eth0
iface eth0 inet manual
bond-master bond0
auto eth1
iface eth1 inet manual
bond-master bond0

# Configure bonding
auto bond0
iface bond0 inet manual
bond-mode balance-xor #
bond-slaves none
bond-miimon 100
# bond-slaves eth0 eth1

# Interface for virtual machines
auto vbr0
iface vbr0 inet dhcp
# vlan-raw-device bond0
        bridge_ports bond0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp on
~$ brctl show
bridge name bridge id STP enabled interfaces
vbr0 8000.001a64b402b8 yes bond0
vnet0
vnet1
vnet2
vnet3
vnet4
vnet5
vnet6
vnet7
virbr0 8000.000000000000 yes
~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1a:64:b4:02:b8 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3575 errors:0 dropped:1 overruns:0 frame:0
          TX packets:886 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:531166 (531.1 KB)  TX bytes:98628 (98.6 KB)
          Interrupt:28 Memory:92000000-92012800

eth1      Link encap:Ethernet  HWaddr 00:1a:64:b4:02:ba 
          inet6 addr: fe80::21a:64ff:feb4:2ba/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:63786 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58734 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9155411 (9.1 MB)  TX bytes:13247789 (13.2 MB)
          Interrupt:40 Memory:94000000-94012800

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:56 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:7859 (7.8 KB)  TX bytes:7859 (7.8 KB)

bond0      Link encap:Ethernet  HWaddr 00:1a:64:b4:02:b8 
          inet6 addr: fe80::21a:64ff:feb4:2b8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1077 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:124614 (124.6 KB)  TX bytes:2700 (2.7 KB)

vbr0      Link encap:Ethernet  HWaddr 00:1a:64:b4:02:b8 
          inet addr:192.168.74.9  Bcast:192.168.74.255  Mask:255.255.255.0
          inet6 addr: fe80::21a:64ff:feb4:2b8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1077 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:124614 (124.6 KB)  TX bytes:2700 (2.7 KB)

virbr0    Link encap:Ethernet  HWaddr 42:c6:c1:4a:3d:38 
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

vnet0     Link encap:Ethernet  HWaddr fe:54:00:2f:6b:0c 
          inet6 addr: fe80::fc54:ff:fe2f:6b0c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:729 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1323 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:74757 (74.7 KB)  TX bytes:267199 (267.1 KB)

vnet1     Link encap:Ethernet  HWaddr fe:54:00:43:62:f8 
          inet6 addr: fe80::fc54:ff:fe43:62f8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:98 errors:0 dropped:0 overruns:0 frame:0
          TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:12704 (12.7 KB)  TX bytes:11014 (11.0 KB)

vnet2     Link encap:Ethernet  HWaddr fe:54:00:72:28:66 
          inet6 addr: fe80::fc54:ff:fe72:2866/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:3285 (3.2 KB)  TX bytes:9906 (9.9 KB)

vnet3     Link encap:Ethernet  HWaddr fe:54:00:91:4f:a1 
          inet6 addr: fe80::fc54:ff:fe91:4fa1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:3285 (3.2 KB)  TX bytes:8322 (8.3 KB)

vnet4     Link encap:Ethernet  HWaddr fe:54:00:d0:b2:72 
          inet6 addr: fe80::fc54:ff:fed0:b272/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:2943 (2.9 KB)  TX bytes:7842 (7.8 KB)

vnet5     Link encap:Ethernet  HWaddr fe:54:00:0b:e8:3e 
          inet6 addr: fe80::fc54:ff:fe0b:e83e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:4657 (4.6 KB)

vnet6     Link encap:Ethernet  HWaddr fe:54:00:fe:4e:c6 
          inet6 addr: fe80::fc54:ff:fefe:4ec6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:2264 (2.2 KB)  TX bytes:2964 (2.9 KB)

vnet7     Link encap:Ethernet  HWaddr fe:54:00:d5:d3:07 
          inet6 addr: fe80::fc54:ff:fed5:d307/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:2184 (2.1 KB)

Диагностика с tcpdump'ом показала что пакеты ходят из виртуальных машин в сеть, а вот обратно не приходят. Для DHCP запросов наблюдаем следующее: DHCP Request видим на vnet0, vbr0, bond0 eth0 или eth1, DHCP reply видим на eth0 или eth1, bond0, vbr0, а на vnet0 не видим :(

Что я пробовал делать:
  • Добавлять vlan-raw-device bond0 в описание vbr0 и заменять bridge_ports bond0 на bridge_ports bond0.11 или bond.10
  • Включать и выключать STP
  • Много гуглить, читать баги про неправильную обработку arp в багтрекере убунты и редхата
  • Изучать японский

К сожалению ничего из выше перечисленного мне не помогло. Быть может кто-нибудь более опытный подскажет мне в чем проблема?

Заранее спасибо за помощь.
« Последнее редактирование: 28 Января 2013, 16:52:32 от Melges »

Оффлайн No-Mad

  • Новичок
  • *
  • Сообщений: 48
    • Просмотр профиля
Re: KVM bridge and bonding
« Ответ #1 : 20 Февраля 2013, 23:58:23 »
Melges,

Почему у вас адреса из разных подсетей ?
Адреса выдаются DHCP или статически ?
Что вообще за интерфейс virbr0 ?
Какая конфигурация, для примера, у vnet0 ?

vbr0      Link encap:Ethernet  HWaddr 00:1a:64:b4:02:b8 
          inet addr:192.168.74.9  Bcast:192.168.74.255  Mask:255.255.255.0

virbr0    Link encap:Ethernet  HWaddr 42:c6:c1:4a:3d:38 
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0

Что касается KVM, почему не воспользовались virtmanager'ом. Он, помнится, умеет сам настраивать сетевые интерфейсы.

P.S. Скоро у меня будет похожая задача на работе, но использовать буду VirtualBox. Если смена гипервизора приемлема, попробуйте его. Вместе с расширениями по производительности не уступает KVM, а удобство пользования даже под консолью будет повыше, не говоря уже о разного рода плюшках (в том числе и работа с сетью).
« Последнее редактирование: 21 Февраля 2013, 00:00:38 от No-Mad »

Оффлайн Melges

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: KVM bridge and bonding
« Ответ #2 : 21 Февраля 2013, 19:43:40 »
Почему у вас адреса из разных подсетей ?
Потому что интерфейсы в разных подсетях.

Адреса выдаются DHCP или статически ?
Написано же :)
iface vbr0 inet dhcp
Что вообще за интерфейс virbr0 ?
Это интерфейс виртуальной внутренней сети.

Какая конфигурация, для примера, у vnet0 ?
Эти интерфейсы автоматически создаются гипервизором при старте ВМ. В конфигурации ничего интересного, виртуальный интерфейс который добавляется в мост.

Что касается KVM, почему не воспользовались virtmanager'ом. Он, помнится, умеет сам настраивать сетевые интерфейсы.
Он не умеет настраивать балансировку между множеством интерфейсов.

P.S. Скоро у меня будет похожая задача на работе, но использовать буду VirtualBox. Если смена гипервизора приемлема, попробуйте его. Вместе с расширениями по производительности не уступает KVM, а удобство пользования даже под консолью будет повыше, не говоря уже о разного рода плюшках (в том числе и работа с сетью).
К сожалению пока что VirtualBox очень сильно уступает KVM в производительности на наших задачах. И он не умеет "пробрасывать к ВМ реальные физические устройства сидящие не на USB (например к большому числу GPU и вообще shared доступ к реальным устройствам у него никак не реализован). Ещё у VirtualBox'а нет возможности миграции ВМ с хоста на хост. VirtualBox хороший гипервизор, но к сожалению нам он не подходит.

Кстати говоря VirtualBox использует те же принципы что и KVM для сетей, я провел эксперимент и столкнулся с теми же проблемами что и на KVM - bonding с пробросом ВМ в реальную сеть не работает :(

Оффлайн No-Mad

  • Новичок
  • *
  • Сообщений: 48
    • Просмотр профиля
Re: KVM bridge and bonding
« Ответ #3 : 21 Февраля 2013, 22:55:58 »
Melges,

Изначально было необходимо, чтобы интерфейсы виртуальных машин общались с реальной сетью через мост, в состав которого входит балансировка через bonding ? Если я правильно понял, то моё предложение по поводу virtmanager вполне правильное - т.е. балансировку настраиваем вручную, а потом интерфейс bond0 даём на растерзание virtmanager.

C virtualbox проходят оба варианта. Т.е. я могу либо указать какой внешний интерфейс включить в мост, а к нему (в этот же мост) подключаются интерфейсы виртуалок, при этом их даже на хосте не видно (а у вас присутствуют).
И есть второй вариант, похожий на ваш, но всё же отличающийся. Вот это я имел ввиду, когда говорил о разнице. Т.е. создать независимые интерфейсы на виртуалках, которые всё равно не видны на хосте, т.к. сидят на виртуальном свиче, и уже этот один интерфейс хоста (который связан с виртуальным свичём) присоединить в мост. Кстати, раньше это давало некоторый прирост в производительности, но с четвёртой версией и драйверами virtio лучше использовать штатный режим.

По поводу совместного доступа к реальным ресурсам, что конкретно подразумевается?
Действительно любопытно, давно не работал с ним.
Если про прямой и совместный доступ к жёстким дискам, то VB на это способен.
При наличии VT-d на матери и проце позволяет любое PCI, PCIe (GPU в том числе) устройство пробросить в виртуалку без всякой эмуляции и потери производительности. KVM это без VT-d может? Если да, то киньте ссылочку, думаю пригодится.
USB может, правда только в монопольном режиме (но разве может быть по другому, если предполагается общение с устройством через родной драйвер?)

Кстати, а что за задачи у вас и какова предполагаемая нагрузка?

P.S. У себя на работе балансировку настроил. Сейчас вожусь с RAID. Гипервизор буду на следующей неделе ставить и настраивать сеть. Могу отписаться о своих успехах. Кстати HUSP ключ по USB нормально пробросился в виртуалку при тесте.
« Последнее редактирование: 22 Февраля 2013, 02:33:20 от No-Mad »

Оффлайн No-Mad

  • Новичок
  • *
  • Сообщений: 48
    • Просмотр профиля
Re: KVM bridge and bonding
« Ответ #4 : 01 Марта 2013, 17:13:54 »
Melges,

Возникла у меня похожая проблема (со своими отличиями).

1) Настроил bond0 на основе eth0 и eth1
Сеть и балансировка работают нормально на хосте.

2) Установил VirtualBox, создал виртуальную машину, поставил WinXP.
В качестве сети в настройках выбрал Соединение типа мост, указал интерфейс bond0.

Сеть видна только в рамках хостовой машины:
host bond0 to/from guest bridge = true
guest bridge to/rom host bond0 = true
guest bridge to/from other net = false

После перезагрузки сервера, не смог достучаться даже до самого сервера.
bond0 стартует, но кроме как к самому себе обратиться больше ни к кому не может.
ifconfig теперь почему-то выдаёт в конце каждого интерфейса (eth0 и eth1) строку:
Interrupt:16 <адрес_памяти>

у сервера ip 10.0.0.6, он пингуется, а наружу в сеть ничего не уходит

теперь не могу вообще запустить сеть

есть какие-нибудь мысли?

Пользователь решил продолжить мысль 01 Марта 2013, 21:28:54:

Новая информация

Во-первых
Обратил внимание, что оба интерфейса почему-то на одном прерывании

Во-вторых
Решил я попробовать запустить интерфейсы по одному, без бондинга - просто eth0 и eth1.
Настройка такая:
auto eth0
iface eth0 inet dhcp


auto eth1
iface eth1 inet dhcp


Интерфейс eth1 стартует, получает ip по dhcp и нормально работает, хотя строка Interrupt:16 <адрес_памяти> осталась.
Интерфейс eth0 можно запустить командой eth0 down/up, но ip он не получает.
Если попробовать командой /etc/init.d/networking stop/start, то eth0 вообще не стартует.

Определил, что проблема (вероятно) в dhclient3.
ifconfig eth0 up - команда проходит
dhclient3 eth0 - команда не проходит, висит в ожидании (ждал минут 5-7)
« Последнее редактирование: 01 Марта 2013, 21:46:56 от No-Mad »

Оффлайн is13

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: KVM bridge and bonding
« Ответ #5 : 25 Декабря 2013, 09:45:35 »
Режим bonding в связке с bridging работает для KVM. Но далеко не все режимы.  :-[
Я все режимы не пробовал, но из того, что пробовал: точно не работает 0 (balance-rr), зато точно работают 4 (802.3ad), 5 (balance-tlb) и 6 (balance-alb).
Сейчас у меня используется 802.3ad (LACP).

Правда ни один этих режимов именно в связке с бриджем почему-то не дает увеличения скорости у объединенного интерфейса.
У меня в bonding объединены 4 гигабитных интерфейса, но скорость не превышает гигабита.
Вот замер iperf-ом:
Цитировать
$ iperf -c cn1
------------------------------------------------------------
Client connecting to cn1, TCP port 5001
TCP window size: 96.1 KByte (default)
------------------------------------------------------------
[  3] local 192.168.0.240 port 34357 connected with 192.168.0.250 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.15 GBytes   990 Mbits/sec

Почему это происходит, пока установить не удалось.
Есть мысль попробовать сделать так:
не размещать bond интерфейс непосредственно в bridge, а сначала "закатать" его в vlan и уж этот vlan затолкать в bridge.
т.е. примерно так:
eth0+eth1+eth2+eth3 -> bond0 -> vlanNNNN -> br0

Не уверен, что это сработает, но вдруг? Пробовать пока не пробовал, все руки не доходят…  :)


Пользователь решил продолжить мысль 25 Декабря 2013, 10:07:22:
...
Итак, конфиги:
~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface working in bonding
auto eth0
iface eth0 inet manual
bond-master bond0
auto eth1
iface eth1 inet manual
bond-master bond0

# Configure bonding
auto bond0
iface bond0 inet manual
bond-mode balance-xor #
bond-slaves none
bond-miimon 100
# bond-slaves eth0 eth1

# Interface for virtual machines
auto vbr0
iface vbr0 inet dhcp
# vlan-raw-device bond0
        bridge_ports bond0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp on
~$ brctl show
bridge name bridge id STP enabled interfaces
vbr0 8000.001a64b402b8 yes bond0
vnet0
vnet1
vnet2
vnet3
vnet4
vnet5
vnet6
vnet7
virbr0 8000.000000000000 yes
Кстати, из приведенных конфигов видно, что виртуалки посажены не на дефолтный (для qemu) бридж (virbr0), а на самостоятельно организованный vbr0 (на него же зацеплен и bond0). В данном случае дефолтный virbr0 можно просто убрать (вместе с поднимаемыми с ним правилами для iptables), поскольку он у Вас никак не используется.  ;)

Либо попробовать посадить таки виртуалки на дефолтный virbr0 (доступ к нему из локалки - прописыванием соответствующих маршрутов + через iptables-маскарадинг, который по дефолту создается). В этом случае интерфейс bond0 не заталкивать в бридж, а использовать напрямую. Он естественно сможет работать с любым режимом. Это единственный вариант решения проблемы, который мне видится. Кстати, я и сам хочу его попробовать.
« Последнее редактирование: 25 Декабря 2013, 10:07:23 от is13 »

 

Страница сгенерирована за 0.113 секунд. Запросов: 25.