вторник, 14 февраля 2012 г.

Bonding в RHEL. Новые горизонты :)



В связи с изменениями в оборудовании (пора, пора апгрейдиться ;) ) пришлось менять и схему бондинга.
Мы перешли на HP Proliant 645c G7 (блейды-"половинки") и Flex-10 карты. Особенности такого оборудования - на бокс выделяется две физических сетевушки и шесть виртуальных (всего восемь), между которыми делится скорость в 10+10Gbit. Вполне очевидно, что оптимальная схема включения - две карты по 10Gbit.

В этой связи смысл привязывать свой VLAN к каждой карте ( как это описано в предыдущей статье ) несколько теряется. зато появляется возможность значительно упростить схему подключения, сведя ее к классической "active-backup".

Основная задача все та же - если у нас вылетает один сетефой интефейс (один flex-10), все должно работать :)

Итак, начнем.

Самое первое, что нужно сделать (для блейдов) - это пойти на сайт HP и вытянуть диск обновления фирмвари. После чего обновить всю фирмварь бокса. Мне пришлось потратить два викенда, пока я решил проблему некорректной работы bonding. доходило до чудес: в одном enclosure стоят одинаковые модели блейдов, везде установленн RHEL, (а в одном случае - вообще полная копия на двух соседних блейдах), и при этом на части блейдов бондинг работает. а на части - нет! Точнее, переключение при симуляции сбоя оборудования происходит, но сеть теряется и не работает. В общем, помогло обновление фирмвари бокса до самой свежей из доступных.

Теперь прикинем схему включения. Согласно условиям задачи, мы имеем два сетевых адаптера, на которых подается tagged network (VLAN). Для простоты примем, что сетей две, vlan'ы 10 и 20. Собственно, если сетей будет больше, никаких особых сложностей не будет, просто добавится столько же дополнительных интерфейсов.

Схема включения будет простая: две физических интерфейса, объединены одним bond-интерфейсом в режиме active-backup, а сверху - виртуальные интефейсы для VLAN'ов.

Останавливаем сеть (только не забываем, что доступ к консоли все-таки нужно оставить :), например, через KVM)
# service network stop


Идем в /etc/sysconfig/network-scripts и правим описания физических интерфейсов eth0 и eth1:
- для eth0

DEVICE=eth0
ONBOOT=yes
HOTPLUG=no
SLAVE=yes
MASTER=bond0


- для eth1:

DEVICE=eth1
ONBOOT=yes
HOTPLUG=no
SLAVE=yes
MASTER=bond0


Обращаю внимание, что убран параметр HWADDR. Это сделано сознательно. На обоих интерфейсах у нас абсолютно одинаковые настройки, поэтому работать схема будет, даже если eth0 и eth1 поменять местами, а вот, если по какой-то причине будет перенастроен Flex-10, то сменятся MAC адреса сетевых карт и мы получим проблему - необходимость перенастраивать сеть. В общем, оставлять HWADDR или нет - админ должен принимать решение самостоятельно, в зависимости от конфигурации оборудования.

Теперь объединяем интерфейсы в один. Сначала правим /etc/modprobe.conf. Тут есть нюанс. В новых ядрах несколько изменили ряд функций, в результате чего для ядра 2.6.32 нужно написать следующее:

alias netdev-bond0 bonding
options bonding miimon=100


а для старого 2.6.18 остается все по-прежнему:

alias bond0 bonding
options bonding miimon=100


Впрочем, не исключено, что в новых версиях 2.6.18 будет добавлено это изменение. В общем, если при загрузке модуля bonding на консоле будет сообщение типа CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-bonding instead.
то нужно, согласно рекомендации, изменить имя в строке alias.

Теперь создаем описание нового интерфейса:
ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BONDING_OPTS="downdelay=200 updelay=60000 fail_over_mac=follow mode=active-backup"


Немного о параметре BONDING_OPTS, точнее, почему там именно такие значения.
- downdelay=200. Выбрано только потому, что такое значение решили поставить умные дяди из Citrix в своем XenServer :) На самом деле значение 0 тоже вполне себе работоспособно.
- updelay=60000. В принципе, можно ставить от 30 до 120 сек, 60 сек подобрано экспериментальным путем. Зависит от сложности топологии сети и времени на старт и "раскачку" оборудования после включения.
- fail_over_mac=follow. Обращаю внимание - параметр появился в 2.6.18, начиная от версии 194 и выше! Также обращаю внимание, что значение active корректно в моей схеме не заработало, начинается бардак с MAC адресами разных интерфейсов. Если так сложилось, что обновить ядро никак нельхя. параметр лучше совсем исключить из строки (оставить по умолчанию), но придется проверить, что сетевое оборудование отнесется к этому с пониманием.
- mode=active-backup. Ну тут. полагаю, особых вопросов не возникает. это режим работы бондинга, когда трафик идет через одну карту, а вторая - в резерве.

Дальше - совсем все просто. Создаем два (или сколько нужно) интерфейса, обслуживающих VLAN'ы, как обычно в RHEL:
ifcfg-bond0.10
DEVICE=bond0.20
ONBOOT=yes
BOOTPROTO=static
VLAN=yes
IPADDR=192.168.0.100
NETMASK=255.255.255.0

ifcfg-bond0.20
DEVICE=bond0.20
ONBOOT=yes
BOOTPROTO=static
VLAN=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0


Вот, собственно, и все. Осталось только запустить сеть, и все заработает
# service network start

Комментариев нет:

Отправить комментарий