CommuniGate Pro: балансувальник Навантаження Кластера

  1. Linux IPVS

версія 6.2

Кластерна архітектура CommuniGate Pro дозволяє балансувальник навантаження направити будь-яке з'єднання на кожен працюючий Сервер, знімаючи необхідність в складних і ненадійних балансувальник навантаження, що працюють на більш "високому рівні" прикладних протоколів. Для управління трафіком можуть використовуватися недорогі Комутатори, що працюють на Рівні OSI 4.

Додатково, Динамічний Кластер CommuniGate Pro здатний управляти програмними балансувальник навантаження, такими як модуль "ipvs" ядра ОС Linux: Кластер CommuniGate Pro збирає інформацію про працюючих серверів, що належать одній або більш "групам балансування", з'ясовує, які з серверів можуть використовуватися в якості балансувальник , призначає балансувальник один з серверів групи, інформуючи його про інших членів цієї групи, і призначає балансувальник інший сервер, якщо поточний був зупинений.

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.com" 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 / po rt 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 IPVX, запущеними на тих же системах, що використовуються в якості членів Кластера.

Виберіть члени кластера, на які буде розподілятися вхідний трафік. У конфігурації фронтенд-бекенд для цього зазвичай використовуються всі фронтенда.

Переконайтеся, що на всіх обраних членів кластера як аліаса на локальному інтерфейсі (loopback) налаштований адресу VIP (дивіться вище).

Через Веб Інтерфейс Адміністратора відкрийте в розділі Установки сторінку Кластер і виберіть групу балансування A для обраних серверів: Вага Балансування Використовуйте це налаштування для вказівки відносного ваги цього сервера в Групі Балансування Навантаження. Чим більше це значення, тим більша частина вхідних з'єднань TCP і пакетів UDP розподіляється на цей сервер. Все або частина обраних серверів повинні бути оснащені програмним забезпеченням балансувальника навантаження, і у них повинна бути налаштована програма-помічник "Зовнішній балансувальник Навантаження". Ця програма повинна реалізовувати протокол Помічника Балансування Навантаження.

Як тільки перша програма-помічник Балансування Навантаження запущена на члені Кластера, Контролер Кластера активізує Балансувальник і направляє весь вхідний трафік на цей член Кластера, який розподіляє цей трафік на сервер Групи Балансування цього члена Кластера.

Якщо член Кластера з активним балансувальник Навантаження зупиняється або перемикається в стан "не готовий", Контролер Кластера запускає інший балансувальник навантаження в цій же групі (якщо такий є).

Linux IPVS

Пакет 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 в ОС, або повністю вимкніть її.

Керівництво CommuniGate® Pro. Copyright © 1998-2019, Stalker Software, Inc.