Бонд. Джеймс Бонд или объединение сетевых интерфейсов (бондинг)
Ожидает приглашения
Подобная статья уже была от автора AccessForbidden: «Объединение сетевых интерфейсов в linux».
Эта статья именно о настройке, и установке. Пишу её потому, что недавно столкнулся с проблемами установки и настройки бондинга.
Ситуация была такова: Был стааренький компьютер на четырёх-поточном пентиуме, с гигабайтом ОЗУ, и встроенным гигабитным интерфейсом на мат.плате. Он был мне как шлюзом, так медиацентром, и NAS'ом. Но вот, когда уже дома появилось N-ное количество девайсов (телевизор, смартфоны и компьютеры) пропускной способности начало не хватать. Но была у меня хорошая интеловская сетевая карточка (тоже гигабитная) и я решил погуглить на тему объединения интерфейсов
Вообще, Ethernet bonding (если быть точнее) — это объединение двух или более физических сетевых интерфейсов в один виртуальный для обеспечения отказоустойчивости и повышения пропускной способности сети. Или (простым языком говоря)Raid для сетевых карт. Только их «заточенность» на пропускную способность, на одинакового производителя- не важна
Ну, для начала, нужно убедится, нуждаетесь вы в этом или нет (скорее всего, если вы это читаете, значит вам это возможно нужно...). Перед тем, как начнём, предупреждаю: делать нужно всё на сервере и от рута.
Итак, начнём!
Вставляем сет.карту, если не вставали. ну и подключаем к свитчу (коммутатору) или роутеру обе карты
Теперь, нам нужно поставить ifenslave. на данный момент, актуальна версия 2.6. Ставим:
Теперь, нам нужно выключить интерфейсы, которые мы объединяем (в моём случае, это — eth0, eth1).
Ну и останавливаем сеть:
Теперь нам нужно настроить файл /etc/network/interfaces
Поскольку показываю, как делал я, у меня он
И привёл я его к
Хочу обратить ваше внимание на:
Первое — если у вас dhcp сервер, то в /etc/default/isc-dhcp-server, в Interfaces я указал bond0. так и с остальными серверами.
Второе — тоже про dhcp. если у вас оный сервер, то в address, netmask, network bond'а0, указываем те же параметры что и у интерфейса на который до этого, работал dhcp
Третье — должен быть только bond0 (0 — в данном случае. Кстати, их может быть куча). Интерфейсы, которые мы объединили написав в строку slaves, мы убираем.
После сделанного пишем (в терминале уже):
Для проверки :
Можно ещё добавлять интерфейсы bond0:0 и т.д.
Подходящий для вас режим, указывайте в /etc/network/interfaces в строке: bond-mode.
Эта статья именно о настройке, и установке. Пишу её потому, что недавно столкнулся с проблемами установки и настройки бондинга.
Ситуация была такова: Был стааренький компьютер на четырёх-поточном пентиуме, с гигабайтом ОЗУ, и встроенным гигабитным интерфейсом на мат.плате. Он был мне как шлюзом, так медиацентром, и NAS'ом. Но вот, когда уже дома появилось N-ное количество девайсов (телевизор, смартфоны и компьютеры) пропускной способности начало не хватать. Но была у меня хорошая интеловская сетевая карточка (тоже гигабитная) и я решил погуглить на тему объединения интерфейсов
Вообще, Ethernet bonding (если быть точнее) — это объединение двух или более физических сетевых интерфейсов в один виртуальный для обеспечения отказоустойчивости и повышения пропускной способности сети. Или (простым языком говоря)Raid для сетевых карт. Только их «заточенность» на пропускную способность, на одинакового производителя- не важна
Ну, для начала, нужно убедится, нуждаетесь вы в этом или нет (скорее всего, если вы это читаете, значит вам это возможно нужно...). Перед тем, как начнём, предупреждаю: делать нужно всё на сервере и от рута.
Итак, начнём!
Вставляем сет.карту, если не вставали. ну и подключаем к свитчу (коммутатору) или роутеру обе карты
Этап подготовки:
Теперь, нам нужно поставить ifenslave. на данный момент, актуальна версия 2.6. Ставим:
apt-get install ifenslave-2.6
Теперь, нам нужно выключить интерфейсы, которые мы объединяем (в моём случае, это — eth0, eth1).
ifdown eth0
ifdown eth1
Ну и останавливаем сеть:
/etc/init.d/networking stop
Этап настройки:
Теперь нам нужно настроить файл /etc/network/interfaces
nano /etc/network/interfaces
(я лично пользуюсь «нано»).Поскольку показываю, как делал я, у меня он
вот, такой:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto usb0
allow-hotplug usb0
iface usb0 inet dhcp
auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
auto eth1
iface eth1 inet dhcp
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto usb0
allow-hotplug usb0
iface usb0 inet dhcp
auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
auto eth1
iface eth1 inet dhcp
И привёл я его к
вот-такому виду:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto usb0
allow-hotplug usb0
iface usb0 inet dhcp
auto bond0
iface bond0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
slaves eth0 eth1
bond-mode balance-rr
bond-miimon 100
bond-downdelay 200
bond-updelay 200
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto usb0
allow-hotplug usb0
iface usb0 inet dhcp
auto bond0
iface bond0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
slaves eth0 eth1
bond-mode balance-rr
bond-miimon 100
bond-downdelay 200
bond-updelay 200
Хочу обратить ваше внимание на:
Первое — если у вас dhcp сервер, то в /etc/default/isc-dhcp-server, в Interfaces я указал bond0. так и с остальными серверами.
Второе — тоже про dhcp. если у вас оный сервер, то в address, netmask, network bond'а0, указываем те же параметры что и у интерфейса на который до этого, работал dhcp
Третье — должен быть только bond0 (0 — в данном случае. Кстати, их может быть куча). Интерфейсы, которые мы объединили написав в строку slaves, мы убираем.
После сделанного пишем (в терминале уже):
ifup bond0
Только его!/etc/init.d/networking start
«включаем» сеть. Кстати на ошибки можно не обращать внимания. Они не критичны.reboot
Можем перезагрузится.Для проверки :
ifconfig
И получаем:
bond0 Link encap:Ethernet HWaddr 00:16:e6:4d:5e:05
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::216:e6ff:fe4d:5e05/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:33518 errors:0 dropped:0 overruns:0 frame:0
TX packets:30062 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6687125 (6.3 MiB) TX bytes:17962008 (17.1 MiB)
eth0 Link encap:Ethernet HWaddr 00:16:e6:4d:5e:05
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:16630 errors:0 dropped:0 overruns:0 frame:0
TX packets:15031 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3288730 (3.1 MiB) TX bytes:8966465 (8.5 MiB)
Interrupt:43 Base address:0x6000
eth1 Link encap:Ethernet HWaddr 00:16:e6:4d:5e:05
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:16888 errors:0 dropped:0 overruns:0 frame:0
TX packets:15031 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3398395 (3.2 MiB) TX bytes:8995543 (8.5 MiB)
Interrupt:17 Memory:e1080000-e10a0000
bond0 Link encap:Ethernet HWaddr 00:16:e6:4d:5e:05
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::216:e6ff:fe4d:5e05/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:33518 errors:0 dropped:0 overruns:0 frame:0
TX packets:30062 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6687125 (6.3 MiB) TX bytes:17962008 (17.1 MiB)
eth0 Link encap:Ethernet HWaddr 00:16:e6:4d:5e:05
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:16630 errors:0 dropped:0 overruns:0 frame:0
TX packets:15031 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3288730 (3.1 MiB) TX bytes:8966465 (8.5 MiB)
Interrupt:43 Base address:0x6000
eth1 Link encap:Ethernet HWaddr 00:16:e6:4d:5e:05
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:16888 errors:0 dropped:0 overruns:0 frame:0
TX packets:15031 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3398395 (3.2 MiB) TX bytes:8995543 (8.5 MiB)
Interrupt:17 Memory:e1080000-e10a0000
Можно ещё добавлять интерфейсы bond0:0 и т.д.
Вообще «бондинг» под Linux может работать в следующих режимах::
0 — balance-rr — (round-robin) — режим циклического выбора активного интерфейса для исходящего трафика (рекомендован для включения по умолчанию, не требует применения специальных коммутаторов);
1 — active-backup — активен только один интерфейс, остальные в режиме горячей замены (самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов);
2 — balance-xor — режим, в котором каждый получатель закрепляется за одним из физических интерфейсов, который выбирается по специальной формуле (не требует применения специальных коммутаторов);
3 — broadcast — трафик идет через все интерфейсы одновременно (примитивный и потенциально конфликтный режим);
4 — 802.3ad — (dynamic link aggregation) — в группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки);
5 — balance-tlb — (adaptive transmit load balancing) — исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт);
6 — balance-alb — (adaptive load balancing) — включает в себя balance-tlb, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).
0 — balance-rr — (round-robin) — режим циклического выбора активного интерфейса для исходящего трафика (рекомендован для включения по умолчанию, не требует применения специальных коммутаторов);
1 — active-backup — активен только один интерфейс, остальные в режиме горячей замены (самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов);
2 — balance-xor — режим, в котором каждый получатель закрепляется за одним из физических интерфейсов, который выбирается по специальной формуле (не требует применения специальных коммутаторов);
3 — broadcast — трафик идет через все интерфейсы одновременно (примитивный и потенциально конфликтный режим);
4 — 802.3ad — (dynamic link aggregation) — в группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки);
5 — balance-tlb — (adaptive transmit load balancing) — исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт);
6 — balance-alb — (adaptive load balancing) — включает в себя balance-tlb, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).
Подходящий для вас режим, указывайте в /etc/network/interfaces в строке: bond-mode.