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 для виртуальных адресов.
- Добавьте в таблицу ARP записи для каждого виртуального адреса на каждом реальном сервере. Адрес «реальный_ip» используется для обращения к реальному серверу и часто привязан к
eth0
.arptables -A IN -d <виртуальный_ip> -j DROP arptables -A OUT -s <виртуальный_ip> -j mangle --mangle-ip-s <реальный_ip>
После этого реальные серверы будут игнорировать входящие запросы ARP, предназначенные виртуальным адресам, а виртуальные адреса в исходящих запросах будут заменяться на реальные. Только активный маршрутизатор LVS будет обрабатывать запросы ARP с виртуальными адресами. - Повторив вышеуказанные шаги для каждого сервера, сохраните таблицу, выполнив на сервере
service arptables_jf save
chkconfig --level 2345 arptables_jf on
Командаchkconfig
заново загрузит настройки до этапа инициализации сети в процессе загрузки сети. - Настройте виртуальные адреса для серверов с помощью
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
. - Настройте прямую маршрутизацию в Piranha (см. Глава 4, Настройка распределения нагрузки с помощью Piranha).