<a id="adc-rhi"></a>

# Настройка RHI

RHI (Route Health Injection) позволяет динамически управлять маршрутами,
анонсируемыми протоколами динамической маршрутизации, например BGP и OSPF,
на основе данных о состоянии апстримов в балансировщике нагрузки.
RHI позволяет автоматически отзывать префиксы при недоступности апстримов,
минимизируя возможные циклы объявлений и отзывов.
Апстрим считается недоступным, если все его бэкенды не прошли проверки работоспособности (health probes).

Для работы RHI необходимо:

1. Настроить BGP или OSPF в зависимости от свойств сети (через командную строку, примеры см. ниже).
2. Задать проверки работоспособности для балансировщика нагрузки (в веб-интерфейсе Angie ADC, пример см. ниже).
3. Задать конфигурацию RHI (в веб-интерфейсе Angie ADC, инструкцию см. ниже).

## Настройка BGP

Настройка BGP проводится через [интерфейс командной строки](https://angie.software//adc/docs/management/cli-commands.md#adc-starting-cli).

### Пример

```console
hostname angie-va
no ipv6 forwarding
ip prefix-list myapp1_pair seq 5 permit 2.2.2.2/32
interface lo
 ip address 2.2.2.2/32
exit
router bgp 1
 no bgp ebgp-requires-policy
 neighbor 10.0.0.1 remote-as 2
 address-family ipv4 unicast
  redistribute connected route-map myapp1_pair
 exit-address-family
exit
route-map myapp1_pair permit 10
 match ip address prefix-list myapp1_pair
exit
```

### Проверка

Angie ADC должен увидеть свои объявления:

```console
angie-va# sh ip bgp
BGP table version is 14, local router ID is 2.2.2.2, vrf id 0
Default local pref 100, local AS 1
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

    Network          Next Hop            Metric LocPrf Weight Path
*>  2.2.2.2/32       0.0.0.0                  0         32768 ?

Displayed 1 routes and 1 total paths
```

Соседний маршрутизатор должен увидеть объявления от Angie ADC:

```console
abstract-router# sh ip bgp
BGP table version is 14, local router ID is 10.0.0.1, vrf id 0
Default local pref 100, local AS 2
Status codes:  s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

    Network          Next Hop            Metric LocPrf Weight Path
*>  2.2.2.2/32       10.21.20.6               0             0 1 ?

Displayed 1 routes and 1 total paths
```

В случае если объявления не видны, можно попробовать сбросить сессию BGP на обоих маршрутизаторах:

```console
clear ip bgp * soft
```

### Отзыв префиксов

Отзыв префиксов реализован через автоматическое изменение префикс-листов.

Например:

```console
ip prefix-list myapp1_pair seq 5 deny 2.2.2.2/32
```

### Объявление префиксов после восстановления работы апстрима

При восстановлении работоспособности апстримов префикс-листы не меняются автоматически.

Чтобы вручную вернуть префикс-лист к изначальному виду, выполните команды:

```console
conf t
 ip prefix-list myapp1_pair seq 5 permit 2.2.2.2/32
```

#### NOTE
Если вы хотите, чтобы префиксы автоматически анонсировались после восстановления апстримов, установите флажок
`Объявлять префиксы при восстановлении апстримов` в настройках конфигурации RHI.

## Настройка OSPF

Настройка OSPF также проводится через [интерфейс командной строки](https://angie.software//adc/docs/management/cli-commands.md#adc-starting-cli).

### Пример

```console
hostname angie-va
no ipv6 forwarding
ip prefix-list myapp1_pair seq 5 permit 2.2.2.2/32
interface ens33
 ip address 192.168.0.20/24
 ip ospf 1 area 0
exit
interface lo
 ip address 2.2.2.2/32
exit
router ospf 1
 ospf router-id 192.168.0.20
 redistribute connected route-map myapp1_pair
exit
route-map myapp1_pair permit 10
match ip address prefix-list myapp1_pair
exit
```

### Проверка

Если серверы в бэкенде доступны:

```console
angie-va#sho ip ospf 1 database external self-originate
OSPF Instance: 1
       OSPF Router with ID (2.2.2.2)
                AS External Link States
  LS age: 28
  Options: 0x2  : *|-|-|-|-|-|E|-
  LS Flags: 0xb
  LS Type: AS-external-LSA
  Link State ID: 2.2.2.2 (External Network Number)
  Advertising Router: 192.168.0.20
  LS Seq Number: 80000001
  Checksum: 0x139b
  Length: 36
  Network Mask: /32
        Metric Type: 2 (Larger than any link state path)
        TOS: 0
        Metric: 20
        Forward Address: 0.0.0.0
        External Route Tag: 0
```

Если серверы в бэкенде недоступны:

```console
angie-va#sho ip ospf 1 database external self-originate
OSPF Instance: 1
       OSPF Router with ID (192.168.0.20)
                AS External Link States
  LS age: 3600
  Options: 0x2  : *|-|-|-|-|-|E|-
  LS Flags: 0x8b
  LS Type: AS-external-LSA
  Link State ID: 2.2.2.2 (External Network Number)
  Advertising Router: 2.2.2.2
  LS Seq Number: 80000001
  Checksum: 0x139b
  Length: 36
  Network Mask: /32
        Metric Type: 2 (Larger than any link state path)
        TOS: 0
        Metric: 20
        Forward Address: 0.0.0.0
        External Route Tag: 0
```

### Отзыв префиксов

Отзыв маршрута в OSPF происходит следующим образом: после удаления префикса
OSPF изменяет значение возраста LSA в поле `LS age` на `3600`,
информируя соседей, что LSA устарела и нужно перестать ее использовать.
Через некоторое время эта LSA будет полностью удалена из LSDB.

### Объявление префиксов после восстановления работы апстрима

При восстановлении работоспособности апстримов префикс-листы не меняются автоматически.

Чтобы вручную вернуть префикс-лист к изначальному виду, выполните команды:

```console
conf t
 ip prefix-list myapp1_pair seq 5 permit 2.2.2.2/32
```

#### NOTE
Если вы хотите, чтобы префиксы автоматически анонсировались после восстановления апстримов, установите флажок
`Объявлять префиксы при восстановлении апстримов` в настройках конфигурации RHI.

## Настройка балансировщика нагрузки

Конфигурация балансировщика нагрузки настраивается в веб-интерфейсе Angie ADC (см. [инструкцию](https://angie.software//adc/docs/configuration_lb/config.md#adc-load-balancer-config)).

Для работы RHI необходимо настроить следующие параметры:

- [upstream_probe](https://angie.software//adc/docs/configuration_lb/health-probes.md#adc-health-probes);
- параметры для получения информации о состоянии балансировщика нагрузки.

### Пример

Приведены только строки, добавленные в дефолтную конфигурацию.

```nginx
### Часть конфигурации опущена для краткости
}
### Бэкенды
upstream myapp1 {
    zone myapp1 1m;
    server server1;
    server server2;
}
### Переменная для health probe
map $upstream_status $good {
    200     "1";
}
server {
### Часть конфигурации опущена для краткости
    location / {
        proxy_pass http://myapp1;
        # Апстрим-пробы
        upstream_probe myapp1_probe
            interval=1s
            test=$good
            essential
            mode=always;
    }
### Часть конфигурации опущена для краткости
}
}
```

## Настройка конфигурации RHI

Конфигурация RHI настраивается в веб-интерфейсе Angie ADC.

Чтобы настроить конфигурацию, выполните следующие действия:

1. Откройте веб-интерфейс Angie ADC и перейдите
   `Управление трафиком` → `Конфигурация RHI`.

   Откроется окно настройки RHI.
2. Задайте префиксы. Для этого нажмите `Добавить` и укажите следующие параметры:
   - `VIP-адрес (CIDR)` — виртуальный IP-адрес для апстрима.
     Указывается в формате `X.X.X.X/mask`.

     #### NOTE
     Значение должно быть уникальным в рамках одного префикс-листа.
   - `Приоритет` — номер последовательности, определяющий порядок обработки правил.
     Маршрут с меньшим приоритетом обрабатывается первым.

     #### NOTE
     Значение должно быть уникальным в рамках одного префикс-листа.
   - `Имя префикс-листа` — имя префикс-листа для маршрутизации.
   - `Имя апстрима` — апстрим, для которого настраивается отзыв префикса.
3. Установите флажок `Объявлять префиксы при восстановлении апстримов`, если хотите,
   чтобы Angie ADC автоматически анонсировал префиксы в маршрутизируемую сеть
   при восстановлении работоспособности апстримов.
   По умолчанию флажок снят.
4. Нажмите `Сохранить`.

   Настройки RHI будут сохранены и сразу применены.

### Удаление префиксов

Вы можете удалить неиспользуемые префиксы из конфигурации RHI,
нажав на значок удаления напротив этих префиксов.

#### NOTE
При удалении префиксов через интерфейс Angie ADC они удаляются из базы данных
и перестают влиять на объявление и отзыв маршрутов,
но сохраняются в списках, отображаемых через командную строку.

Чтобы полностью удалить префикс-лист, необходимо выполнить следующие команды:

```console
conf t
no ip prefix-list <имя префикс-листа>
```

Это поведение будет скорректировано в следующих релизах.
