First Hop Redundancy Protocols – часть 2

shocking-tales-of-redundancyVirtual Router Redundancy Protocol

Или VRRP – стандартизированный протокол, описанный в RFC 2338. VRRP очень похож на HSRP и все, что вам следуют сделать, так это запомнить не большие различия в терминологии. По это причине я не буду подробно описывать VRRP, а остановлюсь только на ключевых различиях и другом синтаксисе конфигурации.

Так же как и HSRP VRRP предоставляет один отказоустойчивый VIP адрес от всей группы маршрутизаторов. Активный маршрутизатор называется master, все остальные – backup, при чем все backup маршрутизаторы слушают multicast адрес, а не только second best как это было в случае с HSRP.

Номера VRRP групп такие же как у HSRP – 0-255, приоритет настраивается так же – 1-254. Чем выше, тем лучше.

VRRP hello рассылаются на 224.0.0.18 с интервалом в 1 секунду. Для этого используется IP протокол 112. Backup маршрутизаторы могут синхронизировать интервал с master’ом. Router preemption включено по умолчанию, а interface tracking у VRRP реализован через object-tracking:

Switch(config)#track #_track interface #_interface [ ip routing | line-protocol ]
Switch(config-if)#vrrp #_group track #_track [ decrement #_value ]

Возможно это проприетарное расширение протокола VRRP, так как не в последнем RFC, ни в курсах CCNP Switch упоминания об этом нет, более того, на курсах отсутствие interface tracking вменяли в недостаток VRRP. Но кто не ошибается. // за замечание спасибо mr.pingy

Настройка VRRP

!Настройка VIP группы:
Switch(config-if)# vrrp #_group ip #_address

!Приоритет:
Switch(config-if# vrrp #_group priority #_value

!Hello timer:
Switch(config-if)# vrrp #_group timers advertise [msec] #_value

!Синхронизировать hello с master-маршрутизатора:
Switch(config-if)# vrrp #_group timers learn

!Отключить router preemption:
Switch(config-if)# no vrrp #_group preempt

!Задержка router preemption:
Switch(config-if)# vrrp #_group preempt [ delay #_seconds ]

!Аутентификация:
Switch(config-if)# vrrp #_group authentication [ text | md5] #_string

Используя топологию из прошлой статьи получим следующие:

SwitchA#sh run int vlan 1
Building configuration...

Current configuration : 169 bytes
!
interface Vlan1
 ip address 192.168.1.2 255.255.255.0
 vrrp 1 ip 192.168.1.1
 vrrp 1 timers advertise msec 200
 vrrp 1 priority 110
 vrrp 1 authentication SECRET

SwitchA#sh vrrp
Vlan1 - Group 1
  State is Master
  Virtual IP address is 192.168.1.1
  Virtual MAC address is 0000.5e00.0101
  Advertisement interval is 0.200 sec
  Preemption enabled
  Priority is 110
  Authentication text "SECRET"
  Master Router is 192.168.1.2 (local), priority is 110
  Master Advertisement interval is 0.200 sec
  Master Down interval is 1.170 sec

Обратите внимание на VIP MAC адрес. Логика такая же: 0000.5e00.01xx говорит нам о том, что перед нами VRRP группа, а 01 указывает на ее номер в HEX.

Gateway Load Balancing Protocol

Или GLBP. Проприетарный протокол Cisco, основной фишкой которого, по сравнению с HSRP и GLBP, является родная поддержка балансировки нагрузки. Да, вы можете настроить несколько HSRP/VRRP групп в рамках одного VLAN, и сделать так, чтобы одна половина хостов использовала один VIP, а вторая другой. Однако все это не так кошерно, как просто использование GLBP.

В GLBP группе все устройства могут принимать участие в маршрутизации данных, предлагая одновременно с отказоустойчивостью еще и балансировку нагрузки. При это все клиенты могут использовать один и тот же VIP в качестве шлюза по умолчанию, а балансировка нагрузки достигается за счет ответа различными адресами на ARP запрос клиента о MAC адресе default gateway. В итоге клиенты используют один VIP но с MAC адресами устройств, принимающих участие в GLBP группе.

На ARP запросы отвечает одно устройство, которое имеет наивысший приоритет или IP адрес в группе, если приоритет у всех один и тот же. Такое устройство носит название Active Virtual Gateway (AVG). Адрес, которым оно ответит, завит от алгоритма балансировки нагрузки, применяемым в этой группе. В каждой группе может использоваться до 4 виртуальных MAC адресов, которые AVG назначает устройствам, принимающим участие в маршрутизации данных и носят название Active Virtual Forwarders (AVF). Остальные устройства становятся secondary или backup по команде AVG.

Всего может быть 1024 GLBP группы (с номерами от 0 до 1023), приоритет возрастает от 1 до 255 (100 default), router preemption выключен в конфигурации по умолчанию.

Устройства, входящие в GLBP группу должны отслеживать состояния друг друга, рассылая каждые 3 секунды hello на адрес 224.0.0.102, используя UDP порт 3222 и ожидая услышать в течении 10 секунд ответ. Что, в прочем, легко изменить. AVG способен рассылать значения таймров на AVF, так что если вам надо поменять эту величину – просто измените ее на AVG.

Active Virtual Forwarder

AVG назначает AVF виртуальный MAC адрес, который имеет вид 0007.b4xx.xxyy, где 2 байта значений, обозначенных xx представляют собой 6 бит нулей и идущие за ними 10 бит адреса GLBP группы. Последний байт адреса (yy) – это номер virtual forwarder’а.

По умолчанию GLBP использует hello сообщения, чтобы выявить сбои в работе AVF. Каждое устройство в GLBP группе должно отправлять hello всем остальным устройствам. Так, например, если AVG не услышит hello от одного из AVF по происшествию hold таймера, то AVF’ом будет назначено другое устройство.

Весь смак состоит в том, что свеженазначенный AVF для этого адреса может уже быть AVF, обслуживающим один из виртуальных MAC адресов. Нет проблем, 2 и более адреса не проблема для GLBP в целом и для AVF в частности. Однако, не смотря на это, у AVG есть специальные таймеры, позволяющие исправить такую ситуацию. Redirect таймер (600 секунд by default) используется для того, чтобы определить когда AVG перестанет использовать виртуальный MAC в ARP ответах. Timeout таймер (14400 секунд по умолчанию) используется для того, чтобы отсчитать время, через которое старый виртуальный MAC будет удален со всех устройств, принимающих участие в GLBP группе.

GLBP interface tracking

Отслеживание состояние интерфейсов отличных от тех, на которых запущен GLBP происходит несколько иначе нежели в HSRP. Решение о том будет ли данный маршрутизатор участвовать в выборе AVF может приниматься динамически, с использованием различных весовых порогов:

Switch(config)# track #_track interface #_interface [ line-protocol | ip routing ]

Как видно из команды есть два типа триггеров, которые в состояние оказывать влияние на весовой порог – line-protocol (line protocol is up) и ip routing (routing enbled, интерфейс с IP адресом, interface is up).

Switch(config-if)# glbp #_group weighting maximum [ lower lower ] [ upper upper ]

По умолчанию максимальный порог равен 100. Ключи lower (default 1) и upper (default maximum) указывают на то может ли устройство быть AVF.

Ну и наконец нам следует привязать объект для отслеживания:

Switch(config-if)# glbp #_group weighting track #_track [ decrement #_value ]

Если не указать #_value, то будет отнято 10 единиц веса. Стоит держать в голове, что роутер способный работать как AVF не вытеснит другой, пока его приоритет ниже.

GLBP Load Balancing

  • Round robin (default) – на каждый новый ARP запрос в ответ AVG отвечает следующим доступным MAC адресом AVF.
  • Weighted – Чем выше приоритет AVF, тем чаще AVG ответит его MAC адресом в ответ на ARP запрос. Работает в паре с interface tracking.
  • Host dependent – применяется в том случае, когда клиенту нужен постоянный MAC адрес шлюза. AVG поддерживает базу и на запросы одного хоста всегда отвечает тем же MAC. 
Switch(config-if)# glbp #_group load-balancing [ round-robin | weighted | host-dependent ]

Putting all together

glbp-demo

Обратите вниманию на backup AVG роль, о которой мы пока не говорили. Backup AVG становится second best устройство и в случае сбоя оно перехватывает не только роль AVG, но и его MAC.

Настроим нашу GLBP группу согласно рисунку, настроим router preemption, настроим аутентификацию:

SwitchX(config)#int vl 1
SwitchX(config-if)# glbp 1 ip 172.16.15.1
SwitchX(config-if)# glbp 1 priority [ 120 | 110 | 100 ]
SwitchX(config-if)# glbp 1 preempt
SwitchX(config-if)# glbp 1 authentication text SECRET

Посмотрим на то, что у нас получилось:

SwitchA#sh glbp brief
Interface   Grp  Fwd Pri State    Address         Active router   Standby router
Vl1         1    -   120 Active   172.16.15.1     local           172.16.15.12
Vl1         1    1   -   Active   0007.b400.0101  local           -
Vl1         1    2   -   Listen   0007.b400.0102  172.16.15.12    -
Vl1         1    3   -   Listen   0007.b400.0103  172.16.15.13    -
SwitchA#sh glbp
Vlan1 - Group 1
  State is Active
    2 state changes, last state change 00:24:31
  Virtual IP address is 172.16.15.1
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 1.048 secs
  Redirect time 600 sec, forwarder time-out 14400 sec
  Authentication text "SECRET"
  Preemption enabled, min delay 0 sec
  Active is local
  Standby is 172.16.15.12, priority 110 (expires in 7.008 sec)
  Priority 120 (configured)
  Weighting 100 (default 100), thresholds: lower 1, upper 100
  Load balancing: round-robin
  Group members:
    c004.06c0.0000 (172.16.15.11) local
    c005.06c0.0000 (172.16.15.12)
    c00d.06c0.0000 (172.16.15.13)
  There are 3 forwarders (1 active)
  Forwarder 1
    State is Active
      1 state change, last state change 00:24:21
    MAC address is 0007.b400.0101 (default)
    Owner ID is c004.06c0.0000
    Redirection enabled
    Preemption enabled, min delay 30 sec
    Active is local, weighting 100
    Arp replies sent: 2
  Forwarder 2
    State is Listen
      2 state changes, last state change 00:01:44
    MAC address is 0007.b400.0102 (learnt)
    Owner ID is c005.06c0.0000
    Redirection enabled, 598.504 sec remaining (maximum 600 sec)
    Time to live: 14398.504 sec (maximum 14400 sec)
    Preemption enabled, min delay 30 sec
    Active is 172.16.15.12 (primary), weighting 100 (expires in 8.500 sec)
    Arp replies sent: 1
  Forwarder 3
    State is Listen
      2 state changes, last state change 00:01:36
    MAC address is 0007.b400.0103 (learnt)
    Owner ID is c00d.06c0.0000
    Redirection enabled, 599.524 sec remaining (maximum 600 sec)
    Time to live: 14399.524 sec (maximum 14400 sec)
    Preemption enabled, min delay 30 sec
    Active is 172.16.15.13 (primary), weighting 100 (expires in 8.104 sec)
    Arp replies sent: 1

Проверим работает ли round-robin балансировка так, как мы предполагали?

PC1#sh arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  172.16.15.1             0   0007.b400.0101  ARPA   FastEthernet0/0

PC2#sh arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  172.16.15.1             0   0007.b400.0102  ARPA   FastEthernet0/0

PC3#sh arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  172.16.15.1             0   0007.b400.0103  ARPA   FastEthernet0/0

PC4#sh arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  172.16.15.1             0   0007.b400.0101  ARPA   FastEthernet0/0

enot-prevoshodno_5

  • Mr.Pingy

    На самом деле VRRP вполне себе умеет track, об этом даже в вики есть – http://en.wikipedia.org/wiki/Virtual_Router_Redundancy_Protocol#History

  • Да, действительно в свежих IOS появилась эта функция на манер GLBP через object-tracking. Однако в самом последнем RFC по VRRPv3 я не нашел упоминаний о ней. Так же на курсах по CCNP Switch речь шла о том, что один из недостатков VRRP является отсутствие этой фичи.

    В любом случае больше спасибо за замечание, я внесу его в статью.

  • Mr.Pingy

    А в RFC HSRP трекинг нашли? (;

    Похоже всё это выходит за рамки стандартизации, например, если не ошибаюсь, у Cisco default decrement – 10, а у Juniper – 100 (как и default PriorityValue).

    Спасибо за статьи, уверен, многие найдут их очень полезными (:

  • Да, все это не только вендор-зависимые фичи, но еще и от версии к версии различаются. Так, вроде бы, VRRP в hp procurve умеет load-balancing на манер GLBP.