Объединение (bonding) сетевых интерфейсов в linuxОбъединение сетевых интерфейсов может производиться для обеспечения отказоустойчивости или увеличения пропускной способности. В Linux это носит название - BONDING интерфейсов, в windows - Teaming интерфейсов. Так же объединение интерфейсов может помочь в случае если физически присутствует несколько интерфейсов, используется один ip-адрес, но при старте OS порядок интерфейсов (eth0, eth1...) меняется произвольным образом. В последнем случае правильнее будет корректно прописать соответствие мак-адреса имени интерфейса для udev, однако bonding также решит эту проблему и одновременно повысит отказоустойчивость. Если на теорию нет времени, то можно сразу перейти к решению, однако, в зависимости от поставленной задачи, необходимо как минимум определиться с типом объединения:
Типы объединения интерфейсов в Linux:
mode=0 (balance-rr)
Этот режим используется по-умолчанию, если в настройках не указано другое. balance-rr обеспечивает балансировку нагрузки и отказоустойчивость. В данном режиме пакеты отправляются "по кругу" от первого интерфейса к последнему и сначала. Если выходит из строя один из интерфейсов, пакеты отправляются на остальные оставшиеся.При подключении портов к разным коммутаторам, требует их настройки.
mode=1 (active-backup)
При active-backup один интерфейс работает в активном режиме, остальные в ожидающем. Если активный падает, управление передается одному из ожидающих. Не требует поддержки данной функциональности от коммутатора.
mode=2 (balance-xor)
Передача пакетов распределяется между объединенными интерфейсами по формуле ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.
mode=3 (broadcast)
Происходит передача во все объединенные интерфейсы, обеспечивая отказоустойчивость.
mode=4 (802.3ad)
Это динамическое объединение портов. В данном режиме можно получить значительное увеличение пропускной способности как входящего так и исходящего трафика, используя все объединенные интерфейсы. Требует поддержки режима от коммутатора, а так же (иногда) дополнительную настройку коммутатора.
mode=5 (balance-tlb)
Адаптивная балансировка нагрузки. При balance-tlb входящий трафик получается только активным интерфейсом, исходящий - распределяется в зависимости от текущей загрузки каждого интерфейса. Обеспечивается отказоустойчивость и распределение нагрузки исходящего трафика. Не требует специальной поддержки коммутатора.
mode=6 (balance-alb)
Адаптивная балансировка нагрузки (более совершенная). Обеспечивает балансировку нагрузки как исходящего (TLB, transmit load balancing), так и входящего трафика (для IPv4 через ARP). Не требует специальной поддержки коммутатором, но требует возможности изменять MAC-адрес устройства. Параметры:
miimon
Число мс (тип integer) – как часто производится мониторинг MII статуса. 0 – мониторинг отключен. Рекомендуемое значение 100 мс. downdelay
Задержка в мс (тип integer) с того момента, как было обнаружено, что связь пропала, до того, как данный канал перестанет использоваться. Задержка нужна, чтобы отфильтровывать кратковременные сбои. Например, после переключения патчкорда в течение нескольких секунд совсем не обязательно терять связь на минуту или больше. По умолчанию используется 0 – нет задержки.
updelay
То же самое, что и downdelay, но определяющее задержку по включению, на тот случай, если какой-нибудь switch или hub «не до конца включились». Напряжение на порт подано, а пакеты ещё корректно не принимаются. Если в этот момент передать данные – они потеряются, а если немного подождать, то этого не случится. arp_interval
С какой периодичностью в мс (тип integer) осуществлять ARP-мониторинг. Значение 0 означает что ARP-мониторинг выключен.
arp_ip_target
IP-адрес, по которому осуществлять ARP-мониторинг (в случае если arp_interval>0). Если с данного адреса нет ARP-ответов, то значит канал, по которому посылались запросы, не работает.
Решение на примере RHEL 5.6: 1. Проверить наличие и в случае отсутствия установить пакет ethtool # rpm -q ethtool ethtool-6-4.el5 в противном случае: # yum install ethtool
2. Добавляем модуль bonding в автозагрузку и определяем опции его запуска путем редактирования файла /etc/modprobe.conf (в CentOS 6 это файл /etc/modprobe.d/dist.conf). В конец файла добавляем следующее:
alias bond0 bonding options bond0 miimon=100 mode=0 downdelay=2000 updelay=5000
Внимание! в CentOS 6.x файл /etc/modprobe.conf отсутствует, вместо него точно так же редактируем /etc/modprobe.d/dist.conf
Загружаем модуль командой: #modprobe bonding mode=0 miimon=100 downdelay=2000 updelay=5000 Проверяем: # modprobe -l |grep bond /lib/modules/2.6.18-308.13.1.el5/kernel/drivers/net/bonding/bonding.ko /lib/modules/2.6.18-308.13.1.el5/kernel/drivers/net/tulip/winbond-840.ko #
3. Настраиваем сетевые интерфейсы. Создаем интерфейс bond0 #cd /etc/sysconfig/network-scrypts #>ifcfg-bond0 Редактируем конфигурацию интерфейса bond0
#mcedit ifcfg-bond0 DEVICE=bond0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.1 NETMASK=255.255.255.0 NETWORK=192.168.1.0 GATEWAY=192.168.1.100 USERCTL=no
Редактируем конфигурации физических интерфейсов вошедших в bond0 #mcedit ifcfg-eth0 DEVICE=eth0 ONBOOT=yes USERCTL=no MASTER=bond0 SLAVE=yes BOOTPROTO=none
#mcedit ifcfg-eth1
DEVICE=eth1 ONBOOT=yes USERCTL=no MASTER=bond0 SLAVE=yes BOOTPROTO=none 4. Рестартуем службу сети. #service network restart Shutting down interface eth1: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface bond0: [ OK ] # # ifconfig bond0 Link encap:Ethernet HWaddr 00:15:17:1B:CB:55 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::215:17ff:fe1b:cb55/64 Scope:Link UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:1088651 errors:0 dropped:0 overruns:0 frame:0 TX packets:712271 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:346664955 (330.6 MiB) TX bytes:98200162 (93.6 MiB)
eth0 Link encap:Ethernet HWaddr 00:15:17:1B:CB:55 UP BROADCAST SLAVE 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:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
eth1 Link encap:Ethernet HWaddr 00:15:17:1B:CB:55 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:1088658 errors:0 dropped:0 overruns:0 frame:0 TX packets:712287 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:346665375 (330.6 MiB) TX bytes:98202594 (93.6 MiB) Interrupt:169 Memory:28180000-281a0000
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:887600 errors:0 dropped:0 overruns:0 frame:0 TX packets:887600 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:50704392 (48.3 MiB) TX bytes:50704392 (48.3 MiB)
Готово.
|