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

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

Как уже упоминалось (см. Раздел 1.4.2, «Прямая маршрутизация»), прямая маршрутизация позволяет реальным серверам обрабатывать и перенаправлять пакеты запрашивающему их пользователю напрямую вместо их передачи через маршрутизатор LVS. При этом необходимо, чтобы серверы были физически подключены к сетевому сегменту с маршрутизатором и могли обрабатывать и маршрутизировать исходящие пакеты.
Структура сети
В схеме распределения нагрузки с прямой маршрутизацией маршрутизатор LVS должен получать поступающие запросы и перенаправлять их реальному серверу. В свою очередь, реальный сервер должен напрямую передать ответ клиенту. Если клиент обращается к реальному серверу из Интернета через маршрутизатор, сервер все равно должен связаться с клиентом напрямую. В этом случае для сервера можно настроить шлюз, через который пакеты будут передаваться в Интернет. Каждый сервер может иметь собственный шлюз, но в типичной схеме распределения нагрузки серверы взаимодействуют с Интернетом через один общий шлюз.

Важно

Не рекомендуется использовать маршрутизатор LVS в качестве шлюза, так как это неоправданно усложняет конфигурацию и увеличивает нагрузку на маршрутизатор.
Оборудование
Аппаратные требования аналогичны требованиям других схем распределения нагрузки. В то время как маршрутизатор LVS должен размещаться в окружении Red Hat Enterprise Linux, чтобы иметь возможность обработки поступающих запросов и распределения нагрузки между реальными серверами, сами серверы вовсе не должны быть компьютерами Linux. Каждый маршрутизатор должен быть оборудован одной или двумя сетевыми платами; при наличии двух карт входящие запросы обрабатываются одной картой, а перенаправляемые реальным серверам запросы — другой.
Шлюз необходим, так как исходящие пакеты должны передаваться клиенту напрямую. Максимальной производительности можно достичь, оборудовав каждый сервер собственным шлюзом с отдельным подключением к сети, в которой расположен клиент.
Программное обеспечение
Для прямой маршрутизации потребуется настроить дополнительные параметры за пределами Piranha (см. Раздел 3.2.1, «Прямая маршрутизация и arptables_jf», Раздел 3.2.2, «Прямая маршрутизация и iptables»).

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

В схеме распределения нагрузки, использующей arptables_jf, каждому серверу надо присвоить виртуальный адрес, чтобы сделать возможной прямую маршрутизацию пакетов. Запросы ARP, предназначенные виртуальным адресам, будут игнорироваться реальными серверами, поэтому виртуальные адреса в запросах ARP будут заменены реальными адресами.
С помощью arptables_jf можно сопоставить программы отдельному виртуальному адресу или порту, который обслуживается реальным сервером. Например, различные экземпляры Apache могут быть привязаны к различным виртуальным адресам. arptables_jf также характеризуется существенно более высокой производительностью по сравнению с iptables.
arptables_jf не позволяет настроить активацию виртуальных IP-адресов во время загрузки.
Ниже рассказывается, как настроить реальный сервер так, чтобы он игнорировал запросы ARP для виртуальных адресов.
  1. Добавьте в таблицу ARP записи для каждого виртуального адреса на каждом реальном сервере. Адрес «реальный_ip» используется для обращения к реальному серверу и часто привязан к eth0.
    arptables -A IN -d <виртуальный_ip> -j DROP
    arptables -A OUT -s <виртуальный_ip> -j mangle --mangle-ip-s <реальный_ip>
    
    После этого реальные серверы будут игнорировать входящие запросы ARP, предназначенные виртуальным адресам, а виртуальные адреса в исходящих запросах будут заменяться на реальные. Только активный маршрутизатор LVS будет обрабатывать запросы ARP с виртуальными адресами.
  2. Повторив вышеуказанные шаги для каждого сервера, сохраните таблицу, выполнив на сервере
    service arptables_jf save
    chkconfig --level 2345 arptables_jf on
    Команда chkconfig заново загрузит настройки до этапа инициализации сети в процессе загрузки сети.
  3. Настройте виртуальные адреса для серверов с помощью ifconfig:
    # ifconfig eth0:1 192.168.76.24 netmask 255.255.252.0 broadcast 192.168.79.255 up
    или с помощью ip:
    # ip addr add 192.168.76.24 dev eth0
    Как уже говорилось, системные утилиты Red Hat не позволяют настроить виртуальные адреса во время загрузки. В этом случае можно поместить команды их инициализации в /etc/rc.d/rc.local.
  4. Настройте прямую маршрутизацию в Piranha (см. Глава 4, Настройка распределения нагрузки с помощью Piranha).