Product SiteDocumentation Site

3.2. Сеть LVS с использованием прямой маршрутизации

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

Важно

Не рекомендуется использовать LVS-маршрутизатор в качестве шлюза для реальных серверов, поскольку это усложняет настройку и увеличивает нагрузку на LVS-маршрутизатор, что вновь приводит к возникновению узкого места в сетевой инфраструктуре, как и в случае использования NAT-маршрутизации.
Аппаратное обеспечение
Требования LVS данного типа к аппаратному обеспечению схожи с требованиями для LVS с использованием других топологий. Несмотря на то, что LVS-маршрутизатор должен работать под управлением Red Hat Enterprise Linux для того, чтобы обрабатывать запросы и распределять нагрузку, для реальных серверов это не является обязательным. LVS-маршрутизаторы должны иметь один или два сетевых адаптера (в зависимости от того имеется ли резервный маршрутизатор). Два адаптера можно использовать для разделения трафика - входящие запросы обрабатываются одним адаптером, а через второй адаптер проходят пакеты к реальным серверам.
Поскольку реальные серверы обходят LVS-маршрутизатор при отправке пакетов клиенту, требуется шлюз в Internet. Для увеличения производительности и доступности каждый реальный сервер должен использовать свой шлюз, который, в свою очередь, использует отдельное подключение к сети, из которой поступают клиентские запросы (Internet или intranet).
Программное обеспечение
Кроме использования Piranha Configuration Tool потребуется выполнить дополнительные настройки, в особенности, если возникнут проблемы с ARP при использовании данной топологии LVS. Подробную информацию можно найти в разделе 3.2.1, Прямая маршрутизация и arptables_jf или в разделе 3.2.2, Прямая маршрутизация и iptables.

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

Для настройки прямой маршрутизации с использованием arptables_jf, каждый реальный сервер должен иметь свой виртуальный IP-адрес для прямой маршрутизации пакетов. ARP-запросы к VIP полностью игнорируются реальными серверами и любой отсылаемый ARP-пакет, содержащий VIP, изменяется таким образом, что VIP подменяется IP-адресом реального сервера.
Используя метод arptables_jf можно привязать определенное приложение к каждому индивидуальному VIP или порту, который обслуживает реальный сервер. Например, метод arptables_jf позволяет привязать несколько экземпляров HTTP-сервера Apache к различным виртуальным IP-адресам системы. Использование метода arptables_jf также дает ряд преимуществ в производительности по сравнению с iptables.
Тем не менее, при использовании метода arptables_jf нельзя настроить VIP-ы для автоматического старта при загрузке системы штатными средствами настройки Red Hat Enterprise Linux.
Для того, чтобы каждый реальный сервер игнорировал ARP-запросы для каждого VIP-адреса, необходимо выполнить следующие действия:
  1. Создать записи ARP-таблицы для каждого виртуального адреса каждого реального сервера (real_ip - это IP, используемый для связи с реальным сервером; чаще всего это IP, привязанный к интерфейсу eth0):
    arptables -A IN -d <virtual_ip> -j DROP
    arptables -A OUT -d <virtual_ip> -j mangle --mangle-ip-s <real_ip>
    
    Это заставит реальные серверы игнорировать ARP-запросы к виртуальным IP-адресам, а также изменять исходящие ARP-пакеты таким образом, что VIP в них меняется на реальный IP сервера. Единственный узел, который должен отвечать на ARP-запросы к любым виртуальным IP-адресам - это активный в настоящий момент LVS-маршрутизатор.
  2. После того, как эти действия будут выполнены на каждом реальном сервере, необходимо сохранить конфигурацию. Для этого на каждом сервере нужно выполнить следующую команду:
    service arptables_jf save
    chkconfig --level 2345 arptables_jf on
    Команда chkconfig настраивает систему таким образом, что конфигурация arptables будет загружаться при старте системы.
  3. Настроить виртуальные IP-адреса на всех реальных серверах; при помощи ifconfig создать IP-псевдоним. Например:
    # ifconfig eth0:1 192.168.76.24 netmask 255.255.252.0 broadcast 192.168.79.255 up
    
    Или используя утилиту ip из пакета iproute2, например:
    # ip addr add 192.168.76.24 dev eth0
    
    Как уже отмечалось ранее, виртуальные IP-адреса не могут быть настроены для автоматического старта при загрузке системы с использованием штатных средств настройки Red Hat Enterprise Linux. Один из способов решения этой задачи - поместить одну из приведенных выше команд в файл /etc/rc.d/rc.local.