DSR (Direct Server Response, Прямой Ответ Сервера) является наиболее предпочтительным методом Балансировки Нагрузки при крупных установках. При использовании этого метода каждый Сервер настроен для использования VIP (Виртуального адреса IP) в качестве локального. Это позволяет каждому серверу принимать пакеты, адресованные на адреса VIP, и отвечать клиентам, используя VIP в качестве адреса отправителя. Серверы не должны отвечать на запросы arp на эти адреса VIP. Вместо них на эти запросы отвечает балансировщик, и, таким образом, все входящие пакеты присылаются на балансировщик, который перенаправляет их на Серверы. Перепосылаемые пакеты адресуются прямо на MAC адрес Сервера, без изменения адреса назначения, которым остаётся VIP.
Обратите внимание: Из-за того, что для перенаправления входящих пакетов используются MAC адреса, Балансировщик Нагрузки и все балансируемые серверы (обычно - Фронтенд-Серверы Кластера CommuniGate Pro) должны входить в один сегмент сети; между Балансировщиком Нагрузки и этими серверами не должно быть никакого Маршрутизатора.
Для использования DSR метода создайте "псевдоним" для сетевого интерфейса "внутренней петли" (loopback network interface) каждого Фронтенд-Сервера. Стандартным адресом для внутренней петли является 127.0.0.1; создайте для неё псевдоним с VIP адресом и маской сети 255.255.255.255:
- Solaris
ifconfig lo0:1 plumb ifconfig lo0:1 VIP netmask 255.255.255.255 up
Для того, чтобы сделать эту конфигурацию постоянной, создайте файл /etc/hostname.lo0:1 с VIP-адресом в нём.
- FreeBSD
- Для того, чтобы сделать эти изменения в конфигурации постоянными, добавьте следующую строку в файл /etc/rc.conf:
ifconfig_lo0_alias0="inet VIP netmask 255.255.255.255"
- Linux
-
ifconfig lo:0 VIP netmask 255.255.255.255 up
или
ip address add VIP/32 dev lo
Для того, чтобы сделать эту конфигурацию постоянной, создайте файл /etc/sysconfig/network-scripts/ifcfg-lo:0: DEVICE=lo IPADDR=VIP NETMASK=255.255.255.255 ONBOOT=yes
Убедитесь, что ядро настроено так, что оно не рассылает пакеты ARP для этого lo интерфейса (так что VIP адреса не связаны ни с каким Фронтенд-Сервером в таблицах ARP). В зависимости от версии ядра Linux, в файл /etc/sysctl.conf должны быть добавлены следующие команды:
# ARP: reply only if the target IP address is # a local address configured on the incoming interface net.ipv4.conf.all.arp_ignore = 1 # # When an arp request is received on eth0, only respond # if that address is configured on eth0. net.ipv4.conf.eth0.arp_ignore = 1 # # Enable configuration of arp_announce option net.ipv4.conf.all.arp_announce = 2 # When making an ARP request sent through eth0, always use an address # that is configured on eth0 as the source address of the ARP request. net.ipv4.conf.eth0.arp_announce = 2 # # Repeat for eth1, eth2 (if exist) #net.ipv4.conf.eth1.arp_ignore = 1 #net.ipv4.conf.eth1.arp_announce = 2 #net.ipv4.conf.eth2.arp_ignore = 1 #net.ipv4.conf.eth2.arp_announce = 2
Если вы планируете использовать несколько балансируемых адресов VIP, либо если вы планируете использовать программный балансировщик IPVS под управлением CommuniGate Pro, не надо создавать файлы /etc/sysconfig/network-scripts/ifcfg-lo:n. Создайте файл /etc/sysconfig/vipaddrs и запишите все адреса VIP в него - как адреса или подсети, по одному адресу на строку. Например:
# single addresses 72.20.112.45 72.20.112.46 # a subnetwork 72.20.112.48/29
Обратите внимание: строки, начинающиеся с символа # игнорируются. Их можно использовать в качестве комментариев.
Обратите внимание: маски подсетей должны быть 24 бита или более.
Создайте следующие конфигурационные сценарии:
/etc/sysconfig/network-scripts/ifvip-utils
#!/bin/bash # # /etc/sysconfig/network-scripts/ifvip-utils # VIPADDRFILE="/etc/sysconfig/vipaddrs" VIPLIST="" # list of VIP masks: xxx.yy.zz.tt/mm where mm should be >= 24 for xVIP in `cat $VIPADDRFILE | grep -v '^#'`; do if [[ $xVIP != */* ]]; then xVIP=$xVIP/32; fi if (( ${xVIP##*/} < 24)); then echo "Incorrect mask: $xVIP" >2 ; exit 1; fi VIPLIST="$VIPLIST$xVIP " done CURRENT=`ip address show dev lo | egrep '^ +inet [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/32 .*$' | sed -r 's/ +inet ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/' ` function contains() { local x; for x in $1; do if [[ $x == $2 ]]; then return 0; fi done return 1 }
/etc/sysconfig/network-scripts/ifup-lo
#!/bin/bash # # /etc/sysconfig/network-scripts/ifup-lo # /etc/sysconfig/network-scripts/ifup-eth ${1} ${2} # # Bring up all addresses listed in the VIPADDRFILE file, as lo aliases # . /etc/sysconfig/network-scripts/ifvip-utils for xVIP in $VIPLIST; do xIP=${xVIP%/*} # xx.xx.xx.yy/mm -> xx.xx.xx.yy xIP0=${xIP%.*} # xx.xx.xx.yy/mm -> xx.xx.xx xIP1=${xIP##*.} # xx.xx.xx.yy/mm -> yy xMask=$(( 2 ** (32 - ${xVIP##*/}) )) for (( index=0; index<$xMask; index++ )); do thisIP=$xIP0.$((xIP1 + index)) if ! $(contains "$CURRENT" "$thisIP"); then ip address add $thisIP/32 dev lo fi done done
/etc/sysconfig/network-scripts/ifdown-lo
#!/bin/bash # # /etc/sysconfig/network-scripts/ifdown-lo # # Bring down all addresses listed in the VIPADDRFILE file # . /etc/sysconfig/network-scripts/ifvip-utils for xVIP in $VIPLIST; do xIP=${xVIP%/*} # xx.xx.xx.yy/mm -> xx.xx.xx.yy xIP0=${xIP%.*} # xx.xx.xx.yy/mm -> xx.xx.xx xIP1=${xIP##*.} # xx.xx.xx.yy/mm -> yy xMask=$(( 2 ** (32 - ${xVIP##*/}) )) for (( index=0; index<$xMask; index++ )); do thisIP=$xIP0.$((xIP1 + index)) if $(contains "$CURRENT" "$thisIP"); then ip address delete $thisIP/32 dev lo fi done done /etc/sysconfig/network-scripts/ifdown-eth ${1} ${2}
- другие ОС
- уточните у производителя ОС
Обратите внимание: при создании сетевого "псевдонима", откройте через Веб Интерфейс Администратора в разделе Установки страницу Общее -> Информация и нажмите на кнопку Обновить, чтобы сервер мог обнаружить добавленный IP адрес.
DSR метод прозрачен для всех протоколов, работающих через TCP (включая SIP через TCP/TLS) и для него не требуются никакие дополнительные настройки Сервера CommuniGate Pro: когда на локальный VIP адрес принимается TCP соединение, исходящие пакеты для такого соединения будут всегда иметь в качестве адреса источника тот же самый VIP адрес.
Для того, чтобы использовать DSR метод для SIP UDP, конфигурация Фроненд-Серверов CommuniGate Pro должна быть изменена:
- через Веб Интерфейс Администратора откройте область Установки. В разделе Real-Time откройте страницу SIP, затем откройте страницу Приём
- нажмите на ссылку UDP Приёмник, для того чтобы открыть страницу Приёмника
- по умолчанию Приёмник SIP UDP имеет один сокет: он принимает "все адреса" на порту 5060.
- измените настройку, изменив значение "все адреса" на значение VIP (VIP адрес должен быть доступен для выбора из меню).
- нажмите на кнопку Модифицировать
- создайте дополнительный сокет для получения входящих пакетов на порт 5060, "все адреса" и нажмите на кнопку Модифицировать
Теперь у вас есть два сокета - первый для VIP:5060, а второй для все адреса:5060; при необходимости Фронтенд-Сервер может использовать первый сокет для отправки пакетов с VIP адресом в качестве адреса источника. Повторите эти изменения в настройке для всех Фронтенд-Серверов.
Балансировщик нагрузки обычно отправляет некоторые запросы на серверы в своих "балансировочных пулах". При неполучении ответа Балансировщик Нагрузки удаляет сервер из пула и распределяет входящие запросы на оставшиеся в пуле серверы.
Если SIP-Ферма включена, собственные запросы Балансировщика Нагрузки могут передаваться на другие серверы, входящие в SIP-Ферму, и, таким образом, ответы будут поступать от других серверов. Это может привести к тому, что Балансировщик Нагрузки решит, что сервер, которому был послан запрос, не функционирует и исключит этот сервер из обслуживаемого набора серверов. Для решения этой проблемы используйте следующие запросы SIP для проверки доступности реального сервера Балансировщиком Нагрузки: OPTION sip:aaa.bbb.ccc.ddd:5060 SIP/2.0 Route: <sip:aaa.bbb.ccc.ddd:5060;lr> другие поля пакетов SIP
где aaa.bbb.ccc.ddd - IP адрес тестируемого Сервера CommuniGate Pro. Эти пакеты обрабатываются Сервером aaa.bbb.ccc.ddd , который генерирует ответы и отправляет их обратно Балансировщику Нагрузки (или тестирующему устройству).
Пример конфигурации:
- Маршрутизатор имеет адрес 64.173.55.161 (маска сети 255.255.255.224), DNS Сервер 64.173.55.167.
- 4 Фронтенд-Сервера (fe5, fe6, fe7, fe8) с "реальными" IP адресами 64.173.55.{180,181,182,183}
- внутри-кластерная сеть 192.168.10.xxx, с "кластерными" адресами Фронтенд-Серверов 192.168.10.{5,6,7,8}
- балансировщик нагрузки с адресом 64.173.55.164 (VIP адрес).
- на каждом Фронтенд-Сервере на интерфейсе сетевой петли сконфигурирован псевдоним для адреса 64.173.55.164.
Для RTP используется метод с несколькими адресами IP без NAT. Конфигурация CommuniGate Pro (раздел Установки в Веб Интерфейсе Администратора):
- страница Сеть->LAN->Общие для Кластера: IPv4 WAN Адрес: 64.173.55.164
- страница Сеть->LAN->Общие для Сервера (на каждом из Фронтенд-Серверов): IPv4 WAN Адрес: 64.173.55.{180,181,182,183}
- страница Real-Time->SIP->Приём->UDP Приёмник (на каждом из Фронтенд-Серверов): {порт 5060, адрес:64.173.55.164} и {порт: 5060, адрес: все адреса;}
Конфигурация "без NAT", с "нормальной" балансировкой нагрузки для POP, IMAP и "DSR" балансировкой нагрузки для SIP (UDP/TCP), SMTP, HTTPU (8100).
Конфигурация Балансировщика Нагрузки:
- Foundry ServerIron® (его служебный адрес - 64.173.55.176)
Startup configuration:
!
server predictor round-robin
!
server real fe5 64.173.55.180
port pop3
port pop3 keepalive
port imap4
port imap4 keepalive
port 5060
port 5060 keepalive
port smtp
port smtp keepalive
port 8100
port 8100 keepalive
!
server real fe6 64.173.55.181
port pop3
port pop3 keepalive
port imap4
port imap4 keepalive
port 5060
port 5060 keepalive
port smtp
port smtp keepalive
port 8100
port 8100 keepalive
!
server real fe7 64.173.55.182
port pop3
port pop3 keepalive
port imap4
port imap4 keepalive
port 5060
port 5060 keepalive
port smtp
port smtp keepalive
port 8100
port 8100 keepalive
!
server real fe8 64.173.55.183
port pop3
port pop3 keepalive
port imap4
port imap4 keepalive
port 5060
port 5060 keepalive
port smtp
port smtp keepalive
port 8100
port 8100 keepalive
!
!
server virtual vip1 64.173.55.164
predictor round-robin
port pop3
port imap4
port 5060
port 5060 dsr
port smtp
port smtp dsr
port 8100
port 8100 dsr
bind pop3 fe5 pop3 fe6 pop3 fe7 pop3 fe8 pop3
bind imap4 fe5 imap4 fe6 imap4 fe7 imap4 fe8 imap4
bind 5060 fe8 5060 fe7 5060 fe6 5060 fe5 5060
bind smtp fe8 smtp fe7 smtp fe6 smtp fe5 smtp
bind 8100 fe5 8100 fe6 8100 fe7 8100 fe8 8100
!
ip address 64.173.55.176 255.255.255.224
ip default-gateway 64.173.55.161
ip dns server-address 64.173.55.167
ip mu act
end
Обратите внимание: вы НЕ должны использовать port 5060 sip-switch, port sip sip-proxy-server или другие "умные" (уровня приложений) возможности Балансировщика Нагрузки.
- Alteon/Nortel AD3® (служебный адрес - 64.173.55.176, аппаратный порт 1 используется соединения с Интернет, к портам 5-8 присоединены Фронтенд-Серверы)
script start "Alteon AD3" 4 /**** DO NOT EDIT THIS LINE!
/* Configuration dump taken 21:06:57 Mon Apr 9, 2007
/* Version 10.0.33.4, Base MAC address 00:60:cf:41:f5:20
/c/sys
tnet ena
smtp "mail.communigate.ru"
mnet 64.173.55.160
mmask 255.255.255.224
/c/sys/user
admpw "ffe90d3859680828b6a4e6f39ad8abdace262413d5fe6d181d2d199b1aac22a6"
/c/ip/if 1
ena
addr 64.173.55.176
mask 255.255.255.224
broad 64.173.55.191
/c/ip/gw 1
ena
addr 64.173.55.161
/c/ip/dns
prima 64.173.55.167
/c/sys/ntp
on
dlight ena
server 64.173.55.167
/c/slb
on
/c/slb/real 5
ena
rip 64.173.55.180
addport 110
addport 143
addport 5060
addport 25
addport 8100
submac ena
/c/slb/real 6
ena
rip 64.173.55.181
addport 110
addport 143
addport 5060
addport 25
addport 8100
submac ena
/c/slb/real 7
ena
rip 64.173.55.182
addport 110
addport 143
addport 5060
addport 25
addport 8100
submac ena
/c/slb/real 8
ena
rip 64.173.55.183
addport 110
addport 143
addport 5060
addport 25
addport 8100
submac ena
/c/slb/group 1
add 5
add 6
add 7
add 8
name "all-services"
/c/slb/port 1
client ena
/c/slb/port 5
server ena
/c/slb/port 6
server ena
/c/slb/port 7
server ena
/c/slb/port 8
server ena
/c/slb/virt 1
ena
vip 64.173.55.164
/c/slb/virt 1/service pop3
group 1
/c/slb/virt 1/service imap4
group 1
/c/slb/virt 1/service 5060
group 1
udp enabled
udp stateless
nonat ena
/c/slb/virt 1/service smtp
group 1
nonat ena
/c/slb/virt 1/service 8100
group 1
nonat ena
/
script end /**** DO NOT EDIT THIS LINE!
- F5 Big-IP® (его служебный адрес - 64.173.55.176)
- Используйте возможность nPath Routing для SIP UPD/TCP трафика. Это название, принятое в F5 Networks, Inc. для метода Прямого Ответа Сервера.
Из-за того, что F5 BigIP не является коммутатором, вы должны использовать метод DSR (nPath Routing) для всех сервисов. bigip_base.conf:
vlan external {
tag 4093
interfaces
1.1
1.2
}
stp instance 0 {
vlans external
interfaces
1.1
external path cost 20K
internal path cost 20K
1.2
external path cost 20K
internal path cost 20K
}
self allow {
default
udp snmp
proto ospf
tcp https
udp domain
tcp domain
tcp ssh
}
self 64.173.55.176 {
netmask 255.255.255.224
vlan external
allow all
}
bigip.conf:
partition Common {
description "Repository for system objects and shared objects."
}
route default inet {
gateway 64.173.55.161
}
monitor MySMTP {
defaults from smtp
dest *:smtp
debug "no"
}
profile fastL4 CGS_fastL4 {
defaults from fastL4
idle timeout 60
tcp handshake timeout 15
tcp close timeout 60
loose initiation disable
loose close enable
software syncookie disable
}
pool Frontends {
monitor all MySMTP and gateway_icmp
members
64.173.55.180:any
64.173.55.181:any
64.173.55.182:any
64.173.55.183:any
}
node * monitor MySMTP
bigip_local.conf:
virtual address 64.173.55.164 {
floating disable
unit 0
}
virtual External {
translate address disable
pool Frontends
destination 64.173.55.164:any
profiles CGS_fastL4
}
Когда адрес VIP присвоен домену CommuniGate Pro, модули CommuniGate Pro можно настроить так, чтобы исходящие соединения TCP использовали эти адреса VIP в качестве сетевого адреса источника. Если так сделать, то пакеты с ответами будут приходить на балансировщик нагрузки, и его надо настроить для переадресации этих пакетов с ответами на правильный член Кластера - на Сервер CommuniGate Pro, который установил это соединение TCP. Для каждого члена кластера, который способен создавать исходящие соединения TCP (обычно это - Фронтенд-Серверы), надо выбрать диапазон портов для использования в исходящих соединениях. Эти диапазоны не должны пересекаться. Например, для первого Члена кластера выберите диапазон 33000-33999, для второго - 34000-34999, и так далее.
Убедитесь, что ОС сервера настроена так, что выбранные диапазоны портов исключены из диапазона динамических портов. Например, следующие команды могут быть использованы в ОС Linux Для получения диапазона динамических портов: [prompt]# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 [prompt]#
например, следующие команды могут быть использованы в ОС Linux Для изменения диапазона динамических портов: [prompt]# echo "50000 61000" >/proc/sys/net/ipv4/ip_local_port_range cat /proc/sys/net/ipv4/ip_local_port_range 50000 61000 [prompt]#
Для того, чтобы сделать эти изменения в конфигурации постоянными, добавьте следующую строку в файл /etc/sysctl.conf: net.ipv4.ip_local_port_range = 50000 61000
На каждом Члене Кластера откройте настройки Сети в разделе Установок Интерфейса Администратора и укажите выбранный диапазон портов TCP. Отключите настройку "Использовать только для Медиа Прокси", чтобы Сервер CommuniGate Pro использовал порты из этого диапазона для создания исходящих соединений TCP с определённым адресом источника.
Настройте Балансировщик Нагрузки: все пакеты, адресованные на адрес VIP на порт с номером из выбранного диапазона, должны быть отправлены на соответствующий Член Кластера.
Динамический Кластер CommuniGate Pro может быть использован для управления программными балансировщиками нагрузки, такими как Linux IPVS, запущенными на тех же системах, что используются в качестве членов Кластера. Выберите члены кластера, на которые будет распределяться входящий трафик. В конфигурации фронтенд-бэкенд для этого обычно используются все фронтенды.
Убедитесь, что на всех выбранных членах кластера в качестве алиаса на локальном интерфейсе (loopback) настроен адрес VIP (смотрите выше).
Через Веб Интерфейс Администратора откройте в разделе Установки страницу Кластер и выберите группу балансировки A для выбранных серверов:
- Вес Балансировки
- Используйте эту настройку для указания относительного веса этого сервера в Группе Балансировки Нагрузки. Чем больше это значение, тем большая часть входящих соединений TCP и пакетов UDP распределяется на этот сервер.
Все или часть выбранных серверов должны быть оснащены программным обеспечением балансировщика нагрузки, и у них должна быть настроена программа-помощник "Внешний балансировщик Нагрузки". Эта программа должна реализовывать Протокол Помощника Балансировки Нагрузки.
Как только первая программа-помощник Балансировки Нагрузки запущена на Члене Кластера, Контроллер Кластера активизирует Балансировщик и направляет весь входящий трафик на этот член Кластера, который распределяет этот трафик на сервер Группы Балансировки этого члена Кластера.
Если член Кластера с активным Балансировщиком Нагрузки останавливается или переключается в состояние "не готов", Контроллер Кластера запускает другой балансировщик нагрузки в этой же группе (если такой есть).
Пакет CommuniGate Pro для Linux включает в себя сценарий оболочки Services/IPVSHelper.sh, который может быть использован для управления балансировщиком нагрузки IPVS.
Этот сценарий ожидает наличия файла с адресами VIP в /etc/sysconfig/vipaddrs и настройки локального интерфейса (loopback) с этими адресами (смотрите выше).
Укажите $Services/IPVSHelper.sh parameters в качестве пути к приложению-помощнику Внешнего Балансировщика Нагрузки, и запустите его, включив маркер Помощника. Поддерживаются следующие параметры:
- -p число
- постоянство: все соединения с того же адреса IP будут направлены на тот же Член Кластера, если они получены в течение указанного числом количества секунд. Укажите 0 (ноль) для отключения постоянства. По умолчанию используется значение 15 секунд.
- -i интерфейс
- имя сетевого интерфейса, на который приходят пакеты. адресованные на адрес VIP. По умолчанию используется имя eth0.
- -s число
- значение "идентификатора синхронизации" (syncID), который используется для синхронизации таблиц соединений с активного балансировщика нагрузки на другие Члены Кластера в этой же группе балансировки. По умолчанию используется значение 0.
- -t число
- значение тайм-аута (в секундах) на чтение команд, отправленных сервером CommuniGate Pro. По умолчанию используется значение 15 секунд.
- -f путь-к-файлу
- путь в файловой системе сервера к файлу со списком адресов VIP. По умолчанию используется значение /etc/sysconfig/vipaddrs
- -r число
- значение относительного веса активного балансировщика в Группе Балансировки Нагрузки. Для всех других членов группы применяется значение 100. По умолчанию используется значение 100.
- -m
- если указан этот параметр, то программа-помощник не выполняет команды оболочки ОС на самом деле, а только записывает их в лог CommuniGate Pro.
Обратите внимание: рекомендуется использовать ядро Linux версии 3.5.3-1 или новее. При использовании более ранних версий ядра, соединения TCP к активному балансировщику нагрузки прерываются, когда другой сервер становится активным балансировщиком.
Обратите внимание: если на члене Кластера включить программу-помощник внешнего балансировщика нагрузки, а потом выключить. Некоторые активные соединения могут быть разорваны. Если вы не планируете снова запускать программу-помощник, перезапустите службу ipvsadm в ОС, или полностью отключите её.
|