Распределение нагрузки с помощью протокола OSPF (Active-Active)#

Введение#

В этом разделе описана настройка высокой доступности с использованием протокола OSPF в режиме распределения нагрузки (Active-Active). Для настройки OSPF используется интерфейс командной строки (CLI) Angie ADC.

В качестве протокола динамической маршрутизации используется OSPFv2 для адресного семейства IPv4 unicast. Отказоустойчивость в рамках IPv6 unicast настраивается аналогично.

Для обеспечения распределения нагрузки между ADC нужны две системы балансировки Angie, работающие параллельно и одновременно. Пример типового участка сети с системами балансировки Angie ADC (ADC #1 и ADC #2):

Участок сети с системами балансировки Angie ADC

Рис. 1


Добавим IP-адресацию:

  • В сегменте сети, куда подключаются External router, ADC #1 и ADC #2, будет использоваться подсеть 192.168.0.0/24.

  • В сегменте сети, куда подключаются Internal router, ADC #1 и ADC #2, будет использоваться подсеть 192.168.1.0/24.

  • Четвертый октет адреса для каждого устройства (в рамках соответствующей подсети) показан на схеме ниже.

IP-адресация

Рис. 2


Адресация клиентов не приводится, так как в данном случае мы будем считать, что их адреса формально не определены, то есть, они могут подключаться из любой сети, включая сеть интернет. Для этих целей External router будет анонсировать маршрут по умолчанию по OSPF для ADC #1 и ADC #2. Мы будем использовать OSPF-домен, включающий в себя четыре устройства: External router, Internal router, ADC #1 и ADC #2.

Красным текстом на схеме ниже отмечены IP-адреса виртуальных серверов. Это те адреса, к которым подключаются клиенты снаружи. Чтобы маршрутизатор External router мог выполнить распределение трафика между системами балансировки Angie ADC (см. ECMP – Equal-Cost Multi-Path), они должны одинаково анонсировать маршруты до виртуальных серверов в сторону External router (должны совпадать типы маршрутов и косты).

OSPF-сессии

Рис. 3


Трафик внутри пользовательской сессии от серверов должен возвращаться строго через ту же систему балансировки, через которую он проходил до этого. Добиться этого можно с помощью механизма SNAT, когда адрес клиента подменяется на адрес интерфейса системы балансировки.

Обработка типовых сбоев#

Ниже описаны сценарии работы Angie ADC при сбоях.

Полный отказ ADC #1#

В этом случае оба OSPF-соседства с ADC #1 разрываются, никакие объявления маршрутов через ADC #1 не пролетают. Остается связь по OSPF только с ADC #2. То есть, переключение на резервную систему производится полностью автоматически, никакие дополнительные настройки не требуются.

Красными стрелками обозначены рабочие OSPF-соседства:

OSPF-сессии

Рис. 4


Отказ внешнего интерфейса ADC #1#

Предлагаемая схема не предполагает возможности отслеживания частичных отказов и реагирования на них. Пример такого отказа представлен на схеме ниже.

OSPF-сессии

Рис. 5


В случае обозначенного на схеме отказа линка разрывается OSPF-сессия между ADC #1 и External router. ADC #1 теперь не может объявить маршрут до адреса виртуального сервера в сторону External router напрямую. Internal router получает маршруты до адресов, которые используются в SNAT от обеих систем балансировки, однако трафик от клиентов, прошедший через ADC #2, будет возвращаться тем же путем (так же через ADC #2), так как ADC #1 и ADC #2 используют уникальные адреса для SNAT.

Отказ линка между ADC #1 и Internal router#

Отказ линка между ADC #1 и Internal router более сложная ситуация: если OSPF-соседство между External router и ADC #1 сохраняется, то ADC #1 будет продолжать анонсировать маршрут до адреса виртуального сервера, хотя реальные сервера для системы балансировки ADC #1 уже недостижимы.

Таким образом, мы получаем классический пример black hole для трафика:

OSPF-сессии

Рис. 6


Чтобы избежать этой проблемы, необходимо, чтобы ситуация отказа только одного из линков была невозможной, т.е. нужно обеспечить отказоустойчивое подключение к сети для хоста виртуализации, на котором работает ADC.

Вторым способом решить указанную проблему является технология RHI, позволяющая отозвать маршрут при недостижимости апстрим-серверов.

Рекомендованная схема подключения:

  • Объединить в одну LAG-группу все физические интерфейсы хоста виртуализации и использовать этот виртуальный LAG-интерфейс в качестве транка, то есть передавать по нему тегированными несколько виртуальных сетей (один VLAN для внешней (external) сети, второй VLAN для внутренней (internal) сети).

  • Для резервирования коммутаторов можно использовать такие технологии как vPC, VSS или стекирование, пример представлен на схеме ниже.

Из соображений простоты на схеме не отображено резервирование внешнего и внутреннего маршрутизаторов.

Стекирование

Рис. 7


Важно

Маршрутизатор, выполняющий ECMP-балансировку, и обе системы Angie ADC могут располагаться в одной OSPF-зоне или в разных. Если при этом маршрутизатор является OSPF ABR (Are Border Router), а ADC #1 и ADC #2 находятся в разных OSPF-зонах (видны через разные интерфейсы ABR), то ECMP-балансировка может не поддерживаться некоторыми вендорами сетевого оборудования.

Такой дизайн сети не рекомендуется:

Исключение

Рис. 8

Настройки маршрутизации#

Приведем ключевые настройки маршрутизации для External router, Internal router, ADC #1 и ADC #2.

Ключевые настройки маршрутизации для External router#

!Имя устройства
hostname external
!Интерфейс в сторону систем балансировки
interface GigabitEthernet0/0
ip address 192.168.0.1 255.255.255.0
router ospf 1
!Включение OSPF на интерфейсе в сторону систем балансировки
network 192.168.0.0 0.0.0.255 area 0
!Анонсирование маршрута по умолчанию
default-information originate always
end

Ключевые настройки маршрутизации для Internal router#

!Имя устройства
hostname internal
!Интерфейс в сторону систем балансировки
interface GigabitEthernet0/0
ip address 192.168.1.1 255.255.255.0
!Интерфейс в сторону подсети с реальными серверами
interface GigabitEthernet1/0
ip address 192.168.2.1 255.255.255.0
router ospf 1
!Добавление в OSPF информации о подсети с серверами
redistribute connected subnets
!Включение OSPF на интерфейсе в сторону систем балансировки
network 192.168.1.0 0.0.0.255 area 0
end

Ключевые настройки маршрутизации системы балансировки ADC #1#

!Имя устройства
hostname adc1
!Интерфейс в сторону маршрутизатора external router
interface ens33
description external
ip address 192.168.0.2/24
!Включение OSPF на интерфейсе
ip ospf 1 area 0
exit
!Интерфейс в сторону маршрутизатора internal router
interface ens37
description internal
ip address 192.168.1.2/24
!Включение OSPF на интерфейсе
ip ospf 1 area 0
exit
!Петлевой интерфейс для назначения адресов виртуальных серверов
interface lo
!Адрес тестового виртуального сервера
ip address 2.2.2.2/32
exit
!Префикс-лист, который используется для отбора префиксов для добавления в OSPF
ip prefix-list c2o seq 5 permit 2.2.2.2/32
!Route-map, с помощью которой производится отбор префиксов для добавления в OSPF
route-map c2o permit 10
match ip address prefix-list c2o
exit
!Настройки процесса маршрутизации OSPF
router ospf 1
!Необходимо вручную задать идентификатор маршрутизатора для OSPF
!Иначе автоматика может выбрать одинаковые идентификаторы для ADC#1 и ADC#2
ospf router-id 2.2.2.2
!Добавление информации о подключенных сетях в OSPF
redistribute connected route-map c2o
exit
end

Ключевые настройки маршрутизации системы балансировки ADC #2#

!Имя устройства
hostname adc2
!Интерфейс в сторону маршрутизатора external router
interface ens33
description external
ip address 192.168.0.3/24
!Включение OSPF на интерфейсе
ip ospf 1 area 0
exit
!Интерфейс в сторону маршрутизатора internal router
interface ens37
description internal
ip address 192.168.1.3/24
!Включение OSPF на интерфейсе
ip ospf 1 area 0
exit
!Петлевой интерфейс для назначения адресов виртуальных серверов
interface lo
!Адрес тестового виртуального сервера
ip address 2.2.2.2/32
exit
!Префикс-лист, который используется для отбора префиксов для добавления в OSPF
ip prefix-list c2o seq 5 permit 2.2.2.2/32
!Route-map, с помощью которой производится отбор префиксов для добавления в OSPF
route-map c2o permit 10
match ip address prefix-list c2o
exit
!Настройки процесса маршрутизации OSPF
router ospf 1
!Необходимо вручную задать идентификатор маршрутизатора для OSPF
!Иначе автоматика может выбрать одинаковые идентификаторы для ADC#1 и ADC#2
ospf router-id 22.22.22.22
!Добавление информации о подключенных сетях в OSPF
redistribute connected route-map c2o
exit
end

Проверка работы#

Выполним проверку работы системы маршрутизации, когда ADC #1 и ADC #2 находятся в полностью работоспособном состоянии.

Примечание

В листингах ниже отсутствуют префиксы, не относящиеся к обсуждаемым вопросам отказоустойчивости.

Маршрутизатор External router видит маршрут к адресу виртуального сервера через обе системы балансировки.

external#sho ip ro os
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
2.0.0.0/32 is subnetted, 1 subnets
O E2     2.2.2.2 [110/20] via 192.168.0.2, 00:41:28, GigabitEthernet0/0
via 192.168.0.3, 00:41:15, GigabitEthernet0/0
external#sho ip os da ex 2.2.2.2
OSPF Router with ID (192.168.0.1) (Process ID 1)
Type-5 AS External Link States
Routing Bit Set on this LSA in topology Base with MTID 0

LS age: 898
Options: (No TOS-capability, No DC, Upward)
LS Type: AS External Link
Link State ID: 2.2.2.2 (External Network Number )
Advertising Router: 2.2.2.2
LS Seq Number: 80000003
Checksum: 0xAA0C
Length: 36
Network Mask: /32
Metric Type: 2 (Larger than any link state path)
MTID: 0
Metric: 20
Forward Address: 0.0.0.0
External Route Tag: 0

LS age: 885
Options: (No TOS-capability, No DC, Upward)
LS Type: AS External Link
Link State ID: 2.2.2.2 (External Network Number )
Advertising Router: 22.22.22.22
LS Seq Number: 80000003
Checksum: 0xB4A7
Length: 36
Network Mask: /32
Metric Type: 2 (Larger than any link state path)
MTID: 0
Metric: 20
Forward Address: 0.0.0.0
External Route Tag: 0

По умолчанию Angie ADC будет устанавливать соединение с апстрим-сервером с адреса того интерфейса, через который этот сервер достижим, в соответствии с таблицей маршрутизации (192.168.1.2 для ADC #1 и 192.168.1.3 для ADC #2). Оба адреса принадлежат подсети 192.168.1.0/24, которая для маршрутизатора Internal router является непосредственно подключенной (Directly Connected). Анонсировать другие адреса не нужно. Если используется SNAT pool, то каждая из систем балансировки объявит в сеть дополнительные адреса, соответствующие пулу.

Отключим теперь ADC #1 полностью и проверим маршрутизацию.

Маршрутизатор External router:

external#sho ip ro os
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
+ - replicated route, % - next hop override
Gateway of last resort is not set
2.0.0.0/32 is subnetted, 1 subnets
O E2     2.2.2.2 [110/20] via 192.168.0.3, 01:40:10, GigabitEthernet0/0

После возвращения в строй ADC #1 маршрутизация через это устройство восстанавливается.

Применение с IP transparency#

Все описанное выше относится к режиму работы системы балансировки трафика с отключенной опцией IP transparency. При включении опции IP Transparency Angie ADC сохраняет исходный адрес отправителя в IP-пакетах, позволяя серверам на сетевом уровне различать клиентские подключения. Однако в этом случае маршрутизатор Internal router будет возвращать трафик через неправильную систему балансировки. Исходный адрес клиента может быть передан серверу либо с помощью заголовка X-FORWARDED-FOR, либо с помощью специального proxy protocol.