3.2. Сеть LVS с использованием прямой маршрутизации
Как уже упоминалось в
разделе 1.4.2, Прямая маршрутизация, прямая маршрутизация позволяет реальным серверам непосредственно отвечать пользователям, отправившим запрос, вместо того, чтобы отправлять пакеты через LVS-маршрутизатор. В случае использования прямой маршрутизации необходимо, чтобы реальные серверы были подключены к тому же сегменту сети, что и LVS-маршрутизатор, а также необходимо, чтобы они могли корректно обрабатывать и отсылать исходящие пакеты.
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-адреса, необходимо выполнить следующие действия:
Создать записи 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-маршрутизатор.
После того, как эти действия будут выполнены на каждом реальном сервере, необходимо сохранить конфигурацию. Для этого на каждом сервере нужно выполнить следующую команду:
service arptables_jf save
chkconfig --level 2345 arptables_jf on
Команда chkconfig
настраивает систему таким образом, что конфигурация arptables будет загружаться при старте системы.
Настроить виртуальные 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
.