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)

Типа автоматическая равномерная раздача виртуалкам железных портов. Если они часто поднимаются и грохаются то наверное полезно.

LINUX-ORG-RU ★★★★★
()

Слишком много восклицательных знаков.

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

а вы, наверное, из тех, что покупают FLR 561-T 10гбит медь и используют один порт для всего.

завидую вам. можете себе позволить.

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

да, конечно, у меня прямо сейчас крутятся виртуалки в этих бриджах, при том, что сами bridge-интерфейсы и ethernet-интерфейсы не имеют айпи адресов: сама хост система не имеет выхода в сеть, у неё нету default маршрута. а вот виртуалки прекрасно себя чувствуют в локалке! получают IP-адреса, как обычные физические хосты, подключаюсь к ним напрямую и делаю всякое.

пока у меня этот нюанс не автоматизирован, при запуске сервера я первую виртуалку запускаю через консоль в iLO, а затем уже подключившись к виртуалке запускаю всё остальное. вообще классно, получилось, мне очень нравится.

# qemu-system-x86_64 -enable-kvm -smp 1 -m 1G
-nic tap,ifname=tap$[RANDOM],mac=52:54:00:00:00:01,script=/etc/qemu-ifup.br0,downscript=/etc/qemu-ifdown.br0
-nic tap,ifname=tap$[RANDOM],mac=$(printf '52:54:00:%02X:%02X:%02X' $[RANDOM%256] $[RANDOM%256] $[RANDOM%256]),script=/etc/qemu-ifup.br2,downscript=/etc/qemu-ifdown.br2
-daemonize -vnc :0,to=99,id=default
-drive file=$HOME/vm/crux_gnulinux-kvm-root-server.img,format=raw

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

subnet 10.0.0.0 netmask 255.255.255.0 {
	option domain-name-servers 10.0.0.254;
	option broadcast-address 10.0.0.255;
	option routers 10.0.0.254;
	range dynamic-bootp 10.0.0.1 10.0.0.254;

	host kvm-root-server     { hardware ethernet 52:54:00:00:00:01; fixed-address 10.0.0.1; }
	host kvm-root-server-alt { hardware ethernet 52:54:00:00:00:02; fixed-address 10.0.0.2; }

	host kvm-root-server-current { hardware ethernet 52:54:00:00:00:fb; fixed-address 10.0.0.251; }
	host kvm-root-server-testing { hardware ethernet 52:54:00:00:00:fc; fixed-address 10.0.0.252; }
	host kvm-root-server-vanilla { hardware ethernet 52:54:00:00:00:fd; fixed-address 10.0.0.253; }

	host kvm-ftp1-server-vsftpd { hardware ethernet 52:54:00:00:00:15; fixed-address 10.0.0.21; }

	host kvm-root-server-nginx { hardware ethernet 52:54:00:00:00:50; fixed-address 10.0.0.80; }
	host kvm-www1-server-nginx-php-sqlite { hardware ethernet 52:54:00:00:00:51; fixed-address 10.0.0.81; }
	host kvm-www2-server-nginx-php-sqlite { hardware ethernet 52:54:00:00:00:52; fixed-address 10.0.0.82; }
}

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

ну br0 у меня используется для внутренней сети сервера 10.0.0.0/24 чтобы с виртуалки на виртуалку далеко не ходить, а br1,2,3,4 это уже ethernet-интерфейсы.

грубо говоря мягко выражаясь, мы из полноценного сервака сделали тупой свитч пускающий виртуалки))

Spoofing ★★★★★
() автор топика
Последнее исправление: Spoofing (всего исправлений: 4)

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

По сути статьи вопрос такой: а это нормально, что в /etc постоянно симлинки перетираются? Это всё-таки /etc, а не /var.

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

дело не моё, сайт ваш, но кмк вы слишком заморачиваетесь по поводу орфографии. сама суть мысли, идеи, укладывается в несколько строчек, чтобы сделать «тупой», «неуправляемый» свитч из имеющихся портов, и показано, какие команды ввести, чтобы программно создать виртуальные свитчи (бриджи), на это всё.

тут сможет разобраться даже начинающий пользователь, что если мы таким образом «оболваним» порты — они всё равно будут работать, потому что сама сеть функционирует на более низком уровне, нежели TCP/IP, и для того, чтобы сеть работала, ей вообще не нужен никакой TCP/IP — IP не нужен для физических ethernet-портов.

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

остапа опять несёт... прошу прощения.

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

куда хуже когда в статье много воды, за то каждая запятая на своём месте, ага. а в самом конце, самое последнее предложение, это всё то, о чём до этого лилась вода))) то есть, когда одним единственным последним предложением можно было бы заменить всю статью целиком.

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

короч мой совет администрации ЛОРа не морочиться по поводу орфографии. и понять, что даже сломанные вещи могут иметь куда бОльшую ценность, чем все другие «нормальные».

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

и не нужно лишний раз трясти яйцами, показывать, какой ты весь из себя автор-писатель

Орфография и пунктуация — это не «трясти яйцами» и не «весь из себя», в том и дело. Это совершенно стандартная норма, элементарное уважение к читателю. Ну как смыть за собой унитаз, например.

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

Теперь ты один из нас, да.

А если серьёзно…

куда хуже когда в статье много воды, за то каждая запятая на своём месте, ага.

А зачем противопоставлять форму содержанию? Написал так, как будто содержательная статья обязательно должна быть с кучей ошибок и наоборот. Выглядит как эталонная ложная дилемма из Палаты мер и весов.

и понять, что даже сломанные вещи могут иметь куда бОльшую ценность, чем все другие «нормальные»

Если бы я это не понимал — не морочился бы с редактированием :)))

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

Открывай стартап

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

сайт ваш

Воот. :/ А я предпочитаю думать «сайт НАШ». И дело не в моём модераторском статусе, я как пришёл в модераторы, так и уйду. ЛОР — мой дом, я сюда хожу каждый день, как и многие другие. И хочу, чтобы в доме было чисто и уютно. Ну и интересно тоже, статьи этому способствуют.

hobbit ★★★★★
()

Создаем четыре бриджа

😦 … Ладно.

Entmatix
()

А не проще агрегировать все физические интерфейсы в один и уже от него давать виртуалкам виртуальные интерфейсы без чехарды с симлинками?

imul ★★★★★
()

А почему виртуалки должны упираться в сеть? Там скорее в целом сервер по I/O будет захлёбываться, полно других узких мест вроде дисковой подсистемы и общей медлительности старого железа.

Также непонятен тэг «домашний сервер». Дома оно будет гудеть как самолёт.

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

а как именно виртуалка поймёт через какой именно реальный физический сетевой интерфейс ей надо выйти в сеть?

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

а если бридж будет один, а в него подключить все 4 физических интерфейса — прилетать будет со всех четырёх, так? и как тогда виртуалкам понимать, через какой именно какая должна выходить в сеть?

здесь именно что бридж всё решает. своего рода namespace создаётся в виде бриджа, «тупого» свитча.

а иначе как ещё???

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

дисковая подсистема у меня быстрая! NVMe-диск СЛМСУНГ на 250 гигабайт!

процессор КСЕОН 2609v3, 6 ядер!

в виртуалках работает dhcpd, named, nginx, php, sqlite! и всё летает!!!

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

супер, спасибо! сперва вбил в гугле «bonding,» но он выдал каких-то тётенек в чёрном! изменил на «bonding linux» и тогда нашёл что нужно!

это получается прямо как RAID из сетевых интерфейсов, имеющий различные режимы работы, резерв, зеркалирование и т.д., очень здорово придумали, молодцы!

но думаю остановлюсь пока на бриджах. если проблем с ними не возникает, то не вижу причин их не использовать. это же тупой свитч. чем решение проще, тем оно вернее!

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

Виртуалке не нужно знать ни через какой физ.интерфейс она куда-то пойдёт, ни вообще догадываться о каких-то физических интерфейсах. Я не совсем понимаю, какую именно задачу ты пытаешься решать именно таким способом. Но, ничего, я подожду следующие твои посты про «я узнал что такое агрегация» и «я узнал про маршрутизацию на основе политик», а там уже видно будет.

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

сперва вбил в гугле «bonding,» но он выдал каких-то тётенек в чёрном! изменил на «bonding linux» и тогда нашёл что нужно!

Я думал что хотя бы год-два пройдёт. Даже не надеялся что всё случится прямо в этом топике. Теперь гугли policy-routing.

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

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

вот тебе свитч, втыкаешь туда кабель и всё само, всё само ходит. как и происходит с виртуалками в случае с бриджами. на «гипервизоре» (CRUX с qemu) даже маршрута default нету, все виртуалки гуляют напрямую в реальные физические сетевые интерфейсы! это просто бомбезно и я не вижу зачем что-то менять, что-то чем-то управлять, настраивать политики чтобы что? оно само по себе просто берёт и работает! и это круто! пусть так и останется.

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

Ладно, не получилось. Спуфа учить — только портить. Подожду пару лет.

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

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

raw потому что такой образ можно dd'шнуть на жёсткий диск и загрузиться с него на любом реальном компьютере.

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

это вы намекаете на то, что, пакеты которые прилетают от одной виртуалки в бридж (коммутатор), видны всем остальным, кто тоже подключен в этот коммутатор? ну и что? провайдеры же вон подключают соседей в один в коммутатор и всем пофигу, все живут, нормально.

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

ерунда какая...

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

вторую сетевуху я думал воткнуть, но пока выбираю между 331FLR 4-х портовой 1гбит и 561FLR-T 2-х портовой 10гбит, — если встроенные порты я использую как-бы на приём трафика, то вторую сетевую планировал использовать на выдачу трафика, чтобы там была уже своя подсеть, чтобы так же сделать один общий бридж, уже для всех портов второй сетевой карты, и раздать там свою локалку. вооот.

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

от рута потому что а что ей будет-то от рута?

Э… Я даже не знаю, что на это ответить. Я в замешательстве. Как человек, настраивающий и ослуживающий компьютерные системы за деньги, может не знать о принципе наименьших привелегий? Есть девайсы, которые qemu не может пробросить внутрь без рута. Но для таких целей есть libvirt.

что а что ей будет-то от рута

То есть, возможность существования дыр в qemu ты отрицаешь, да? Короче, я не понимаю, как ты умудряешься зарабатывать деньги, работая сисадмином, если ты не знаешь о том, что лишний раз давать кому-то рут-доступ очень опасно. Я не ставлю себе цель оскорбить тебя, я просто фаломорфирую при чтении этой феерии.

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

raw потому что такой образ можно dd’шнуть на жёсткий диск и загрузиться с него на любом реальном компьютере

И зачем это нужно? У тебя дисковое пространство бесконечное?

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

У тебя дисковое пространство бесконечное?

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

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

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

Подожди, он уехал из Сосновоборска в Москву после того, как кто-то заинтересовался booty. С точки зрения работодателя – какая мотивация импортировать отверточников аж из Сосновоборска? Разве что они сильнее дорожат работой в столице.

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

если ты выделяешь условно 10гб на виртуалку, ты должен отдавать себе отчёт, что всё, ты их отдал другому компьютеру, забудь про эти 10гб на своём диске

Почему? Если реально система внутри занимает, скажем, пять гигов, почему бы не сэкономить остальные пять?

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

я не просто отвёрточник))) я отвёрточник с огромным стажем в линуксах))) это как если профессионального водителя формулы-1 посадить водить такси, например. мой уровень профессионализма позволяет себя чувствовать уверенно себя в моей работе. я выполняю её на все 1000%. вот. поэтому это очень здорово, я считаю.

ну а что я не являюсь профессиональным системным администратором, не являюсь профессиональным сетевиком, например, дак тож ерунда, я для себя, в своё удовольствие вот линуксы ковыряю, сервер настроил, виртуалки там, сижу, код на пхп4 пишу и кайфую!))) и с вами рад похоливарить на ЛОРе, о том, о сём.

всё круто, всё ништяк. не знаю чего вы паритесь))

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

ты рассуждаешь как страховая компания, которая уверена, все машины в мире никогда не столкнутся одновременно. да. не столкнутся. но сам факт.

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

но факт! сам факт! гарантия выделенных ресурсов! иначе просто нельзя. вот теперь я вас отказываюсь понимать.

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

всё круто, всё ништяк. не знаю чего вы паритесь))

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

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

Чтобы никто не сталкивался – есть дисковые квоты. Собственно, сам формат qcow2 берет на себя функцию дисковой квоты. Он гарантирует, что виртуалка займет не более N гигабайт.

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

у неё нету default маршрута. а вот виртуалки прекрасно себя чувствуют в локалке! получают IP-адреса, как обычные физические хосты, подключаюсь к ним напрямую и делаю всякое.

И зачем вам тогда MASQUERADE?

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

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

что значит гарантирует, что виртуалка не займёт более 5гбайт?

ты выделяешь виртуалке 10гбайт, а сам дисковой квоте говоришь что нельзя использовать более 5гбайт? лол что???

ещё раз, сколько выделил, столько выделил. всё!!! забудь ты о них!!!

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

я отвёрточник с огромным стажем в линуксах

Время использования линукса в качестве основной ОС не гарантирует понимание основ безопасности.

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

ты выделяешь виртуалке 10гбайт, а сам дисковой квоте говоришь что нельзя использовать более 5гбайт? лол что???

Ты там водку хлещешь? Почитай мануал по qemu, что ли. 10 гигов – максимальный объем, который может занять виртуальный диск на диске физическом. Этот объем видит операционная система, работающая внутри виртуалки. Но рельный объем на диске может быть меньше, если виртуалка использует, скажем, 8 гигабайт из 10.

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

Сиська по PXE – это круто. А теперь почитай про libvirt и qcow2.

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

Я не знаю наверняка, какие у его работодателя с ним договорённости по поводу бутти, но Спуф на работе по всем его рассказам занимается железом.

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

Отвёрточник — это не ругательство и ничего плохого в этом нет, не комплексуй.

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