Перейти к содержанию

Балансировка нагрузки#

Обзор функций и примеры настройки#

Обзор функции балансировки нагрузки#

В данном разделе рассматриваются общие вопросы по использованию функции балансировки нагрузки в системе Numa Edge.

Описание механизма балансировки нагрузки#

Numa Edge поддерживает функцию балансировки нагрузки по нескольким каналам как для транзитного (проходящего), так и для локального трафика, используя таблицы маршрутизации. Балансировка нагрузки обеспечивает избыточность по путям на случай неработоспособности маршрутов отдельно взятой таблицы маршрутизации. Описываемая функция является качественным дополнением к функциям политик маршрутизации, в частности она выполняет задачи по динамическому управлению балансировкой нагрузки основываясь на контроле доступности таблиц маршрутизации.

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

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

Процесс балансировки нагрузки автоматически устанавливает маршруты, настроенные администратором для каждого пути, и осуществляет балансировку трафика в соответствии с работоспособностью путей и весами, примененными к каждой таблице маршрутизации. Пути, установленные в таблицах маршрутизации, можно вывести командой routing table show <имя_таблицы> route.

Правила балансировки нагрузки#

Балансировка нагрузки настраивается в качестве упорядоченного набора правил, в которых указываются род трафика (определенного фильтром) подлежащего балансировке, набор таблиц маршрутизации и их относительные веса.

Каждое правило содержит набор критериев соответствия и набор таблиц маршрутизации с назначенными весами. Правила балансировки нагрузки нумеруются и исполняются в соответствующем порядке.

Следует учесть, что в настроенном правиле балансировки нагрузки номер является неизменяемым идентификатором. Для изменения номера правила, его следует удалить и создать заново с новым номером.

По этой причине рекомендуется назначать правилам балансировки нагрузки номера, оставляя пустые интервалы. Например, можно создать набор правил балансировки нагрузки с номерами 10, 20, 30 и т.д. Таким образом, в случае необходимости добавления еще одного правила в конкретном месте в текущей последовательности правил, это будет возможно сделать без удаления текущего набора правил.

Для создания или изменения правила балансировки нагрузки используются команды set и узел конфигурации policy route с указанием имени правила балансировки нагрузки.

Проверка работоспособности таблиц маршрутизации#

Таблица маршрутизации, участвующая в балансировке нагрузки, считается активным членом пула до тех пор, пока она проходит проверки работоспособности. Наблюдение за работоспособностью таблицы маршрутизации осуществляется путем отправки сообщений эхо-запроса ICMP («пинга») на удаленную точку назначения через некоторый интервал времени. В случае успешного ответа от точки назначения, таблица маршрутизации признается прошедшей тест на проверку работоспособности. В случае сбоя проверки работоспособности, таблица маршрутизации удаляется из пула активных таблиц маршрутизации.

Примечание

Также существует проверка на основе времени жизни (ttl), при которой на целевой адрес отправляется пакет UDP с ограничением ttl.

Когда сбойная таблица маршрутизации восстанавливает работоспособность, она вновь добавляется к списку активных членов пула, чтобы система балансировки нагрузки смогла ее использовать. Система определяет работоспособность пути с помощью периодической проверки работоспособности опросом удаленной цели или нескольких целей.

Настройка проверки работоспособности таблиц маршрутизации состоит из следующих элементов:

Этапы настройки балансировки нагрузки#

Балансировка нагрузки настраивается в 2 этапа:

  • Настройка политик для обеспечения балансировки нагрузки на интерфейсы через нужную таблицу маршрутизации.
  • Определение цели (или целей), достижимых с каждой таблицы маршрутизации, участвующей в балансировке нагрузки. Цель используется службой проверки работоспособности таблиц маршрутизации для определения доступности проверяемой таблицы.

Примеры настройки#

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

В текущем примере описана базовая настройка балансировки нагрузки. Свойства приведенной настройки:

  • балансировка всего трафика, входящего на маршрутизатор Edge через интерфейс eth1, и преобразование адресов отправителей (SNAT) осуществляются на интерфейсах eth2 и eth3;
  • проверка таблиц маршрутизации Gateway_ISP1 и Gateway_ISP2 на работоспособность осуществляется путем отправки эхо-запросов на удаленные цели (в примере используются следующие удаленные цели: 192.0.2.1, 192.0.2.2, 192.0.2.3 и 192.0.2.4);
  • таблица маршрутизации Gateway_ISP1 удаляется из пула активных таблиц маршрутизации после трех последовательных сбоев эхо-запроса, а таблица маршрутизации Gateway_ISP2 — после пяти последовательных сбоев.

Пример базовой настройки балансировки нагрузки приведен на рисунке ниже.

Пример-базовой-настройки-балансировки-нагрузки

Пример базовой настройки балансировки нагрузки

В примере ниже приведена настройка SNAT, создание политики балансировки нагрузки и маршрутов по умолчанию к двум поставщикам услуг доступа к сети Интернет (198.51.100.254 и 203.0.113.126), между которыми будет выполняться балансировка нагрузки.

Пример - Настройка SNAT, создание политики балансировки нагрузки и маршрутов по умолчанию#
  1. Создание правила 10, преобразующего сетевой адрес отправителя (SNAT):
    [edit]
    admin@edge# set service nat ipv4 rule 10 type masquerade
    
  2. Применение правила 10 к пакетам, которые были отправлены любым узлом сети 192.168.10.0/24:
    [edit]
    admin@edge# set service nat ipv4 rule 10 source address 192.168.10.0/24
    
  3. Применение правила 10 к пакетам, для которых исходящим интерфейсом является eth2:
    [edit]
    admin@edge# set service nat ipv4 rule 10 outbound-interface eth2
    
  4. Создание правила 20, преобразующего сетевой адрес отправителя (SNAT):
    [edit]
    admin@edge# set service nat ipv4 rule 20 type masquerade
    
  5. Применение правила 20 к пакетам, которые были отправлены любым узлом сети 192.168.10.0/24:
    [edit]
    admin@edge# set service nat ipv4 rule 20 source address 192.168.10.0/24
    
  6. Применение правила 20 к пакетам, для которых исходящим интерфейсом является eth3:
    [edit]
    admin@edge# set service nat ipv4 rule 20 outbound-interface eth3
    
  7. Фиксация настройки:
    [edit]
    admin@edge# commit
    
  8. Отображение настройки преобразования сетевого адреса отправителя (SNAT):
    [edit]
    admin@edge# show service nat
       ipv4 {
          rule 10 {
             outbound-interface eth2
             source {
                address 192.168.10.0/24
             }
             type masquerade
          }
          rule 20 {
             outbound-interface eth3
             source {
                address 192.168.10.0/24
             }
             type masquerade
          }
       }
    
  9. Добавление маршрута по умолчания в таблицу маршрутизации Gateway_ISP1:
    [edit]
    admin@edge# set protocols static table Gateway_ISP1 route 0.0.0.0/0 next-hop 198.51.100.254
    
  10. Добавление маршрута по умолчания в таблицу маршрутизации Gateway_ISP2:
    [edit]
    admin@edge# set protocols static table Gateway_ISP2 route 0.0.0.0/0 next-hop 203.0.113.126
    
  11. Фиксация настройки:
    [edit]
    admin@edge# commit
    
  12. Отображение настройки маршрутов по умолчанию:
    [edit]
    admin@edge# show protocols static
       table Gateway_ISP1 {
          route 0.0.0.0/0 {
             next-hop 198.51.100.254 {
             }
          }
       }
       table Gateway_ISP2 {
          route 0.0.0.0/0 {
             next-hop 203.0.113.126 {
             }
          }
       }
    
  13. Создание политики балансировки нагрузки Policy_flow_balancing:
    [edit]
    admin@edge# set policy route Policy_flow_balancing flow-balancing enable
    
  14. Добавление таблицы маршрутизации Gateway_ISP1 в политику балансировки нагрузки Policy_flow_balancing:
    [edit]
    admin@edge# set policy route Policy_flow_balancing rule 10 table Gateway_ISP1
    
  15. Добавление таблицы маршрутизации Gateway_ISP2 в политику балансировки нагрузки Policy_flow_balancing:
    [edit]
    admin@edge# set policy route Policy_flow_balancing rule 10 table Gateway_ISP2
    
  16. Фиксация настройки:
    [edit]
    admin@edge# commit
    
  17. Отображение настройки политики балансировки нагрузки:
    [edit]
    admin@edge# show policy route
       Policy_flow_balancing {
          flow-balancing enable
          rule 10 {
             table Gateway_ISP1 {
             }
             table Gateway_ISP2 {
             }
          }
       }
    

В примере ниже приведена настройка базовой балансировки нагрузки с указанием типа проверки и целей эхо-запроса.

Пример - Настройка базовой балансировки нагрузки#
  1. Установка значения счетчика сбоев для таблицы маршрутизации Gateway_ISP1 равного 3 (три последовательных сбоя эхо-запроса к удаленным целям):
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP1 failure-count 3
    
  2. Установка типа проверки ping для первой цели эхо-запроса для Gateway_ISP1:
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP1 test 10 type ping
    
  3. Указание в качестве первой цели эхо-запроса ip-адреса 192.0.2.1 для Gateway_ISP1:
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP1 test 10 target 192.0.2.1
    
  4. Установка типа проверки ping для второй цели эхо-запроса для Gateway_ISP1:
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP1 test 20 type ping
    
  5. Указание в качестве второй цели эхо-запроса ip-адреса 192.0.2.2 для Gateway_ISP1:
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP1 test 20 target 192.0.2.2
    
  6. Установка значения счетчика сбоев для таблицы маршрутизации Gateway_ISP2 равного 5 (пять последовательных сбоев эхо-запроса к удаленным целям):
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP2 failure-count 5
    
  7. Установка типа проверки ping для первой цели эхо-запроса для Gateway_ISP2:
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP2 test 10 type ping
    
  8. Указание в качестве первой цели эхо-запроса ip-адреса 192.0.2.3 для Gateway_ISP2:
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP2 test 10 target 192.0.2.3
    
  9. Установка типа проверки ping для второй цели эхо-запроса для Gateway_ISP2:
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP2 test 20 type ping
    
  10. Указание в качестве второй цели эхо-запроса ip-адреса 192.0.2.4 для Gateway_ISP2:
    [edit]
    admin@edge# set load-balancing table-health Gateway_ISP2 test 20 target 192.0.2.4
    
  11. Применение политики балансировки нагрузки для входящего трафика на интерфейсе eth1:
    [edit]
    admin@edge# set interfaces ethernet eth1 policy in route Policy_flow_balancing
    
  12. Фиксация настройки:
    [edit]
    admin@edge# commit
    
  13. Отображение настройки балансировки нагрузки:
    [edit]
    admin@edge# show load-balancing
       table-health Gateway_ISP1 {
          failure-count 3
          test 10 {
             target 192.0.2.1
             type ping
          }
          test 20 {
             target 192.0.2.2
             type ping
          }
       }
       table-health Gateway_ISP2 {
          failure-count 5
          test 10 {
             target 192.0.2.3
             type ping
          }
          test 20 {
             target 192.0.2.4
             type ping
          }
       }
    

Использование весов в таблицах маршрутизации#

Балансировка нагрузки с учетом весов таблиц маршрутизации выполняется с помощью алгоритма взвешенного случайного распределения. Если веса не назначены, шансы каждой таблицы маршрутизации быть выбранной равны. Если у таблицы маршрутизации больший вес, то в среднем она будет выбрана чаще. Например, если у таблицы маршрутизации Gateway_ISP1 вес 2, а у таблицы маршрутизации Gateway_ISP2 вес 3, таблица маршрутизации Gateway_ISP2 будет выбрана в среднем в 60% случаев.

Данный пример является продолжением вышеприведенных примеров. Для таблиц маршрутизации Gateway_ISP1 и Gateway_ISP2 в правиле 10 политики балансировки нагрузки Policy_flow_balancing указываются веса 20 и 30, соответственно. Для использования весов в таблицах маршрутизации необходимо выполнить следующие действия в режиме настройки:

Пример - Настройка использования весов в таблицах маршрутизации#
  1. Указание веса 20 для таблицы маршрутизации Gateway_ISP1 в политике балансировки нагрузки Policy_flow_balancing:
    [edit]
    admin@edge# set policy route Policy_flow_balancing rule 10 table Gateway_ISP1 weight 20
    
  2. Указание веса 30 для таблицы маршрутизации Gateway_ISP2 в политике балансировки нагрузки Policy_flow_balancing:
    [edit]
    admin@edge# set policy route Policy_flow_balancing rule 10 table Gateway_ISP2 weight 30
    
  3. Фиксация настройки:
    [edit]
    admin@edge# commit
    
  4. Отображение настройки политики балансировки нагрузки:
    admin@edge# show policy route
       Policy_flow_balancing {
          flow-balancing enable
          rule 10 {
             table Gateway_ISP1 {
                weight 20
             }
             table Gateway_ISP2 {
                weight 30
             }
          }
       }
    

Переход на резервную таблицу маршрутизации при неработоспособности остальных таблиц маршрутизации#

Данный пример является продолжением примера выше, с учетом добавления резервной таблицы маршрутизации. В предыдущем примере система была настроена на балансировку нагрузки с использованием весов таблиц маршрутизации Gateway_ISP1 и Gateway_ISP2.

В примере ниже в политику балансировки нагрузки Policy_flow_balancing добавляется таблица маршрутизации Gateway_ISP3, которая будет использоваться только в случае неработоспособности маршрутов остальных таблиц маршрутизации, причем трафик, входящий на маршрутизатор Edge через интерфейс eth1, будет передаваться через интерфейс eth4, на котором будет проходить преобразование адресов отправителей (SNAT).

В качестве резервного канала будет использоваться третий поставщик услуг доступа к сети Интернет (203.0.113.254).

Пример настройки балансировки нагрузки с резервным каналом приведен на рисунке ниже.

Пример-настройки-балансировки-нагрузки-с-резервным-каналом

Пример настройки балансировки нагрузки с резервным каналом

Для настройки использования резервной таблицы маршрутизации необходимо выполнить следующие действия в режиме настройки:

Пример - Настройка использования резервной таблицы при неработоспособности остальных таблиц маршрутизации#
  1. Создание правила 30, преобразующего сетевой адрес отправителя (SNAT):
    [edit]
    admin@edge# set service nat ipv4 rule 30 type masquerade
    
  2. Применение правила 30 к пакетам, которые были отправлены любым узлом сети 192.168.10.0/24:
    [edit]
    admin@edge# set service nat ipv4 rule 30 source address 192.168.10.0/24
    
  3. Применение правила 30 к пакетам, для которых исходящим интерфейсом является eth4:
    [edit]
    admin@edge# set service nat ipv4 rule 30 outbound-interface eth4
    
  4. Фиксация настройки:
    [edit]
    admin@edge# commit
    
  5. Отображение настройки преобразования сетевого адреса отправителя (SNAT) для правила 30:
    1
    2
    3
    4
    5
    6
    7
    [edit]
    admin@edge# show service nat ipv4 rule 30
       outbound-interface eth4
       source {
          address 192.168.10.0/24
       }
       type masquerade
    
  6. Добавление маршрута по умолчания в таблицу маршрутизации Gateway_ISP3:
    [edit]
    admin@edge# set protocols static table Gateway_ISP3 route 0.0.0.0/0 next-hop 203.0.113.254
    
  7. Добавление таблицы маршрутизации Gateway_ISP3 в политику балансировки нагрузки Policy_flow_balancing в качестве резервной таблицы маршрутизации:
    [edit]
    admin@edge# set policy route Policy_flow_balancing rule 10 table Gateway_ISP3 failover-table
    
  8. Фиксация настройки:
    [edit]
    admin@edge# commit
    
  9. Отображение настройки правила 10 политики балансировки нагрузки Policy_flow_balancing:
    [edit]
    admin@edge# show policy route Policy_flow_balancing rule 10
       table Gateway_ISP1 {
          weight 20
       }
       table Gateway_ISP2 {
          weight 30
       }
       table Gateway_ISP3 {
          failover-table
       }