1.4.2. Прямая маршрутизация

1.4.2. Прямая маршрутизация

Прямая маршрутизация обеспечивает более высокую производительность по сравнению с другими сетевыми топологиями распределения нагрузки и позволяет реальным серверам обрабатывать и перенаправлять пакеты запрашивающему их пользователю напрямую вместо прохождения через маршрутизатор LVS. Это уменьшает риск снижения производительности, так как маршрутизатор будет обрабатывать только входящие пакеты.
Прямая маршрутизация
Прямая маршрутизация
Рисунок 1.4. Прямая маршрутизация

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

1.4.2.1. Прямая маршрутизация и ограничения ARP

Несмотря на очевидные достоинства прямой маршрутизации, она не лишена недостатков. Основные проблемы возникают при использовании прямой маршрутизации с протоколом ARP (Address Resolution Protocol).
В стандартной ситуации клиент отправляет запрос из Интернета на IP-адрес. Маршрутизаторы передают запросы получателю, сопоставляя IP-адрес MAC-адресу компьютера с помощью ARP. Запросы ARP отправляются всем компьютерам в этой сети. Компьютер с подходящей комбинацией IP и MAC-адреса получит пакет. Соответствия IP и MAC хранятся в кэше ARP, который периодически очищается (обычно каждые 15 минут) и заполняется заново.
Трудность состоит в том, что так как запросы, предназначенные IP-адресу, должны быть сопоставлены MAC-адресу, то и виртуальный IP-адрес должен быть сопоставлен MAC-адресу. Но так как маршрутизатору LVS и реальным серверам соответствует один и тот же виртуальный адрес, запрос ARP будет передан всем компьютерам с этим адресом. Это может привести к проблемам, главная из которых заключается в том, что виртуальный IP может быть напрямую сопоставлен реальному серверу, который будет обрабатывать все запросы в обход маршрутизатора LVS, что лишает смысла весь процесс распределения нагрузки.
Чтобы этого не случилось, надо обеспечить передачу поступающих запросов именно маршрутизатору, а не серверу напрямую. Для этой цели подходят arptables_jf или iptables:
  • arptables_jf не разрешает ARP сопоставлять виртуальные адреса реальным серверам;
  • iptables позволяет полностью избежать проблемы ARP, изначально не настраивая виртуальные адреса для серверов.