Про этот блог забыли все, даже Я сам 😉
Попробую опубликовать хотя-бы то что что было написано достаточно давно но не опубликовано.
Уже очень давно состоялась встреча Московской группы пользователей OpenSolaris где в частности рассказывалось о способах балансировки сетевого трафика в Linux и FreeBSD. Однако выяснилось что ни кто не знает что в OpenSolaris также есть балансировки трафика.
В Solaris 10 действительно подобного функционала не было, однако в OpenSolaris был добавлен ILB ( Integrated Load Balancer ). Сейчас ILB уже включен в репозиторий Solaris 11 Express и думаю он будет входить в Solaris 11.
Давайте попробуем разобраться что такое ILB и как его настраивать.
Для начала необходимо проверить установлен ли ILB и если нет, то установить :
root@solaris:~# pkg search ilbadm INDEX ACTION VALUE PACKAGE basename file usr/sbin/ilbadm pkg:/service/network/load-balancer/ilb@0.5.11-0.151.0.1 root@solaris:~# man pkg root@solaris:~# pkg install pkg:/service/network/load-balancer/ilb@0.5.11-0.151.0.1 Packages to install: 1 Create boot environment: No Services to restart: 1 DOWNLOAD PKGS FILES XFER (MB) Completed 1/1 11/11 0.2/0.2 PHASE ACTIONS Install Phase 38/38 PHASE ITEMS Package State Update Phase 1/1 Image State Update Phase 2/2 PHASE ITEMS Reading Existing Index 8/8 Indexing Packages 1/1 root@solaris:~#
Теперь ILB установлен и мы можем приступить к настройке балансировки.
Для этого надо стартовать демон ilb. Но перед этим надо поднять ip forwarding. Если забыть это сделать то вывод ilbadm вам сразу же подскажет что не так :
root@solaris:~# ilbadm show-rule ilbadm: socket() failed root@solaris:~#
В чём ошибка очевидно, не правда ли? 😉
Итак стартуем ip forwarding :
root@solaris:~# svcadm enable svc:/network/ipv4-forwarding root@solaris:~# svcadm enable svc:/network/loadbalancer/ilb:default
ILB поддерживает 3 режима балансировки :
– DST
– Полный NAT
– Частичный NAT
В режиме DSR ( Direct Server Return ) ILB балансирует входящий трафик между back-end серверами. При этом ответы от back-end серверов идут напрямую клиенту в обход балансировщика.
Режимы основанные на NAT балансировщик обрабатывает как входящий так и исходящий трафик меняя IP адреса в заголовках IP пакетов.
В случае Full-NAT происходит замена и source и destination адреса. Т.Е. заголовок IP пакета выглядит так, как будто back-end сервера получают трафик непосредственно от балансировщика.
Клиенты также будут получать ответы из заранее настроенного диапазона IP адресов. Например от самого балансировщика.
В случае с Half-NAT ILB меняет лишь destination IP.
Чтобы попробовать ILB я взял 3 сервера. Два из них я использовал как back-end сервера. Их адреса : 192.168.57.102 и 192.168.57.103. На них я поднял nginx. Третий сервер выступал балансировщиком. Его адрес : 192.168.57.101.
Чтобы ILB работать, ему надо указать на какие back-end сервера его балансировать. Для этого необходимо создать серверную группу :
root@solaris:~# ilbadm create-servergroup -s servers=192.168.57.102:80,192.168.57.103:80 websg root@solaris:~# ilbadm show-servergroup root@solaris:/tmp# ilbadm show-sg SGNAME SERVERID MINPORT MAXPORT IP_ADDRESS websg _websg.0 80 80 192.168.57.102 websg _websg.1 80 80 192.168.57.103
После создается само правило, по которому будет балансироваться трафик. Для начала я настроил Full-NAT:
root@solaris:/tmp# ilbadm create-rule -e -i vip=192.168.56.101,port=80 -m lbalg=rr,type=NAT,proxy-src=192.168.56.101 -o servergroup=websg webrule root@solaris:/tmp# ilbadm show-rule RULENAME STATUS LBALG TYPE PROTOCOL VIP PORT webrule E roundrobin NAT TCP 192.168.56.101 80
и это всё!
Я настроил чтобы http трафик на to 192.168.56.101 ( виртуальный IP ) балансировался между двумя другими серверами. Запросы будут обрабатываться back-end серверами по очереди (round-robin). Ответы же будут приходить от адреса 192.168.56.101.
Теперь давайте поменяем правило с Full-NAT на Half-NAT :
ilbadm delete-rule -a ilbadm create-rule -e -i vip=192.168.56.101,port=80 -m lbalg=rr,type=h -o servergroup=websg webrule root@solaris:/tmp# ilbadm show-rule RULENAME STATUS LBALG TYPE PROTOCOL VIP PORT webrule E roundrobin HALF-NAT TCP 192.168.56.101 80
Всё это очень просто настраивается. При этом есть большое количество разнообразных опций. Так например можно изменить алгоритм балансировки запросов между back-end серверами. Кроме того средствами ILB можно настроить мониторинг back-end серверов Кроме того поддерживается Session persistence и Connection draining.