null

Эволюция IPMP

 IPMP в OpenSolaris стала лучше.


Основные отличия от Solaris10 IPMP:

  • Появилась новая команда для просмотра статуса IPMP групп и интерфейсов - ipmpstat
    ipmpstat -g   -показывает статусы ipmp групп
    ipmpstat -i   -показывает статусы интерфейсов, входящих в ipmp группу
  • Появилась возможность задавать свои имена интерфейсам. Во-первых, теперь можно дать интерфейсу осмысленное название (например private1, public0, clusterInt2). Во-вторых, при замене вышедшей из строя карточки на другую (например hme на bge) достаточно задать интерфейсу нужное имя и он автоматически подцепится IPMP.
  • При создании IPMP группы создается соответствующий ip интерфейс, и ip адреса (data address) навешиваются именно на этот интерфейс а не на интерфейсы (undrelying interface), входящие в группу как это было раньше. Для создания такого интерфейса следует использовать новый синтаксис (explicit IPMP interface creation):
# ifconfig ipmp-interface ipmp [group group-name]

 

Старый синтаксис (implicit IPMP interface creation) поддерживается для обратной совместимости, но не рекомендуется.



Рассмотрим пример создания IPMP группы. Группу будем создавать с использованием интерфейсов e1000g0 и e1000g1:

1) переименуем интерфейсы e1000g0 и e1000g1

 

#ifconfig e1000g0 unplumb
#ifconfig e1000g1 unplumb
#dladm rename-link e1000g0 sub0
#dladm rename-link e1000g1 sub1
#ifconfig sub0 plumb
#ifconfig sub1 plumb
# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
    inet 127.0.0.1 netmask ff000000
sub0: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 8
    inet 0.0.0.0 netmask 0
    ether 8:0:27:31:9b:e4
sub1: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 9
    inet 0.0.0.0 netmask 0
    ether 8:0:27:f7:78:d3

 



2) создадим ipmp интерфейс, и добавим в группу sub0 и sub1.

 

# ifconfig itops0 ipmp
# ifconfig sub0 group itops0 up
# ifconfig sub1 group itops0 standby up
# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
    inet 127.0.0.1 netmask ff000000
sub0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 8
    inet 0.0.0.0 netmask ff000000
    groupname itops0
    ether 8:0:27:31:9b:e4
sub1: flags=61000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,STANDBY,INACTIVE> mtu 1500 index 9
    inet 0.0.0.0 netmask ff000000
    groupname itops0
    ether 8:0:27:f7:78:d3
itops0: flags=8001000842<BROADCAST,RUNNING,MULTICAST,IPv4,IPMP> mtu 1500 index 10
    inet 0.0.0.0 netmask 0
    groupname itops0

 


Интерфейс sub1 добавлен в качестве standby интерфейса (т.е. будет задействован только в случае недоступности sub0). Это сделано исключительно в демострационных целях. В действительности больший смысл имеет конфигурация, в которой все интерфейсы активны, так как она позволяет автоматически распределять нагрузку.


3) зададим ip адрес для созданной группы (data address):

 

# ifconfig itops0 192.168.2.83/24 up

# ipmpstat -g
GROUP       GROUPNAME   STATE     FDT       INTERFACES
itops0      itops0      ok        --        sub0 (sub1)

# ipmpstat -i
INTERFACE   ACTIVE  GROUP       FLAGS     LINK      PROBE     STATE
sub1        no      itops0      is-----   up        disabled  ok
sub0        yes     itops0      --mb---   up        disabled  ok

 


В данной конфигурации ipmp судит о состоянии интерфейсов только по наличию линка (link-based test). Однако это вовсе не означает доступность интерфейса. Probe-based тесты подразумевает обмен icmp пакетами с определенными хостами. Однако для такой проверки физическому интерфейсу необходим ip адрес. Такой адресс называется test address и он не должен использоваться приложениями для обмена данных.


4) Добавим test address для sub0, чтобы включить probe-based тест. Мануалы настоятельно рекомендуют ставить опцию -failover ДО ip адреса и опции up.

# ifconfig sub0 -failover 192.168.2.85/24
# ipmpstat -g
GROUP       GROUPNAME   STATE     FDT       INTERFACES
itops0      itops0      ok        10.00s    sub0 (sub1)

# ipmpstat -i
INTERFACE   ACTIVE  GROUP       FLAGS     LINK      PROBE     STATE
sub1        no      itops0      is-----   up        disabled  ok
sub0        yes     itops0      --mb---   up        ok        ok


Ключ -t показывает текущие таргеты для probe тестов, а -p покажет статистику тестовых пакетов:

# ipmpstat -t
INTERFACE   MODE      TESTADDR            TARGETS
sub1        disabled  --                  --
sub0        multicast 192.168.2.85        192.168.2.22 192.168.2.9 192.168.2.24 192.168.2.17 192.168.2.12
# ipmpstat -p
TIME      INTERFACE   PROBE  NETRTT    RTT       RTTAVG    TARGET
0.65s     sub0        171    3.89ms    24.51ms   5.22ms    192.168.2.24
2.49s     sub0        172    1.41ms    2.08ms    2.51ms    192.168.2.17
3.48s     sub0        173    1.63ms    2.30ms    2.74ms    192.168.2.12
4.90s     sub0        174    1.54ms    2.28ms    2.44ms    192.168.2.22
^C

Так же в ipmp реализован аналог балансировки нагрузки (load spreading). Исходящий трафик автоматически распределяется между активными интерфейсами на основе адреса получателя (per-destination basis by the IPmodule). Балансировка входящего трафика осуществляется косвенно, путем изменения адреса отправителя (source address selection algorithm). Кроме того, можно комбинировать link aggregation и ipmp.

Являюсь инженером компании Tune-IT. Проявляю интерес к:

  • вопросам производительности ВС
  • VoIP и Asterisk
  • железу SUN
  • Solaris