LINUX.ORG.RU

Как утилизировать 4 сетевых порта 1000Mbps (+3 фото)

 , ,


1

1

Эффективное использование нескольких сетевых портов для виртуальных машин, запущенных на сервере

Привет, ЛОР)))

Пришла мне в голову донельзя гениальная и простая мысля, и я спешу с вами ею поделиться! Есть у меня такой вот сервер:

раз, два, три

В конфигурации один 2609v3 и 16 ГБ памяти, и с усиленным радиатором, чтобы лучше охлаждал. И чтобы как-то утилизировать всю его мощность, было принято решение крутить на серваке виртуалки. А чтобы виртуалки не упирались в сеть, я решил утилизировать все 4 порта на сервере.

Смотрите, смотрите как я это сделал! Создаем четыре бриджа и в каждый бридж подключаем порт:

# find /etc/rc.d/net.*
/etc/rc.d/net.br1
/etc/rc.d/net.br2
/etc/rc.d/net.br3
/etc/rc.d/net.br4
/etc/rc.d/net.eno1
/etc/rc.d/net.eno2
/etc/rc.d/net.eno3
/etc/rc.d/net.eno4
for DEV in br1 br2 br3 br4; do
  /sbin/ip link add ${DEV} type bridge
  /sbin/ip link set ${DEV} type bridge stp_state 0
  /sbin/ip link set ${DEV} type bridge forward_delay 0
  /sbin/ip link set ${DEV} up
done
for DEV in eno1 eno2 eno3 eno4; do
  case "$DEV" in
    "eno1") BRIDGE="br1" ;;
    "eno2") BRIDGE="br2" ;;
    "eno3") BRIDGE="br3" ;;
    "eno4") BRIDGE="br4" ;;
  esac

  /sbin/ip link set ${DEV} master ${BRIDGE}
  /sbin/ip link set ${DEV} up
done

eno{1..4} — это имена сетевых интерфейсов у HP. Вот так вот:

  • eno1 подключен в br1;
  • eno2 подключен в br2;
  • eno3 подключен в br3;
  • eno4 подключен в br4.

    Теперь смотрите! Запускаем виртуалки, а виртуалки должны быть с tap-интерфейсом и тоже входить в бридж:

    lrwxrwxrwx 1 root root  15 Oct 12 12:07 /etc/qemu-ifdown -> qemu-ifdown.br1
    -rwxr-xr-x 1 root root  98 Oct 12 12:03 /etc/qemu-ifdown.br1
    -rwxr-xr-x 1 root root  98 Oct 11 08:46 /etc/qemu-ifdown.br2
    -rwxr-xr-x 1 root root  98 Oct 12 12:03 /etc/qemu-ifdown.br3
    -rwxr-xr-x 1 root root  98 Oct 12 12:03 /etc/qemu-ifdown.br4
    lrwxrwxrwx 1 root root  13 Oct 12 12:07 /etc/qemu-ifup -> qemu-ifup.br1
    -rwxr-xr-x 1 root root 104 Oct 12 12:03 /etc/qemu-ifup.br1
    -rwxr-xr-x 1 root root 104 Oct 11 08:46 /etc/qemu-ifup.br2
    -rwxr-xr-x 1 root root 104 Oct 12 12:03 /etc/qemu-ifup.br3
    -rwxr-xr-x 1 root root 104 Oct 12 12:03 /etc/qemu-ifup.br4

    для примера приведу один скрипт:

    # cat /etc/qemu-ifup.br1
    #!/bin/sh
    
    BRIDGE=br1
    VLAN=$1
    
    /sbin/ip link set ${VLAN} master ${BRIDGE}
    /sbin/ip link set ${VLAN} up
    
    /bin/ln -sf /etc/qemu-ifup.br2 /etc/qemu-ifup

    Смотрите, в чём прикол: qemu при запуске с сетью tap автоматически выполняет скрипт /etc/qemu-ifup, в котором этот tap-интерфейс заходит в бридж, выполняется скрипт-симлинк /etc/qemu-ifup, который ведёт на /etc/qemu-ifup.br1, и когда этот tap-интерфейс зайдёт в br1, дальше скрипт с br1 переделает символическую ссылку на br2. При последующем запуске br2 он его заведёт в бридж br2, а затем переделает на br3, а когда очередь дойдёт до br4, он снова сделает симлинк на br1.

    Таким образом получается круговая ротация: каждая новая виртуалка заходит в br1, br2, br3, br4 по очереди. Все сетевые интерфейсы будут утилизированы виртуалками по очереди, вот так вот!

    # /usr/bin/qemu-system-x86_64 -nic tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown

    Пользуйтесь на здоровье, у кого много сетевых портов на сервере!

    А чтобы виртуалки могли выходить в сеть, не забудьте настроить iptables:

    iptables -t filter -A FORWARD -i br1 -j ACCEPT
    iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
    
    iptables -t filter -A FORWARD -i br2 -j ACCEPT
    iptables -t nat -A POSTROUTING -o eno2 -j MASQUERADE
    
    iptables -t filter -A FORWARD -i br3 -j ACCEPT
    iptables -t nat -A POSTROUTING -o eno3 -j MASQUERADE
    
    iptables -t filter -A FORWARD -i br4 -j ACCEPT
    iptables -t nat -A POSTROUTING -o eno4 -j MASQUERADE
    
    sysctl -w net.ipv4.ip_forward=1
★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 6)

Ответ на: комментарий от Spoofing

Я по твоему поводу вообще не парюсь. У тебя был просто плохой старт и то, что люди проскакивают по накатанной у тебя заняло годы блужданий в потёмках. Хотя, мне не верится, что про бондинг ты только что узнал.

imul ★★★★★
()
Ответ на: комментарий от hateWin

Годы идут, кровать становится больше, подкроватные серверы наращивают юниты. А всё остальное определяется тем сколько раз крайняя плоть подвёрнута. У кого-то просто судьба переизобретать колёса и велосипеды.

imul ★★★★★
()
Ответ на: комментарий от I_one

почитал, спасибо, хоть там небыло никакой конкретики в плане технических решений и реализации, но доводы получились интересные.

про bridge правда так и не понял, хорошо это или плохо.

потому что в конце статьи как раз пишут, что bridge нормальный. и не нужно лишний раз выпендриваться.

я пока останусь на bridge, на может быть на досуге соберу тестовый сервер второй такой же и попробую на нём альтернативные пути решения по превращению сервера в тупой свитч с виртуалками.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

я лично делал замеры производительности и macvtap меньше грузит систему. также мне удавалось ложить bridge на максимальных нагрузках … посему пока не поставили сервер в работу рассмотрите macvtap … из минусов могу отметить что с macvtap недоступны ресурсы виртуалок с хоста, но это невсегда и нужно … при этом сами виртуалки могут видеть друг друга …

I_one
()
Ответ на: комментарий от hobbit

Можете на уровне движка запилить коррекцию на большую букву после точки? Мне эти альтернативно образованные уже новую психику торчат.

untitl3d
()
Ответ на: комментарий от untitl3d

Идея стоящая, правда, тут уже сделали автозамену компьютерных кавычек на типографские — образовалась целая партия недовольных. С большими буквами, чую, ещё одна партия будет.

Наверное, проще просто не читать такие комменты. Ну не хочет он, чтобы ты его читал, насильно мил не будешь.

hobbit ★★★★★
()
Ответ на: комментарий от untitl3d

Можете на уровне движка запилить коррекцию на большую букву после точки? Мне эти альтернативно образованные уже новую психику торчат.

А с сокращениями как быть?

ex-kiev
()

А не проще ли сделать один бридж, добавить в него все eth интерфейсы в качестве портов, пометить эти порты как изолированные (чтобы бридж не коммутировал кадры с одного eth на другой eth – это не даст образоваться петле в коммутации). А распределение нагрузки оставить на волю случая: когда виртуалка будет отвечать на ARP запрос, кадр от виртуалки скоммутируется через какой-то случайный eth и MAC-адрес виртуалки осядет в таблице коммутации внешнего(их) коммутатора(ов) на этом случайном порту.

ip link add name br1 type bridge
ip link set dev br1 type bridge stp_state 0
ip link set dev eno1 master br1
ip link set dev eno2 master br1
ip link set dev eno3 master br1
ip link set dev eno4 master br1
ip link set dev eno1 type bridge_slave isolated on
ip link set dev eno2 type bridge_slave isolated on
ip link set dev eno3 type bridge_slave isolated on
ip link set dev eno4 type bridge_slave isolated on
ip link set dev eno1 up
ip link set dev eno2 up
ip link set dev eno3 up
ip link set dev eno4 up
ip link set dev br1 up
iliyap ★★★★★
()

Дожили. Так никто не делает :( Предлагаю убрать статью как вредную. Как правильно уже тут написали вся куча интерфейсов лепиться в бондинг. А его уже нарезают по вланам бриджами.

mx__ ★★★★★
()

Как утилизировать

экологично

slackwarrior ★★★★★
()
Ответ на: комментарий от Spoofing

Ты конечно молодец, но есть такая вещь, как агрегирование каналов или bonding: http://xgu.ru/wiki/Linux_Bonding

Т.е. несколько Ethernet портов ты объединяешь в один и получаешь виртуальное сетевое устройство с пропускной суммарной способностью этих портов.

На свиче тоже нужно настроить агрегирование портов.

И далее ты делаешь bridge виртуального tap интерфейса не с конкретной сетевой картой. А с виртуальным агрегированным портом.

Но у тебя свич тоже должен быть настроен.

kostik87 ★★★★★
()
Ответ на: комментарий от vodz

Тот самый вопрос, что и у меня сразу возник. Ответа, вероятно, не будет =)

shlag
()
Ответ на: комментарий от hobbit

Еще удалять пробелы перед знаками препинания! Для этих еще можно -1 к скору за каждый знак!

untitl3d
()

хм, интересное решение.
я в своем случае делал через openvswitch/vlan.
бондил при необходимости физику, пускал транки в ovs и нарезал аксессные порты с нужными vlan в виртуалки(kvm/qemu).

etwrq ★★★★★
()

Поздравляю - ты изобрел аналог балансировки по id виртуальной машины между несколькими сетевухами в vmware esxi.

А так - за реализацию зачет...

P.S. Был бы, если б ты предусмотрел еще что будет с виртуалками если одна из сетевух таки сдохнет :-)

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от etwrq

бондил при необходимости физику

Тут трюк в том, что можно обойтись тупым свичем на той стороне(LACP нинужен). Правда обработка фэйлов сетевух(миграция виртуалок на оставшиеся живые) - это тогда отдельная головная боль.

Pinkbyte ★★★★★
()
Ответ на: комментарий от nebularia

ну я просто работал пекарем всю жизнь. у меня были только обычные стационарные компьютеры.

вот ты лежишь на кровати, смотришь на 5 жёстких дисков, — а что если их объеденить? и таким образом изобретаешь рейд. начинаешь гуглить. узнаешь, что такое есть.

а вот я лежу на кровати, смотрю, что у меня в компьютере один езернет-порт. и что? что я думаю? а ничего не думаю.

год назад я переехал в МСК на работу связанную с серверами. сейчас спустя год, войдя в колею, я лежу и смотрю на 4 езернет порта и думаю «а что если...»

понимаешь? я только сейчас увидел, что их может быть 4 и что с ними можно что-то сделать.

Spoofing ★★★★★
() автор топика

Охренеть ты всё-таки не очень умный *FACEPALM*

targitaj ★★★★★
()
Ответ на: комментарий от dataman

ну, FLR 561-T - 10-гбитная платочка
типа он по нищебродски тут велосипеды изобретает, а ты алегарх с 10 гбит! воображаю, что он про обладателей MCX4121A-ACFT напишет ))
а я не понял глубокий замысел, не проще ли просто bonding сделать?

mumpster ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.