Пусть мы имеем следующие исходные параметры:
- сервер подключен к свичам через два адаптера
- в нашей сети имеются два диапазона IP адресов - 192.168.1.0/24 и 192.168.2.0/24
- эти сети разделены при помощи VLAN, ID сетей 10 и 20 соответственно
- адреса интерфейсов сервера - 192.168.1.10, 192.168.2.10
- ОС - RedHat 5 или совместимые - CentOS 5, Oracle Linux 5
Хочу обратить внимание. В данном примере (в отличие от классического варианта bonding) нам не нужно удваивать количество сетевых карт - мы будем использовать те, что есть (network teaming). Главное, что карт более одной.
Обязательно наличие прямого доступа к консоли - iLO card, KVM или подобное! Это связано с тем, что после перенастройки свичей и до перенастройки сетевых настроек сервера доступ к серверу через ssh будет невозможен.
Для начала попросим нашего network engineer подать на порты свичей оба VLAN'а, чтобы они были доступны с обоих сетевых адаптеров.
Останавливаем сеть:
# service network stop
После этого настроим сетевые адаптеры для принятия VLAN'ов. Для этого произведем изменения в файлах /etc/sysconfig/network-scripts/ifcfg-eth0 и /etc/sysconfig/network-scripts/ifcfg-eth1. Переходим в каталог /etc/sysconfig/network-scripts/ (нам там предстоит много работы ;) ). В любимом текстовом редакторе комментируем все параметры, за исключением двух - DEVICE и ONBOOT. Т.е. содержимое файлов будет следующим:
=======
ifcfg-eth0:
DEVICE=eth0
ONBOOT=yes
=======
ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
=======
Далее создаем файлы с описанием интерфейсов VLAN. Имена файлов выглядят как: ifcfg-
Нам нужно будет создать четыре файла (по два на каждый интерфейс): ifcfg-eth0.10, ifcfg-eth0.20, ifcfg-eth1.10, ifcfg-eth1.20
Содержимое данных файлов будет сразу содержать инструкции, позволяющие использовать bonding - обїединение нескольких интерфейсов в один. Сам bonding настраивать будем несколько позже. Сейчас просто берем на заметку, что у нас будет два логических интерфейса bond0 (для обеспечения работы 192.168.1.10) и bond1 (192.168.2.10 соотве
т
ственно)Сразу создаем два файла ifcfg-bond0 и ifcfg-bond1 - они нам понадобятся очень скоро.
Итак, возвращаемся к VLAN'ам. Последовательно наполняем содержимым файлики с описанием интерфейсов для VLAN.
=======
ifcfg-eth0.10:
DEVICE=eth0.10
ONBOOT=yes
BOOTPROTO=none
VLAN=yes
TYPE=Ethernet
USERCTL=no
MASTER=bond0
SLAVE=yes
=======
ifcfg-eth0.20:
DEVICE=eth0.20
ONBOOT=yes
BOOTPROTO=none
VLAN=yes
TYPE=Ethernet
USERCTL=no
MASTER=bond1
SLAVE=yes
=======
ifcfg-eth1.10:
DEVICE=eth1.10
ONBOOT=yes
BOOTPROTO=none
VLAN=yes
TYPE=Ethernet
USERCTL=no
MASTER=bond0
SLAVE=yes
=======
ifcfg-eth1.20:
DEVICE=eth1.20
ONBOOT=yes
BOOTPROTO=none
VLAN=yes
TYPE=Ethernet
USERCTL=no
MASTER=bond1
SLAVE=yes
=======
Хочу обратить внимание. При использовании bonding параметр HWADDR в ifcfg-ethX.X и в ifcfg-bondX указывать нельзя, т.к. возникнут проблемы при запуске сети. Однако можно (и иногда нужно) указывать в ifcfg-ethX.
Таким образом, мы привязываем VLAN 10 на bond0, VLAN 20 - на bond1
Последний этап - конфигурирование bond-интерфейсов. Сначала заполняем файлики ifcfg-bond0 и ifcfg-bond1:
=======
ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.1.10
NETWORK=192.168.1.0
NETMASK=255.255.255.0
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
=======
ifcfg-bond1
DEVICE=bond1
IPADDR=192.168.2.10
NETWORK=192.168.2.0
NETMASK=255.255.255.0
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
=======
Но пока не торопимся запускать сеть! Осталось совсем немного - нужно определить параметры модуля bonding.
Для этого идем в /etc/, и редактируем /etc/modprobe.conf. Добавляем туда строки:
alias bond0 bonding
alias bond1 bonding
options bond0 miimon=100 mode=active-backup max_bonds=2
options bond1 miimon=100 mode=active-backup max_bonds=2
В данном случае параметры означают: проверять состояние линков к свичам каждые 100мс, работать в режиме active-standby (одна карта активна, другая подключается только в случае проблем с первой), максимальное количество bond-интерфейсов - два (bond0 и bond1)
Полный список параметров модуля можно найти в документации к ядру или здесь
Ну, настройка собственно завершена. Осталось запустить сеть:
# service network start
Все должно работать.
Состояние виртуальных адаптеров можно посмотреть командой:
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0.10
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0.10
MII Status: up
Link Failure Count: 2
Permanent HW addr: 00:12:34:56:78:90
Slave Interface: eth1.10
MII Status: up
Link Failure Count: 1
Permanent HW addr: 00:12:34:56:78:91
PS. В качестве полезного дополнения крайне рекомендую прочитать также еще одну мою статью на эту же тему. В ней имеются важные дополнения, в частности, как определить primary interface для бондинга (через который идет трафик по умолчанию), что может быть очень важным при использовании множества интерфейсов и VLAN'ов одновременно.
Очень качественная статья! Набрел в Гугле, пока искал решение подобной задачи. Очень помогла. Спасибо за работу.
ВідповістиВидалитиСпасибо. Практически все статьи блога (за исключением 1-2х) - результат собственных исследований, причем проверенных на реальных задачах и реальном железе.
ВідповістиВидалитиОтличная статья, спасибо. Помогла мне в моих изысканиях.
ВідповістиВидалитиОднако я поднял VLANы через bond0.xxx не плодя дополнительных eth0.xxx и т.п.
И еще, в последних версиях CentOS необязательно править /etc/modprobe.conf, соответственно опции бондинга можно задать в описании интерфеса
напр.
BONDING_OPTS="mode=balance-tlb miimon=100"
> Однако я поднял VLANы через bond0.xxx не плодя дополнительных eth0.xxx и т.п.
ВідповістиВидалитиСпасибо за идею. Попробую. Я не знал, что так заработает.
> И еще, в последних версиях CentOS необязательно править /etc/modprobe.conf
Увы, обязательно. См. http://localhost/linux-unix/43.html
Без такой правки у меня интерфейсы нормально не поднялись
А у меня почему-то не сработал этот метод.
ВідповістиВидалитиПравда при загрузке ОС с моей рабочей станции прошли только два пинга и всё.
Сервер пингует своих соседей по сети, шлюз по-умолчанию, а вот дальше никуда не идёт.
Куда копать - ума не приложу.
Шлюз задан в файле: /etc/sysconfig/network
ВідповістиВидалитиЕсли шлюз пингуется - значит, почти наверняка, сеть на машине настроена верно. нужно смотреть в сторону маршрутизации. А именно:
ВідповістиВидалити- локальные таблицы маршрутов
- правильность имен интерфейсов
- настройки маршрутизации на шлюзе и "за ним"
Если бы сеть не работала, шлюз бы тоже был недоступен
Да, ОБЯЗАТЕЛЬНО стоит прочесть продолжение:
ВідповістиВидалитиhttp://localhost/linux-unix/43.html