Здравствуйте уважаемое хабросообщество
Понадобившись в один прекрасный день настроить агрегирование сетевых интерфейсов на рабочем сервере, но (к большому удивлению) не найдя ни одной статьи на хабре про технологию ipmp, решил написать не большой очерк-ман по установке и внедрению IPMP (IP Multipathing) в Solaris 10. Хочу сразу предупредить, что статья несет в основном практическую нагрузку, поэтому заранее извиняюсь если где то не в полном объеме раскрыл теоретическую составляющую данной темы.
И так все работы были выполнены на сервере Oracle Sun T3-1, с пропатченным ILOM-м, Solaris 10 на борту и двумя сетевыми карточками igb0 и igb1.
root@s1-solaris1#cat /etc/release
Oracle Solaris 10 8/11 s10s_u10wos_17b SPARC
Copyright © 1983, 2011, Oracle and/or its affiliates. All rights reserved.
Assembled 23 August 2011
root@s1-solaris1#uname -a
SunOS s1-solaris1 5.10 Generic_147440-09 sun4v sparc sun4v
Но сначала немного теории:
IPMP — это технология объединения физических каналов (интерфейсов), для балансировки нагрузки исходящего трафика и отказоустойчивости входящего трафика. В solaris-е, ipmp присутствует начиная с 8-ой версии и управляется демоном in.mpathd.
IPMP может работать в двух режимах
— Probe mode
— Link-state mode
Probe mode — это режим работы при котором, сервер посылает icmp запросы до шлюза или хоста в сети (в solaris могут быть настроены до нескольких таких проверочных хостов) и на основания этого проверяет работоспособность линка.
Link-state mode — проверяет доступность канала связи по физическому состоянию сетевого интерфейса, т.е. в каком состоянии находится интерфейс, up/down.
Ну вроде и все, теории достаточно-), если что пропустил, прошу простить.
И так, теперь самое интересное
В моем случае, был настроен probe mode ipmp, с адресами:
igb0 — 10.0.0.1
igb1 — 10.0.0.2
igb0:1 (ipmp virt-address) — 10.0.0.3
Приведем конфигурационные файлы интерфейсов к следующему виду:
root@s1-solaris1# cat /etc/hostname.igb0
s1-solaris1-igb0 netmask + broadcast + deprecated -failover group IPMP-1
addif s1-solaris1 netmask + broadcast +
root@s1-solaris1# cat /etc/hostname.igb1
s1-solaris1-igb1 netmask + broadcast + deprecated -failover group IPMP-1
В значение group IPMP-1 вписываем любое удобное для вас имя группы. Не буду расписывать все значения (broadcast, deprecated, failover...), т.к. в статье делается упор на практическое применение ipmp, определение данных значений можно увидеть в man ifconfig.
Так же, нам потребуется отредактировать файл /etc/hosts:
root@s1-solaris1# cat /etc/hosts
#
# Internet host table
#
::1 localhost
127.0.0.1 localhost
10.0.0.3 s1-solaris1 s1-solaris1.name.domain.ru loghost
10.0.0.1 s1-solaris1-igb0
10.1.0.2 s1-solaris1-igb1
И перегрузить систему, для того чтоб убедиться, что интерфейсы у нас поднимаются с выше приведенными настройками
root@s1-solaris1#init 6
Проверим вывод ifconfig -a, у нас должен появиться виртуальный интерфейса igb0:1
root@s1-solaris1# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
igb0: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2
inet 10.0.0.1 netmask ffffff00 broadcast 10.0.0.255
groupname IPMP-1
ether 0:21:28:d2:1c:c6
igb0:1: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 10.0.0.3 netmask ffffff00 broadcast 10.0.0.255
igb1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 3
inet 10.0.0.2 netmask ffffff00 broadcast 10.0.0.255
groupname IPMP-1
ether 0:21:28:d2:1c:c7
Цель достигнута. Виртуальный интерфейс ibg0:1 работает, ссылаясь на интерфейс igb0. Проверим это с помощью if_mpadm:
root@s1-solaris1#if_mpadm -d igb0
ключ -d (detach) переводит интерфейс в режим офлайн.
Смотрим вывод ifconfig, функцию виртуального интерфейса возьмет на себя igb1, создав sub интерфейс igb1:1
root@s1-solaris1# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
igb0: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2
inet 10.0.0.1 netmask ffffff00 broadcast 10.0.0.255
groupname IPMP-1
ether 0:21:28:d2:1c:c6
igb1: flags=9040842<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 3
inet 10.0.0.2 netmask ffffff00 broadcast 10.0.0.255
groupname IPMP-1
ether 0:21:28:d2:1c:c7
igb1:1: flags=1000843<BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
inet 10.0.0.3 netmask ffffff00 broadcast 10.0.0.255
Вернем все обратно, при помощи ключа -r (reattach)
root@s1-solaris1#if_mpadm -r igb0
Ну и напоследок, probe based mode по умолчанию пингует дефолтные маршруты, чтоб удостоверится в активности сетевой карты, а если его нет, то пингует multicast address 224.0.0.1, так что в зависимости от конкретной ситуации, нужно будит добавить данный маршрут:
root@s1-solaris1#route add default 10.0.0.10
Вот и все. Спасибо за внимание.
Автор: DamDamich