Load Balancer Softwarov´ y projekt na MFF UK Praha
Uˇ zivatelsk´ a dokumentace
Podˇekov´an´ı: Prof. RNDr. Milanu Tich´emu, DrSc. za prop˚ ujˇcen´ı deseti poˇc´ıtaˇc˚ u v laboratoˇri labTS MFF UK pro u ´ˇcely testov´an´ı. Mgr. Janu Redlovi za umoˇznˇen´ı praktick´eho testu ve spoleˇcnosti Czech OnLine.
2
Obsah ´ 1 Uvod ˇ sitelsk´ 1.1 Reˇ y kolektiv - rozdˇelen´ı prac´ı ´ 1.2 Uvod do problematiky . . . . . . . 1.3 Definice pojm˚ u . . . . . . . . . . . 1.4 Architektura Load Balanceru . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
2 Instalace a spuˇ stˇ en´ı 2.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Instalace ODBC . . . . . . . . . . . . . . . . . . 2.2 Nastaven´ı Load Balanceru . . . . . . . . . . . . . . . . 2.3 Nastaven´ı konfiguraˇcn´ıho souboru . . . . . . . . . . . . 2.3.1 Nastaven´ı rozhran´ı Load Balanceru . . . . . . . 2.3.2 Nastaven´ı poslouchac´ıch port˚ u, server˚ u a skupin 2.3.3 Nastaven´ı pravidel prvn´ı vrstvy . . . . . . . . . 2.3.4 Dalˇs´ı z´akladn´ı nastaven´ı . . . . . . . . . . . . . 2.4 Spuˇstˇen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Proces init a ovl´ ad´ an´ı Load Balanceru 3.1 Spuˇstˇen´ı Load Balanceru . . . . . . . . 3.2 Bˇeh Load Balanceru . . . . . . . . . . 3.3 Restart Load Balanceru . . . . . . . . 3.4 Ukonˇcen´ı Load Balanceru . . . . . . . 4 J´ adro 4.1 Architektura j´adra . . 4.2 Servery . . . . . . . . . 4.2.1 Tabulka port˚ u. 4.2.2 Tabulka server˚ u 4.2.3 Tabulka skupin 4.3 TCP a UDP Vl´akna . 4.4 Obsluha spojen´ı . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . . 3
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . .
6 6 6 7 7
. . . . . . . . .
10 10 11 12 12 13 15 16 18 18
. . . .
19 20 22 22 23
. . . . . . .
24 24 24 25 25 25 26 27
4.5 4.6 4.7 4.8
4.4.1 UDP spojen´ı . . . . 4.4.2 TCP spojen´ı . . . . . V´ ybˇer serveru . . . . . . . . Nav´az´an´ı spojen´ı . . . . . . Komunikace se statistikami . Ping vl´akno . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
5 Konfigurace ´ 5.1 Uvod . . . . . . . . . . . . . . . . . . 5.2 Konfiguraˇcn´ı soubor . . . . . . . . . 5.2.1 Z´akladn´ı struktura . . . . . . 5.2.2 Princip modul˚ u, sekc´ı a alias˚ u 5.2.3 Sekce MAIN . . . . . . . . . . 5.2.4 Sekce ALIASES . . . . . . . . 5.2.5 Uˇzivatelsk´e sekce . . . . . . . 5.2.6 Jednoduch´e datov´e typy . . . 5.2.7 Tabulky . . . . . . . . . . . . 5.2.8 Typ pro servery . . . . . . . . 5.2.9 V´ yˇctov´e typy . . . . . . . . . 5.2.10 Kontrola spr´avnosti . . . . . . 5.2.11 Uk´azkov´ y konfiguraˇcn´ı soubor
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
27 27 28 29 30 31
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
32 32 32 32 33 34 34 35 35 37 38 39 40 40
6 Webov´ e rozhran´ı 6.1 Monitoring . . . . . . . . . . . . . . . . 6.2 Zobrazov´an´ı statistik . . . . . . . . . . 6.2.1 Vytv´aˇren´ı dotazu . . . . . . . . 6.2.2 Zobrazen´ı v´ ysledku dotazu . . . 6.3 Konfigurace . . . . . . . . . . . . . . . 6.3.1 Administrace . . . . . . . . . . 6.3.2 N´ahled konfiguraˇcn´ıho souboru 6.3.3 Main . . . . . . . . . . . . . . . 6.3.4 Aliases . . . . . . . . . . . . . . 6.3.5 Sekce . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
43 43 44 44 46 47 48 48 48 49 50
. . . . . .
55 55 56 59 60 61 63
7 Podmoduly 7.1 Knihovna prvn´ı vrstvy . . . 7.2 Knihovna druh´e vrstvy . . . 7.3 Knihovny tˇret´ı vrstvy . . . . 7.3.1 Statick´e algoritmy . 7.3.2 Dynamick´e algoritmy 7.4 Knihovna na datov´e vrstvˇe .
. . . . . . 4
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
A Testy A.1 Testy funkˇcnosti . . . . . . . . . A.2 Testy stability a z´atˇeˇzov´e testy . A.3 Testy ve WAN . . . . . . . . . . A.4 Praktick´ y test . . . . . . . . . .
5
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
64 64 66 69 70
Kapitola 1 ´ Uvod Load Balancer je ˇskoln´ı projekt, kter´ y m´a za c´ıl implementovat free softwarov´ y modul´arn´ı load balancer, kter´ y se bude sv´ ymi vlastnostmi bl´ıˇzit a v nˇekter´ ych aspektech i pˇrekon´avat komerˇcn´ı load balancery. D˚ uraz je kladen pˇrev´aˇznˇe na modularitu, stabilitu a v´ ykon.
1.1
ˇ sitelsk´ Reˇ y kolektiv - rozdˇ elen´ı prac´ı
• Luk´aˇs Hl˚ uˇze – prezentaˇcn´ı modul, webov´e rozhran´ı pro konfiguraci, dokumentace • V´aclav Nidrle – statistick´ y modul, balancovac´ı algoritmy, dokumentace • Pˇremysl Volf – j´adro Load Balanceru, init modul, balancovac´ı algoritmy, dokumentace ˇ y – konfigurace, dokumentace • Stanislav Zivn´
1.2
´ Uvod do problematiky
Bˇeˇznou technikou ˇsk´alov´an´ı syst´em˚ u pˇri jejich vˇetˇs´ım zat´ıˇzen´ı je v´ ystavba serverov´ ych farem. Distribuce poˇzadavk˚ u mezi nimi m˚ uˇze b´ yt prov´adˇena pomoc´ı DNS round-robin, kdy jsou poˇzadavky cyklicky rovnomˇernˇe rozdˇelov´any mezi jednotliv´e servery ve farmˇe. Rozloˇzen´ı poˇzadavk˚ u mezi servery ale pak nen´ı rovnomˇern´e vzhledem k jejich v´ ykonu a nen´ı moˇzn´e ho jemnˇe ladit, natoˇz pak specificky smˇerovat dotazy urˇcit´eho typu na specializovan´e servery. Pr´avˇe z v´ yˇse uveden´ ych d˚ uvod˚ u se nasazuj´ı tak zvan´e load balancery, kter´e na z´akladˇe zadan´ ych pravidel rozkl´adaj´ı z´atˇeˇz mezi servery, kter´e mohou b´ yt nestejnˇe vykonn´e a r˚ uznˇe optimalizovan´e (statick´e str´anky, cgi 6
skripty, streaming servery). Load balancer se rozhoduje na z´akladˇe administr´atorem urˇcen´e konfigurace a r˚ uzn´ ych parametr˚ u jako jsou dostupnost server˚ u, jejich aktu´aln´ı vyt´ıˇzen´ı, v´ ykon za posledn´ı dobu, typ poˇzadavku, zdrojov´a a c´ılov´a adresa ˇci port. Nasazen´ı load balanceru tak pˇrin´aˇs´ı zrychlen´ı vyˇr´ızen´ı poˇzadavk˚ u, sn´ıˇzen´ı n´arok˚ u a n´aklad˚ u na hardware server˚ u a ochranu pˇred v´ ypadky jednotliv´ ych server˚ u.
1.3
Definice pojm˚ u
Modul Load Balanceru jsou procesy Load Balanceru, kde kaˇzd´ y m˚ uˇze bˇeˇzet na r˚ uzn´em poˇc´ıtaˇci. Jedn´a se o init, j´adro a statistiky. J´adro a statistiky tvoˇr´ı dvojice procesu - ˇr´ıd´ıc´ı a v´ ykonn´ y. V´ ykonn´ y proces je proces, kter´ y pˇr´ımo prov´ad´ı funkce dan´eho modulu. ˇ ıd´ıc´ı proces je proces, kter´ R´ y komunikuje s procesem init a star´a se o bˇeh v´ ykonn´eho procesu, ale s´am nic neprov´ad´ı. V pˇr´ıpadˇe restartu Load Balanceru v´ ykonn´ y proces zabije a znovu spust´ı. Pˇri zapnut´e automatick´e kontrole zjiˇst’uje, jestli v´ ykonn´ y proces odpov´ıd´a na sign´aly a pokud neodpov´ıd´a, tak ho restartuje. Vrstva je ˇca´st j´adra kterou postupnˇe proch´az´ı spojen´ı. Prvn´ı aˇz tˇret´ı vrstvou proch´azej´ı nov´a spojen´ı a rozhoduje se v nich, na kter´ y server se spojen´ı pˇrepoj´ı. Dalˇs´ı vrstvou je datov´a vrstva, kterou proch´azej´ı vˇsechna data ve smˇeru od klienta i od serveru. Re´aln´e funkce, kter´e vykon´avaj´ı rozhodov´an´ı na jednotliv´ ych vrstv´ach se jmenuj´ı podmoduly. Podmodul je funkce, kter´a je uloˇzena v dll knihovnˇe. Podmoduly se volaj´ı pˇri pr˚ uchodu jednotliv´ ymi vrstvami. Druh´a a tˇret´ı vrstva m˚ uˇze postupnˇe volat v´ıce podmodul˚ u. Statick´ y algoritmus je balancovac´ı algoritmus, kter´ y se ˇr´ıd´ı pouze u ´daji naˇcten´ ych z konfiguraˇcn´ıho souboru a informacemi o konkretn´ım spojen´ı. Dynamick´ y algoritmus je balancovac´ı algoritmus, kter´ y pro svoje rozhodov´an´ı vyuˇz´ıv´a dotaz˚ u do statistick´eho modulu.
1.4
Architektura Load Balanceru
Load Balancer je rozdˇelen do nˇekolika modul˚ u. T´ım je umoˇznˇeno dos´ahnout r˚ uzn´e u ´rovnˇe funkˇcnosti a v´ ykonu. Aby se co nejv´ıce omezila moˇznost, kdy 7
se Load Balancer stane ”´ uzk´ ym hrdlem”, jsou jednotliv´e moduly samostatn´e procesy, kter´e mohou bˇeˇzet na r˚ uzn´ ych poˇc´ıtaˇc´ıch a komunikuj´ı spolu pomoc´ı protokolu TCP/IP a UDP/IP. Proces Init slouˇz´ı ke spuˇstˇen´ı, ˇr´ızen´ı a ukonˇcen´ı Load Balanceru. J´adro je v´ ykonnou ˇc´ast´ı, kter´a prov´ad´ı samotn´e pˇrepojov´an´ı spojen´ı. Statistiky ukl´adaj´ı informace o proveden´ ych spojen´ıch, odpov´ıdaj´ı na dotazy j´adra o stavu server˚ u a poskytuj´ı informace pro webov´e statistiky a informace. Webov´e rozhran´ı umoˇzn ˇuje vzd´alenou spr´avu Load Balanceru a prezentaci statistik.
Obr´azek 1.1: Architektura Load Balanceru Na obr´azku je zn´azornˇena architektura Load Balanceru a tok dat mezi jednotliv´ ymi ˇca´stmi. Load balancer tvoˇr´ı ˇca´sti oznaˇcen´e svˇetle modrou barvou. Tmavˇe modrou barvou je naznaˇcena extern´ı datab´aze, kter´a je k Load ˇ Balanceru pˇripojena pˇres ODBC rozhran´ı. Zlutou barvu maj´ı klienti, kteˇr´ı se pˇripojuj´ı z Internetu na Load balancer a ten jejich poˇzadavky pˇresmˇerov´av´a na servery (zelen´e), kter´e jsou na lok´aln´ı s´ıti. ˇ Barevn´e spojnice na pˇredstavuj´ı tok dat. Cervenˇ e jsou naznaˇcena uˇzivatelsk´a data, kter´a se pˇrenesou k j´adru a to je po v´ ybˇeru serveru pˇrenese na vybran´ y server. Tato z´atˇeˇz je vysok´a a spoje by proto mˇely b´ yt dostateˇcnˇe dimenzov´any. ˇ Sedou barvou je naznaˇcen´a servisn´ı komunikace mezi modulem init a ostatn´ımi ˇca´stmi Load Balanceru. Pouˇz´ıv´a se pro pˇrenos konfiguraˇcn´ıch dat a restartov´an´ı Load Balanceru. 8
Zelenou barvou jsou naznaˇcena data odes´ılan´a pomoc´ı protokolu UDP z j´adra do statistik o prov´adˇen´ ych spojen´ıch. Objem tˇechto dat se d´a regulovat pomoc´ı konfiguraˇcn´ıho souboru. Oranˇzov´a barva pˇredstavuje dotazy j´adra a webov´eho rohran´ı do statistik. J´adro dotazy pouˇz´ıv´a pro balancov´an´ı v dynamick´ ych algoritmech. Webov´e rozhran´ı pro zobrazov´an´ı statistik o spojen´ıch. Modr´a spojnice pˇredstavuje pr´aci statistick´eho modulu s extern´ı datab´az´ı. Cel´ y Load Balancer by z d˚ uvodu v´ ykonosti mˇel bˇeˇzet na lok´aln´ı s´ıti. Jednotliv´e ˇca´sti ale lze spustit i na WAN. Servisn´ı komunikace (ˇsed´a barva) prob´ıh´a nezabezpeˇcenˇe a proto se toto nastaven´ı nedoporuˇcuje.
9
Kapitola 2 Instalace a spuˇ stˇ en´ı 2.1
Instalace
Instalace Load Balanceru ze zdrojov´eho bal´ıˇcku, kter´ y se nach´az´ı v adres´aˇri package na CD. balancer-0.1.tar.bz2 se provede n´asleduj´ıc´ım zp˚ usobem. Pomoc´ı tar jxvf balancer-0.1.tar.bz2 bal´ıˇcek nejdˇr´ıve rozbal´ıme. Pak se spust´ı konfiguraˇcn´ı skript a n´aslednˇe kompilace pomoc´ı pˇr´ıkaz˚ u: ./configure make make install Posledn´ı zm´ınˇen´ y pˇr´ıkaz nainstaluje Load Balancer do syst´emu. T´ım je na syst´emu nainstalov´an Load Balancer. Dalˇs´ım krokem je instalace php extension balancer, kter´a je potˇreba k chodu webov´eho rozhran´ı. Instalace je velice podobn´a. V rozbalen´am bal´ıˇcku se pˇrejde do adres´aˇre present/php-ext/balancer a php extension balancer se nainstaluje podobn´ ym zp˚ usobem jako Load Balancer. ./configure make make install
10
Dalˇs´ım krokem je pˇrekop´ırov´an´ı adres´aˇrov´e struktury present/www do koˇrenov´eho adres´aˇre webov´eho serveru (d´ale jen webroot). Dalˇs´ım krokem je zkop´ırov´an´ı skript˚ u copy a restart z adres´aˇre present/bin do adre´aˇre, ze kter´eho budou spustiteln´e z webov´eho rozhran´ı a z´aroveˇ n budou m´ıt pr´ava k manipulaci s konfiguraˇcn´ımi soubory /etc/lb.cfg a webroot/config.cfg-default a k pos´ıl´an´ı sign´alu modulu init. Tato situace se d´a vyˇreˇsit n´astrojem sudo.
2.1.1
Instalace ODBC
Pokud m´a b´ yt pouˇzita datab´aze, mus´ı se nainstalovat ODBC rozhran´ı pro komunikaci mezi Load Balancerem a danou datab´az´ı. Nejprve mus´ı b´ yt nainstalov´an nˇejak´ y ODBC driver manager pro syst´em na b´azi UNIXu (napˇr. unixODBC - http://www.unixodbc.org), kter´ y se star´a o spr´avu ODBC driver˚ u r˚ uzn´ ych datab´az´ı a jejich propojen´ı s Load Balancerem. Pot´e je jeˇstˇe nutn´e nainstalovat ODBC driver pro danou datab´azi, kter´a m´a b´ yt pouˇzita (napˇr. MySQL Connector/ODBC driver pro datab´azi MySQL - http://dev.mysql.com/downloads/connector/odbc/ 3.51.html). Ten prov´ad´ı pˇreklad konkr´etn´ıch poˇzadavk˚ u do SQL pro pˇr´ısluˇsn´ y datab´azov´ y server. Instalace prob´ıh´a klasick´ ym zp˚ usobem ze zdrojov´ ych bal´ıˇck˚ u sekvenc´ı pˇr´ıkaz˚ u tar jxvf source.tar.bz2 ./configure make make install Pro u ´spˇeˇsnou instalaci je nutn´e m´ıt alespoˇ n n´asleduj´ıc´ı verze knihoven a n´astroj˚ u: glibc 2.3.4 flex 2.5.4 bison 1.875d myodbc-3.51 3.51 unixODBC 2.2.6 php 4.3.10 gcc 3.3.5 11
gnu make 3.80 autoconf 2.59
2.2
Nastaven´ı Load Balanceru
Pro spr´avn´ y bˇeh webov´eho rozhran´ı je nutn´e nastavit konfiguraˇcn´ı soubor webroot/config.php. Je tˇreba nastavit tyto promˇenn´e: statsIP na IP adresu statistick´eho modulu. statsPORT na port, kde poslouch´a statistick´ y modul na dotazy od webov´eho rozhran´ı. Standardnˇe na portu 44793. init pid file Jm´eno souboru, kam modul init ukl´ad´a ˇc´ıslo sv´eho procesu. Webov´e rozhran´ı ho vyuˇz´ıv´a pro restartov´an´ı a ukonˇcen´ı Load Balanceru. Pokud je hodnota pr´azdn´a, tato funkce nebude zapnuta. Standardn´ı je hodnota /var/run/lbinit.pid running config na cestu ke konfiguraˇcn´ımu souboru, kter´ y naˇc´ıt´a modul init. Standardn´ı je hodnota /etc/lb.cfg. um copy a restart. bin dir na cestu ke skript˚
2.3
Nastaven´ı konfiguraˇ cn´ıho souboru
V tomto okamˇziku je pˇr´ıstupn´a konfigurace pˇre webov´e rozhran´ı a je nastaven implicitn´ı konfiguraˇcn´ı soubor. Po instalaci se automaticky pouˇzije implicitn´ı konfiguraˇcn´ı soubor. Pro nastaven´ı jednoduch´e farmy server˚ u staˇc´ı zmˇenit pouze nˇekolk z´akladn´ıch nastaven´ı. Jednotliv´e sekce jsou pˇr´ıstupn´e z poloˇzky Section v ˇca´sti Configuration.
12
Obr´azek 2.1: Str´anka pro nastaven´ı jednotliv´ ych sekc´ı
2.3.1
Nastaven´ı rozhran´ı Load Balanceru
Rozhran´ı Load Balanceru se nastavuje v sekci IP ADDR. Pomoc´ı t´eto sekce se nastavuj´ı IP adresy jednotliv´ ych souˇca´st´ı a rozhran´ı do vnˇejˇs´ı a vnitˇrn´ı s´ıtˇe. IP adresa se m˚ uˇze zadat ˇc´ıselnou formou ( napˇr. 127.0.0.1 ) nebo jm´enem ( napˇr. localhost, www.mff.cuni.cz ).
13
Obr´azek 2.2: Nastaven´ı rozhran´ı Load Balanceru Promˇenn´a CORE IP urˇcuje IP adresu j´adra. Na tuto adresu se pˇripojuje modul init. Promˇenn´a STATS IP urˇcuje IP adresu statistik. Na tuto adresu se pˇripojuje modul init. Promˇenn´a BALANCER INNER IP urˇcuje rozhran´ı Load Balanceru do vnitˇrn´ı s´ıtˇe. Tato adresa se vyuˇzije pˇri pˇrekladu nˇekter´ ych protokol˚ u, u kter´ ych se pro servery pouˇzije jako adresa klienta. Promˇenn´a BALANCER OUTER IP urˇcuje rozhran´ı Load Balanceru do vnˇejˇs´ı s´ıtˇe. Tato adresa se vyuˇzije pˇri pˇrekladu nˇekter´ ych protokol˚ u, u kter´ ych se pro klienty pouˇzije jako adresa serveru. U typick´eho zapojen´ı Load Balanceru je modul j´adra na poˇc´ıtaˇci se dvˇema rozhran´ımi. Jako IP adresa j´adra a vnitˇrn´ı IP adresa se pouˇzije adresa jed14
noho rozhran´ı. Jako vnˇejˇs´ı IP adresa se pouˇzije adresa druh´eho rozhran´ı. Jako adresa statistik se pouˇzije IP adresa z vnitˇrn´ı s´ıtˇe.
2.3.2
Nastaven´ı poslouchac´ıch port˚ u, server˚ u a skupin
Seznamy port˚ u a server˚ u se nastavuj´ı v sekci SERVERS SECTION. Tato sekce obsahuje tˇri tabulky, kter´e nastavuj´ı poslouchac´ı porty, servery a skupiny server˚ u.
Obr´azek 2.3: Nastaven´ı poslouchac´ıch port˚ u V tabulce LISTEN PORTS nastavuj´ı porty a protokoly, na kter´ ych Load Balancer poslouch´a ve vnˇejˇs´ı s´ıti. Klienti se pˇripojuj´ı na tyto porty.
Obr´azek 2.4: Nastaven´ı server˚ u V tabulce SERVERS je seznam server˚ u, kter´e tvoˇr´ı farmu. Pro kaˇzdou sluˇzbu mus´ı b´ yt vytvoˇren nov´ y z´aznam. Kaˇzd´ y z´aznam tvoˇr´ı uˇz´ıvatelsk´ y n´azev server, jeho identifikace ( protokol, IP adresa a port) a statick´a v´aha serveru. Ta urˇcuje relativn´ı pomˇer v´ ykonnosti server˚ u. Pokud jsou vˇsechny servery stejnˇe v´ ykonn´e, pak by mˇely m´ıt nastavenou stejnou statickou v´ahu.
15
Obr´azek 2.5: Nastaven´ı skupin server˚ u V tabulce GROUPS je seznam server˚ u, kter´e se pouˇz´ıvaj´ı v pravidlech na prvn´ı aˇz tˇret´ı vrstvˇe. Pokud jsou vˇsechny servery ekvivalentn´ı, staˇc´ı nastavit jednu skupinu obsahuj´ıc´ı vˇsechny servery.
2.3.3
Nastaven´ı pravidel prvn´ı vrstvy
Pravidla, kter´a vyuˇz´ıv´a funkce common na prvn´ı vrstvˇe, se nastavuj´ı v sekci LAYER1 SUBMODULE. Tato sekce obsahuje tabulku L1 RULES, kter´a definuje jednotliv´a pravidla.
16
Obr´azek 2.6: Nastaven´ı pravidel prvn´ı vrstvy Pro jednoduch´a nastaven´ı staˇc´ı nastavit tyto sloupce: Name N´azev je souˇc´ast´ı identifikace datov´eho typu spojen´ı ve statistik´ach. T´ım je umoˇznˇeno poˇc´ıtat statistiky pro jednotliv´e typy spojen´ı. IP protocol Urˇcuje, na kter´ y protokol se pravidlo vztahuje. Listen port Urˇcuje, na jak´em portu bylo pˇrijato spojen´ı od klienta ( napˇr. 80 pro HTTP, 22 pro SSH, atd. ) Library on third layer Urˇcuje n´azev knihovny, ze kter´e se pouˇzije funkce na tˇret´ı vrstvˇe. Pro jednoduch´e farmy vyhovuje knihovna static layer3.so. Function on third layer Urˇcuje n´azev funkce z v´ yˇse zm´ınˇen´e knihovny. Pro jednoduch´e farmy vyhovuje funkce static select first. servers Urˇcuje skupinu server˚ u, mezi kter´e se rozdˇeluje spojen´ı. Pro jednoduch´e farmy se nastav´ı skupina vˇsech server˚ u. 17
2.3.4
Dalˇ s´ı z´ akladn´ı nastaven´ı
Pouˇzit´ı statistick´eho modulu se nastavuje INIT STATS START v sekci MODULE INIT.
2.4
pomoc´ı
promˇenn´e
Spuˇ stˇ en´ı
Pokud je zapnut´a funkce statistick´eho modulu s datab´az´ı, je nutn´e, aby bˇeˇzel datab´azov´ y server. Pokud bˇeˇz´ı, je moˇzn´e spustit modul j´adra a modul statistik. Po spuˇstˇen´ı tˇechto modul˚ u se spust´ı modul init, kter´ y spust´ı cel´ y Load Balancer. Po inicializaci vˇsech ˇc´ast´ı je Load Balancer pˇripraven k pouˇzit´ı a tak´e je moˇzn´e zaˇc´ıt vyuˇz´ıvat webov´e rozhran´ı pro zmˇeny konfigurace, ˇr´ızen´ı Load Balanceru a zobrazov´an´ı statistik o proveden´ ych spojen´ıch.
18
Kapitola 3 Proces init a ovl´ ad´ an´ı Load Balanceru Veˇsker´e ˇr´ızen´ı Load Balanceru uˇzivatelem je po spuˇstˇen´ı prov´adˇeno procesem Init. Nepˇr´ımo m˚ uˇze b´ yt obsluhov´an pˇres webov´e prostˇred´ı. Nastaven´ı procesu init a komunikace jednotliv´ ych modul˚ u se prov´ad´ı v sekc´ıch
, kter´a je vyuˇz´ıv´ana vˇsemi moduly a <MODULE INIT>. Seznam promˇenn´ ych v sekci : CORE IP
- IP adresa j´adra.
STATS IP
- IP adresa statistik.
BALANCER INNER IP - Vnitˇrn´ı IP adresa Load Balanceru, kter´a je vyuˇzita pˇri pˇrepojov´an´ı nˇekter´ ych protokol˚ u. Tato adresa je pouˇzita, pokud server vyˇzaduje adresu klienta. BALANCER OUTER IP - Vnˇejˇs´ı IP adresa Load Balanceru, kter´a je vyuˇzita pˇri pˇrepojov´an´ı nˇekter´ ych protokol˚ u. Tato adresa je pouˇzita, pokud klient vyˇzaduje adresu serveru. Seznam promˇenn´ ych v sekci <MODULE INIT> (vˇsechny hodnoty u parametr˚ u TIMEOUT jsou v sekund´ach) : yt spuˇstˇeny INIT STATS START - Hodnota ”YES” urˇcuje, ˇze maj´ı b´ statistiky, hodnota ”NO” naopak. INIT CORE PORT 44783.
- Port, na kter´ y se pˇripoj´ı init k j´adru, implicitnˇe
INIT STATS PORT implicitnˇe 44784.
- Port, na kter´ y se pˇripoj´ı init ke statistik´am,
19
INIT CORE STARTUP TIMEOUT a inicializaci j´adra.
- Timeout urˇcen´ y pro spuˇstˇen´ı
INIT STATS STARTUP TIMEOUT spuˇstˇen´ı a inicializaci statistik.
-
Timeout
urˇcen´ y
pro
INIT INIT CHECK TIMEOUT - Timeout initu urˇcen´ y pro rozes´ıl´an´ı a pˇrij´ım´an´ı kontroln´ıch zpr´av. Pokud je nastaven na 0, nejsou kontroly prov´adˇeny. INIT CORE CHECK TIMEOUT - Timeout j´adra urˇcen´ y pro rozes´ıl´an´ı a pˇrij´ım´an´ı kontroln´ıch zpr´av. Pokud je nastaven na 0, nejsou kontroly prov´adˇeny. INIT STATS CHECK TIMEOUT - Timeout statistik urˇcen´ y pro rozes´ıl´an´ı a pˇrij´ım´an´ı kontroln´ıch zpr´av. Pokud je nastaven na 0, nejsou kontroly prov´adˇeny. INIT CORE FREEZE CONTROL - Pokud je hodnota nastavena, prov´ad´ı ˇr´ıd´ıc´ı proces j´adra kontrolu bˇehu v´ ykonn´eho procesu j´adra. INIT STATS FREEZE CONTROL - Pokud je hodnota nastavena, prov´ad´ı ˇr´ıd´ıc´ı proces statistik kontrolu bˇehu v´ ykonn´eho procesu statistik. ´rovnˇe logov´an´ı do syt´emov´eho INIT SYSLOG LEVEL - Nastaven´ı u logu ve vˇsech modulech. Pokud nen´ı nastaveno, loguje se na u ´rovni LOG ERR.
3.1
Spuˇ stˇ en´ı Load Balanceru
Nejdˇr´ıve se spouˇst´ı j´adro a statistiky (pokud je nastaveno jejich pouˇzit´ı). Oba procesy se mohou spouˇstˇet s tˇemito pˇrep´ınaˇci: -d
Nespouˇstˇet jako sluˇzbu daemon. Vˇsechny procesy se implicitnˇe spouˇst´ı na pozad´ı jako sluˇzba daemon.
-p PORT J´adro (statistiky) bude poslouchat na pˇripojen´ı initu na portu PORT. Implicitnˇe poslouch´a na portu 44783 (44784). -l IP ADDR J´adro (statistiky) bude poslouchat na pˇripojen´ı initu z adresy IP ADDR. Implicitnˇe poslouch´a na adrese INADDR ANY.
20
Po spuˇstˇen´ı a zpracov´an´ı pˇrep´ınaˇc˚ u ˇcekaj´ı na pˇripojen´ı initu. Ten je moˇzn´e spustit s tˇemito pˇrep´ınaˇci: -d
Nespouˇstˇet jako sluˇzbu daemon. Init se implicitnˇe spouˇst´ı na pozad´ı jako sluˇzba daemon.
-f FILE Jako konfiguraˇcn´ı soubor pouˇz´ıt FILE. Implicitnˇe se pouˇzije soubor /etc/lb.cfg -o
Prov´est pouze kontrolu konfiguraˇcn´ıho souboru a nespouˇstˇet Load Balancer.
-a
Pˇri nastaven´ı tohoto pˇr´ıznaku se hledaj´ı vˇsechny chyby v konfiguraˇcn´ım souboru. Implicitnˇe se kontrola souboru zastav´ı po nalezen´ı prvn´ı chyby
-e
Vypisovat nalezen´e chyby na chybov´ y v´ ystup stderr. Implicitnˇe se chyby zapisuj´ı pouze do syslogu.
Po spuˇstˇen´ı init zpracuje pˇrep´ınaˇce, naˇcte a zkontroluje konfiguraˇcn´ı soubor a nav´aˇze komunikaci s j´adrem a statistikami. Odeˇsle jim konfiguraˇcn´ı soubor a ˇcek´a na dokonˇcen´ı jejich inicializace. Bˇehem startovac´ı sekvence se j´adro a statistiky rozdˇel´ı na dva procesy. Rodiˇcovsk´ y proces je ˇr´ıd´ıc´ı proces a zajiˇst’uje komunikaci s initem a pˇr´ıpadnou kontrolu synovsk´eho ˇr´ıd´ıc´ıho procesu. Pokud konfiguraˇcn´ı soubor nen´ı v poˇr´adku, init nahlas´ı m´ısto nalezen´e chyby a skonˇc´ı. V´ yˇse popsan´ ymi pˇrep´ınaˇci lze dos´ahnout v´ ypisu chyby nejen do logu, ale i na stderr a tak´e v´ ypis vˇsech nalezen´ ych chyb. Pokud se jedn´a o syntaktick´e chyby v konfiguraˇcn´ım souboru (chybˇej´ıc´ı stˇredn´ık, chybˇej´ıc´ı uvozovky, nespr´avn´ y poˇcet parametr˚ u v sekci ALIASES apod.), vˇzdy se vyp´ıˇse pouze prvn´ı nalezen´a chyba, protoˇze parser nem˚ uˇze pokraˇcovat v pr´aci. V takov´em pˇr´ıpadˇe se vyp´ıˇse ˇc´ıslo ˇr´adky, kde byla chyba nalezena. Uˇzivatel pak m˚ uˇze chybu nal´ezt na dan´e ˇra´dce ˇci na nˇekter´e z pˇredchoz´ıch ˇra´dek. Situace je vysvˇetlena pˇr´ıkladem: 30: varint "MAX" "100" "" "" 31: 32: # zalohovani 33: 34: varbool "zalohovat" "NO" "" "";
Na ˇra´dce ˇc´ıslo 30 chyb´ı stˇredn´ık. Parser pˇreskakuje ˇr´adky 31 a 33 (protoˇze jsou pr´azdn´e) a ˇra´dku 32 (protoˇze se jedn´a pouze o koment´aˇr) a na ˇra´dce 34 nach´az´ı kl´ıˇcov´e slovo (varbool) nam´ısto stˇredn´ıku. Je nahl´aˇsena chyba na ˇr´adce 34. Uˇzivatel zkontroluje ˇr´adku 34, kter´a je v poˇra´dku. Kontroluje ˇra´dky smˇerem k zaˇca´tku konfiguraˇcn´ıho souboru, ignoruje pr´azdn´e a zakomentovan´e ˇr´adky, a nach´az´ı chybu na ˇra´dce 30. 21
Chybˇej´ıc´ı stˇredn´ık v sekci MAIN ˇci ALIASES se nahl´as´ı jako chyba o ˇspatn´em ˇci neexistuj´ıc´ım pˇriˇrazen´ı. <MAIN> core coremain coreext2 stat statisticssection;
V tomto pˇr´ıpadˇe chyb´ı na prvn´ı ˇra´dce sekce MAIN ukonˇcovac´ı stˇredn´ık a dalˇs´ı slovo, kter´e parser naˇcte, je stat a parser ho povaˇzuje za dalˇs´ı uˇzivatelskou sekci, kter´a je pˇriˇrazena modulu core. Pokud takov´a sekce neexistuje, je nahl´aˇsena chyba. Stejn´e chov´an´ı m´a i chybˇej´ıc´ı stˇred´ık v sekci ALIASES. Druh´a ˇca´st kontroly konfiguraˇcn´ıho souboru hl´ıd´a napˇr. spr´avn´ y poˇcet parametr˚ u v uˇzivatelsk´ ych sekc´ıch, existenci sekc´ı, kter´e se vyskytuj´ı v definic´ıch alias˚ u apod. Pro tuto ˇc´ast testu se d´a parametry modulu init urˇcit, zda se vyp´ıˇse jen prvn´ı nalezen´a, ˇci vˇsechny chyby.
3.2
Bˇ eh Load Balanceru
Pokud jsou nastaveny pˇr´ısluˇsn´e parametry, kontroluje init bˇeh j´adra a statistik. Pokud s nimi ztrat´ı kontakt, ˇcek´a na jejich opˇetovn´e spuˇstˇen´ı nebo obnoven´ı spojen´ı a podle stavu Load Balanceru nastav´ı vˇsechny ˇc´asti do norm´aln´ıho stavu. Pokud je nastavena kontrola v´ ykonn´ ych proces˚ u, kontroluj´ı je ˇr´ıd´ıc´ı procesy. Pokud v´ ykonn´ y proces neodpov´ı ˇr´ıd´ıc´ımu, je ˇ ıd´ıc´ı proces ukonˇc´ı jeho bˇeh, znovu spust´ı a povaˇzov´an za nefunkˇcn´ı. R´ provede jeho inicializaci. Za bˇehu by se nemˇely pos´ılat jak´ekoliv sign´aly jin´emu procesu neˇz procesu init.
3.3
Restart Load Balanceru
V pˇr´ıpadˇe zmˇeny konfiguraˇcn´ıho souboru je nutn´e cel´ y Load Balancer restartovat. To se provede zasl´an´ım sign´alu SIGHUP procesu init nebo pomoc´ı pˇr´ısluˇsn´eho tlaˇc´ıtka ve webov´em rozhran´ı. Bˇehem restartu jsou ukonˇceny v´ ykonn´e procesy j´adra a statistik a znovu spuˇstˇeny s nov´ ym konfiguraˇcn´ım souborem. Bˇehem restartov´an´ı Load Balancer nepracuje a dojde k v´ ypadk˚ u souˇcasn´ ych spojen´ı a nepˇrij´ım´an´ı nov´ ych spojen´ı po dobu restartu.
22
3.4
Ukonˇ cen´ı Load Balanceru
Load Balancer se ukonˇcuje zasl´an´ım sign´alu SIGTERM procesu init nebo pomoc´ı pˇr´ısluˇsn´eho tlaˇc´ıtka ve webov´em rozhran´ı. Pˇri ukonˇcov´an´ı zaˇsle init ˇ ıd´ıc´ı j´adru a statistik´am zpr´avu o ukonˇcen´ı a s´am ukonˇc´ı svoji ˇcinnost. R´ procesy ukonˇc´ı v´ ykonn´e procesy a pak sami ukonˇc´ı svoji ˇcinnost.
23
Kapitola 4 J´ adro J´adro je v´ ykonnou ˇca´st´ı Load Balanceru, kter´e pˇrepojuje spojen´ı. Po pˇrijet´ı spojen´ı ho pˇred´a bud’ pˇr´ısluˇsn´emu UDP vl´aknu nebo vybere jedno z voln´ ych TCP vl´aken, kter´e nov´ y poˇzadavek obslouˇz´ı.
4.1
Architektura j´ adra
U j´adra je kladem d˚ uraz pˇredevˇs´ım na modularitu, ˇsk´alovatelnost, stabilitu a v´ ykon. Je postaveno, aby mohlo vykon´avat alespoˇ n z´akladn´ı ˇcinnosti bez spuˇstˇen´ı nˇekter´ ych dalˇs´ıch souˇca´st´ı Load Balanceru, pˇr´ıpadnˇe po jejich p´adu. Pˇri samotn´em pˇrepojov´an´ı dat od klient˚ u k server˚ um je kladen d˚ uraz pˇredevˇs´ım na modularitu a v´ ykon. Pro v´ ybˇer spr´avn´eho serveru se pouˇz´ıvaj´ı dll knihovny na tˇrech vrstv´ach, kter´e se mohou nahr´avat i pˇrid´avat za bˇehu Load Balanceru (nov´a knihovna vyˇzaduje u ´pravu konfiguraˇcn´ıho souboru a proto n´asledn´e restartov´an´ı Load Balanceru) V´ ykonnost j´adra lze nastavovat automatick´ ym ˇr´ızen´ım poˇctu obsluhuj´ıc´ıch TCP vl´aken na z´akladˇe konfiguraˇcn´ıho souboru. Je tak moˇznost kompromisu mezi v´ ykonem a mnoˇzstv´ım syst´emov´ ych prostˇredk˚ u na z´akladˇe aktu´aln´ıho vyt´ıˇzen´ı Load Balanceru.
4.2
Servery
Tabulka server˚ u je uvedena v sekci <SERVERS SECTION> v konfiguraˇcn´ım souboru. Tato sekce obsahuje tabulky LISTEN PORTS, SERVERS a GROUPS. N´azvy server˚ u a skupin se zobraz´ı jako rozbalovac´ı nab´ıdka vˇsude, kde je pouˇzit´ y typ varservers.
24
4.2.1
Tabulka port˚ u
Tabulka LISTEN PORTS obsahuje seznam port˚ u, kter´e j´adro otevˇre pro poslouch´an´ı. Na tyto porty se pˇripojuj´ı klienti z vnˇejˇs´ı s´ıtˇe. V´ yjimku tvoˇr´ı porty otevˇren´e jako pomocn´a datov´a spojen´ı v podmodulu na datov´e vrstvˇe. Tabulku tvoˇr´ı dva sloupce: ˇ ezec nab´ protokol Retˇ yvaj´ıc´ı hodnoty TCP nebo UDP. Urˇcuje protokol pˇr´ıchoz´ıho spojen´ı. port
4.2.2
ˇ ıslo urˇcuj´ıc´ı otev´ıran´ C´ y port.
Tabulka server˚ u
Tabulka SERVERS obsahuje seznam server˚ u, mezi kter´e se rozdˇeluj´ı pˇr´ıchoz´ı spojen´ı. Kaˇzd´a sluˇzba na serveru mus´ı m´ıt samostatn´ y z´aznam v tabulce server˚ u. Tabulku tvoˇr´ı pˇet sloupc˚ u: n´ azev N´azev serveru, kter´ y se bude objevovat v nab´ıdce n´azv˚ u u promˇenn´ ych typu varservers. ˇ ezec nab´ yvaj´ıc´ı hodnoty protokol Protokol sluˇzby dan´eho serveru. Retˇ TCP nebo UDP. IP adresa port
ˇ ezec obsahuj´ıc´ı IP adresu serveru. Retˇ
ˇ Cislo urˇcuj´ıc´ı port serveru (sluˇzby).
ˇ ıslo urˇcuj´ıc´ı statickou v´ahu sluˇzby. Ve skupinˇe server˚ statick´ a v´ aha C´ u vybran´ ych pro dan´e spojen´ı bude pomˇer pˇridˇelen´ ych spojen´ı odpov´ıdat pomˇer˚ um statick´ ych vah (pokud je zvolen pˇr´ısluˇsn´ y algoritmus).
4.2.3
Tabulka skupin
Tabulka GROUPS obsahuje seznam skupin. Kaˇzd´a skupina obsahuje seznam server˚ u z tabulky SERVERS. Jednotliv´e servery se mohou objevit ve v´ıce skupin´ach. Tabulku tvoˇr´ı dva sloupce: y se bude objevovat v nab´ıdce n´azv˚ u u n´ azev N´azev skupiny, kter´ promˇenn´ ych typu varservers. seznam server˚ u Datov´ y typ varlist, kter´ y obsahuje seznam n´azv˚ u server˚ u z tabulky SERVERS.
25
4.3
TCP a UDP Vl´ akna
Pro zv´ yˇsen´ı v´ ykonu j´adro pracuje ve v´ıce vl´aknech souˇcasnˇe. Ke kaˇzd´emu otevˇren´emu portu protokolu UDP se vytvoˇr´ı jedno vl´akno, kter´e spojen´ı na tomto portu obsluhuje. Poˇcet TCP vl´aken se ˇr´ıd´ı nastaven´ım promˇenn´ ych v konfiguraˇcn´ım souboru. Jejich poˇcet se m˚ uˇze za bˇehu zvyˇsovat nebo sniˇzovat podle aktu´aln´ıho zat´ıˇzen´ı j´adra. Pˇri startu j´adra se vytvoˇr´ı CORE THREADS INIT TCP vl´aken. Pˇri dostateˇcn´em vyt´ıˇzen´ı j´adra se jejich poˇcet m˚ uˇze zvyˇsovat aˇz na CORE THREADS MAX. Pˇri nevyt´ıˇzen´em j´adru se m˚ uˇze poˇcet vl´aken sn´ıˇzit na CORE THREADS MIN. Pokud je minim´aln´ı poˇcet vl´aken menˇs´ı neˇz poˇc´ateˇcn´ı, poˇcet vl´aken by se po startu j´adra (neˇz provoz dos´ahne bˇeˇzn´e u ´rovnˇe) zaˇcal sniˇzovat aˇz na minim´aln´ı hodnotu. Proto je prvn´ı sn´ıˇzen´ı poˇctu vl´aken moˇzn´e aˇz po prvn´ım zv´ yˇsen´ı poˇctu vl´aken. Pak jiˇz poˇcet vl´aken m˚ uˇze nab´ yvat neomezenˇe od minima po maximum. J´adro po pˇridˇelen´ı nov´eho spojen´ı kontroluje pomˇer poˇctu existuj´ıc´ıch vl´aken ku poˇctu aktu´alnˇe pracuj´ıc´ıch vl´aken. Pokud tento pomˇer pˇres´ahne hodnotu CORE THREADS FULL, pokus´ı se j´adro zvˇetˇsit poˇcet vl´aken. Vyn´asob´ı aktu´aln´ı poˇcet existuj´ıc´ıch vl´aken koeficientem CORE THREADS RATE UP, kter´ y by mˇel b´ yt vˇetˇs´ı neˇz jedna. Pokud nov´ y poˇcet pˇres´ahne hodnotu CORE THREADS MAX, je na tuto hodnotu sn´ıˇzen. Pokud pomˇer klesne pod hodnotu CORE THREADS EMPTY, pokus´ı se j´adro zmenˇsit poˇcet vl´aken. Vydˇel´ı aktu´aln´ı poˇcet existuj´ıc´ıch vl´aken koeficientem CORE THREADS RATE DOWN, kter´ y by mˇel b´ yt vˇetˇs´ı neˇz jedna. Z´aroveˇ n by mˇela platit nerovnost 1/CORE THREADS RATE DOWN ≥ CORE THREADS EMPTY. Pokud je nov´ y poˇcet menˇs´ı neˇz hodnota CORE THREADS MIN, je na tuto hodnotu zv´ yˇsen. Promˇenn´e CORE THREADS FULL a CORE THREADS EMPTY by mˇely b´ yt v intervalu h0, 1i. Seznam vˇsech promˇenn´ ych ovlivˇ nuj´ıc´ı poˇcet TCP vl´aken: CORE THREADS INIT j´adra.
V´ ychoz´ı poˇcet TCP vl´aken pˇri spuˇstˇen´ı
CORE THREADS MIN
Minim´aln´ı poˇcet TCP vl´aken.
CORE THREADS MAX
Maxim´aln´ı poˇcet TCP vl´aken.
CORE THREADS FULL Pomˇer existuj´ıc´ıch a pracuj´ıc´ıch vl´aken, pˇri kter´em se j´adro pokus´ı zvˇetˇsit poˇcet TCP vl´aken. CORE THREADS RATE UP Hodnota, kterou se vyn´asob´ı poˇcet vl´aken pˇri zvyˇsov´an´ı jejich poˇctu. 26
CORE THREADS EMPTY Pomˇer existuj´ıc´ıch a pracuj´ıc´ıch vl´aken, pˇri kter´em se j´adro pokus´ı zmenˇsit poˇcet TCP vl´aken. CORE THREADS RATE DOWN vl´aken pˇri sniˇzov´an´ı jejich poˇctu.
4.4 4.4.1
Hodnota, kterou se vydˇel´ı poˇcet
Obsluha spojen´ı UDP spojen´ı
Protoˇze UDP komunikace nen´ı spojovan´a, ale prob´ıh´a po jednotliv´ ych packetech, d´a se u n´ı rozliˇsit zaˇca´tek, ale ned´a se rozpoznat konec komunikace (uzavˇren´ı spojen´ı u TCP spojen´ı). Proto je po vytvoˇren´ı socketu pro komunikaci urˇcit´eho klienta s urˇcit´ ym serverem nutn´e zachovat socket otevˇren´ y pro pˇr´ıpadnou dalˇs´ı komunikaci. T´ım vznik´a probl´em postupn´eho r˚ ustu otevˇren´ ych socket˚ u. Nelze totiˇz rozliˇsit, jestli bude po v´ ymˇenˇe jednoho packetu spojen´ı d´ale nevyuˇz´ıv´ano nebo po jednom packetu od klienat bude server jednou za den pos´ılat nˇejak´a data. Tato situace je ˇreˇsena pomoc´ı pole o d´elce CORE UDP CONNECTIONS, kter´e obsahuje z´aznam o otevˇren´ ych spojen´ıch. Nejdˇr´ıve se postupnˇe zaplˇ nuje toto pole a po jeho naplnˇen´ı se vezme nejstarˇs´ı spojen´ı (s nejstarˇs´ım datem posledn´ıho packetu), uzavˇre se a otevˇre se pro novˇe pˇr´ıchoz´ı spojen´ı. Po pˇrijet´ı spojen´ı se pomoc´ı projit´ı tˇrech vrstev algoritm˚ u vybere pˇr´ısluˇsn´ y server. K vybran´emu serveru se otevˇre socket a pˇrepoˇslou se pˇrijat´a data.
4.4.2
TCP spojen´ı
Na nov´e poˇzadavky ˇcek´a j´adro v hlavn´ım vl´aknu. Na vˇsech otevˇren´ ych portech je zavol´ana funkce listen s parametrem CORE LISTEN CLIENTS, kter´ y urˇcuje d´elku fronty kompletnˇe nav´azan´ ych spojen´ı, kter´e ˇcekaj´ı na pˇrijet´ı. Po v´ yskytu nov´eho spojen´ı je probuzeno jedno TCP vl´akno k obslouˇzen´ı nov´eho spojen´ı. Po probuzen´ı TCP vl´akna hlavn´ım vl´aknem se provede minimum operac´ı, aby hlavn´ı vl´akno mohlo co nejrychleji pokraˇcovat v ˇcinnosti. Po pˇrijet´ı spojen´ı se pomoc´ı projit´ı tˇrech vrstev algoritm˚ u vybere pˇr´ısluˇsn´ y c´ılov´ y server. Pokud nen´ı vybr´an nebo nen´ı dostupn´ y ˇza´dn´ y server, je spojen´ı uzavˇreno a vl´akno se pˇriprav´ı do stavu na pˇrijet´ı dalˇs´ıho poˇzadavku. V tomto okamˇziku je jiˇz nav´az´ano spojen´ı s vybran´ ym serverem. Pokud je vyˇzadov´ano pouˇzit´ı datov´eho podmodulu, zavol´a se s parametrem o zah´ajen´ı spojen´ı. Pak se na server odeˇslou data, kter´a si naˇcetly podmoduly na prvn´ı 27
aˇz tˇret´ı vrstvˇe. Pokud je vyˇzadov´ano pouˇzit´ı datov´eho podmodulu, zavol´a se pˇred odesl´an´ım tˇechto dat, aby je mohl pˇr´ıpadnˇe modifikovat.
4.5
V´ ybˇ er serveru
V´ ybˇer serveru prob´ıh´a stejn´ ym mechanismem pro TCP i UDP spojen´ı. Vl´akno postupnˇe vol´a funkce podmodul˚ u na tˇrech vrstv´ach. Funkc´ım jsou pˇred´any vˇsechny potˇrebn´e parametry a jejich v´ ystupem je seznam server˚ us prioritami, kter´e rozhoduj´ı o poˇrad´ı server˚ u pˇri pˇrepojov´an´ı spojen´ı. Podmodul a jeho funkce na prvn´ı vrstvˇe se urˇcuje v konfiguraˇcn´ı ˇca´sti j´adra a vol´a se pro kaˇzd´e spojen´ı. Knihovna, kter´a obsahuje funkci pro prvn´ı vrstvu, je v promˇenn´e CORE LAYER1 LIBRARY a funkce je v promˇenn´e CORE LAYER1 FUNCTION. Samotn´a funkce se d´a plnˇe konfigurovat, ale v pˇr´ıpadˇe speci´aln´ıch poˇzadavk˚ u lze napsat a vloˇzit svoji vlastn´ı. Funkce na prvn´ı vrstvˇe je povinn´a. Rozhoduje se na z´akladˇe portu, na kter´em Load Balancer poslouch´a, protokolu, adresy klienta a dalˇs´ıch parametr˚ u. V´ ystupem t´eto funkce je skupina server˚ u, kter´e mohou dan´ y poˇzadavek obslouˇzit, knihovna a funkce druh´e nebo tˇret´ı vrstvy, pˇr´ıpadnˇe datov´eho podmodulu a data naˇcten´a pro vykon´an´ı rozhodnut´ı. Podmodul a jeho funkce na druh´e vrstvˇe je vol´ana na z´akladˇe v´ ysledku funkce na prvn´ı vrstvˇe. Typicky je pro kaˇzd´ y port/protokol naps´an zvl´aˇstn´ı podmodul (ˇcasto nemus´ı b´ yt ˇza´dn´ y). Druh´a vrstva nad´ale upˇresˇ nuje skupinu server˚ u, kter´e jsou schopny poˇzadavek ˇreˇsit a kter´e dostala od podmodulu na prvn´ı vrstvˇe. V´ ystupem je knihovna a funkce pro tˇret´ı vrstvu, pˇr´ıpadnˇe datov´ y podmodul a data naˇcten´a pro vykon´an´ı rozhodnut´ı. Typicky se podmoduly na druh´e vrstvˇe rozhoduj´ı podle obsahu dat (Layer 7 switching). Funkce na druh´e vrstvˇe se mohou volat opakovanˇe a tak zjemˇ novat dˇelen´ı. Naimplementovan´ y je podmodul pro rozhodov´an´ı na z´akladˇe obsahu dat v protokolu HTTP. Po pr˚ uchodu prvn´ıch dvou vrstev by skupina vybran´ ych server˚ u mˇela b´ yt ekvivalentn´ı z hlediska schopnosti vyˇr´ızen´ı poˇzadavku dan´eho typu spojen´ı. Ve funkc´ıch v podmodulech na tˇret´ı vrstvˇe se urˇcuje poˇrad´ı vybran´e skupiny server˚ u bud’ na z´akladˇe statick´ ych hodnot (statick´a v´aha serveru, zdrojov´a adresa, . . . ) nebo pomoc´ı dotazov´an´ı se statistik. J´adro pak postupnˇe zkouˇs´ı vytvoˇrit spojen´ı na tˇechto serverech podle jejich priority. Funkce na tˇret´ı vrstvˇe by nemˇela b´ yt vol´ana pouze v pˇr´ıpadˇe, kdy dan´ y poˇzadavek m˚ uˇze vyˇr´ıdit pouze jeden server nebo pokud je priorita server˚ u nastaven´a z pˇredchoz´ıch vrstev. Po projit´ı vˇsemi funkcemi jednotliv´ ych vrstev zaˇcne vl´akno vyb´ırat c´ılov´ y server podle seznamu server˚ u. kter´e vr´at´ı funkce podmodul˚ u. Seznam ob28
sahuje poloˇzku priority, kter´a rozhoduje o poˇrad´ı server˚ u. Seznam se proch´az´ı od zaˇca´tku a vybere se prvn´ı server, kter´ y m´a nejvyˇsˇs´ı prioritu a je dostupn´ y. Na vybran´ y server se vl´akno pokus´ı pˇripojit. Pokud se to nepodaˇr´ı, pokraˇcuje se v proch´azen´ı seznamu a vezme se dalˇs´ı server s nejvyˇsˇs´ı prioritou. Pokud uˇz ˇza´dn´ y takov´ y nen´ı, proch´az´ı se seznam znovu od zaˇca´tku a vyb´ır´a se server s druhou nejvyˇsˇs´ı prioritou atd., dokud je jejich priorita vˇetˇs´ı neˇz nula. U vˇsech server˚ u, ke kter´ ym se nepodaˇrilo pˇripojit, se zv´ yˇs´ı poˇcet ne´ uspˇeˇsn´ ych pokus˚ u a pˇri pˇresaˇzen´ı hodnoty PING TTD je oznaˇcen za nefunkˇcn´ı server. Dalˇs´ım podmodulem, kter´ y lze vyuˇz´ıt, je datov´ y podmodul. Tento podmodul lze vyuˇz´ıt pouze pro TCP spojen´ı. Slouˇz´ı k ˇr´ızen´ı nov´ ych spojen´ı a k u ´pravˇe pˇren´aˇsen´ ych dat. Datov´ y modul se nahraje a pouˇz´ıv´a, pokud je nastaven pˇri pr˚ uchodu prvn´ı aˇz tˇret´ı vrstvou. Vol´a se pˇri vytvoˇren´ı hlavn´ıho spojen´ı, pˇri ukonˇcen´ı hlavn´ıho spojen´ı a vˇzdy pˇri pˇrenosu dat obˇema smˇery v hlavn´ım spojen´ı. V tom pˇr´ıpadˇe se nejdˇr´ıve data naˇctou, pak se zavol´a funkce datov´eho podmodulu a n´aslednˇe se data zap´ıˇs´ı. Datov´ y podmodul m´a moˇznost mˇenit data pˇred jejich zaps´an´ım a vytv´aˇret, otev´ırat a zav´ırat pomocn´a datov´a spojen´ı potˇrebn´a pro pˇr´ısluˇsn´ y protokol smˇerem od i k serveru. Po ukonˇcen´ı hlavn´ıho spojen´ı jsou vˇsechna datov´a spojen´ı tak´e ukonˇcena. Naimplementovan´ y je datov´ y podmodul pro protokol FTP, kter´ y umoˇzn ˇuje pˇrepojov´an´ı aktivn´ıho i pasivn´ıho pˇrenosu. Vˇsechny podmoduly se nahr´avaj´ı jako dll knihovny a pro dalˇs´ı rozˇs´ıˇren´ı o nov´e protokoly tak staˇc´ı upravit nebo pˇripsat nov´e dll knihovny. Load Balancer pak staˇc´ı restartovat pro uplatnˇen´ı zmˇen. T´ım je dosaˇzeno vysok´e modularity a moˇznosti dalˇs´ıho rozˇs´ıˇren´ı i o zcela speci´aln´ı nestandardn´ı protokoly.
4.6
Nav´ az´ an´ı spojen´ı
Navazov´an´ı spojen´ı se prov´ad´ı vol´an´ım funkce connect(). Ta m´a v syst´emu nastavena pˇr´ıliˇs dlouh´ y timeout, kter´ y by pˇri vysok´em zat´ıˇzen´ı mohl zablokovat cel´ y Load Balancer. Proto je k dispozici nˇekolik nastaven´ı, kter´a mohou implicitn´ı timeout zkr´atit. K nasteven´ı se pouˇz´ıvaj´ı tyto promˇenn´e: CORE CONNECT TIMEOUT Urˇcuje d´elku timeoutu v milisekund´ach. Pokud je nastaveno na nulu, pouˇzije se autokonfigurace. je nastaveno, CORE CONNECT SEND TO STATS Pokud odes´ılaj´ı se informace o u ´spˇechu ˇci ne´ uspˇechu do statistik. CORE CONNECT STARTING TIME timeoutu pˇri autokonfiguraci. 29
Urˇcuje
poˇc´ateˇcn´ı
d´elku
CORE CONNECT NUMBER tuje pr˚ umˇern´a hodnota.
Urˇcuje poˇcet spojen´ı, kter´e reprezen-
CORE CONNECT RATE Urˇcuje, jakou hodnotou se m´a vyn´asobit pr˚ umˇern´a hodnota pro nastaven´ı d´elky timeoutu. Connect timeout se nastavuje promˇennou CORE CONNECT TIMEOUT, kter´a urˇcuje d´elku timeoutu v milisekund´ach. Pokud je nastavena na nulovou hodnotu, pouˇzije pro stanoven´ı d´elky timeoutu autokonfigurace. Pˇri autokonfiguraci si j´adro poˇc´ıt´a pr˚ umˇernou hodnotu trv´an´ı connectu (spojen´ı se serverem). Pr˚ umˇer se poˇc´ıt´a z CORE CONNECT NUMBER hodnot, kde pˇri v´ ypoˇctu nov´e hodnoty pr˚ umˇeru se pouˇzije aktu´aln´ı hodnota trv´an´ı a CORE CONNECT NUMBER-1 hodnot pˇredchoz´ıho pr˚ umˇeru. Pˇri startu se jako poˇc´ateˇcn´ı pr˚ umˇern´a hodnota pouˇzije CORE CONNECT STARTING TIME zadan´a v milisekund´ach. Pro nastaven´ı timeoutu pro spojen´ı se spoˇcten´ y pr˚ umˇer vyn´asob´ı hodnotou promˇenn´e CORE CONNECT RATE. Pro shrnut´ı se nov´a pr˚ umˇern´a hodnota spoˇc´ıt´a takto: new average connect time = average connect time∗(CORE CON N ECT N U M BER−1)+new connect time kde CORE CON N ECT N U M BER average connect time je pr˚ umˇern´ y ˇcas pˇredchoz´ıch spojen´ı a new connect time je connet ˇcas aktu´aln´ıho spojen´ı.
4.7
Komunikace se statistikami
Pokud je nastaveno spuˇstˇen´ı statistik a je nastaven´ y pˇr´ısluˇsn´ y parametr po pr˚ uchodu podmodul˚ u pro vyb´ır´an´ı serveru, jsou statistik´am odesl´ana data o spojen´ı. Tyto data se pouˇz´ıvaj´ı pro dotazovan´ı se podmodul˚ u na aktu´aln´ı stav server˚ u ( jejich zat´ıˇzen´ı, odezvy, . . . ) a pro v´ ypoˇcet statistik za r˚ uzn´a ˇcasov´a obdob´ı a jejich prezentace na webov´em rozhran´ı. Pro UDP spojen´ı se odes´ıl´a jedna informace pˇri pˇreposl´an´ı packetu na server a jedna informace pˇri opaˇcn´em smˇeru. Pro TCP spojen´ı jsou informace odes´ıl´any v tˇechto okamˇzic´ıch: • Pˇri otevˇren´ı nov´eho spojen´ı. • Pˇri pˇrenosu dat od klienta k serveru. • Pˇri pˇrenosu dat od serveru ke klientovi. • Pˇri uzavˇren´ı spojen´ı ze strany klienta. • Pˇri uzavˇren´ı spojen´ı ze strany serveru. 30
• Pˇri pˇrenosu dat od klienta k serveru pomocn´ ym datov´ ym spojen´ım. ym datov´ ym spojen´ım. • Pˇri pˇrenosu dat od serveru ke klientovi pomocn´ Pro odes´ıl´an´ı informac´ı od j´adra ke statistik´am se vyuˇz´ıv´a UDP spojen´ı na portu COMMUN STATS PORT. Pro dotazovan´ı podmodul˚ u do statistik se vyuˇz´ıv´a TCP spojen´ı na portu COMMUN CORE3RD PORT. Statistick´ y modul m˚ uˇze souˇcasnˇe zpracov´avat maxim´alnˇe COMMUN CLIENTS3RD MAX spojen´ı.
4.8
Ping vl´ akno
Pokud je v konfiguraˇcn´ım souboru nastavena promˇenn´a PING ENABLE je pˇri inicializaci vytvoˇreno a spuˇstˇeno ping vl´akno. Vl´akno postupnˇe proch´az´ı seznam server˚ u a provede test dostupnosti portu vˇsech server˚ u (sluˇzeb). Pokud dojde ke zmˇenˇe jeho stavu, je odesl´ana zpr´ava statistik´am (pokud jsou spuˇstˇeny) a pˇr´ısluˇsnˇe zmˇenˇeny promˇenn´e v j´adru, aby dan´ y server byl / nebyl vyuˇz´ıv´an. Ping vl´akno prov´ad´ı testov´an´ı kaˇzd´ ych PING DELAY milisekund. Souˇca´st´ı Load Balanceru je testov´an´ı tˇechto sluˇzeb: SMTP, HTTP, MYSQL, FTP, POP a IMAP. Dalˇs´ı sluˇzby je moˇzn´e pˇridat jednoduch´ ym upraven´ım knihovny ping.c popsan´e v program´atorsk´e ˇca´sti n´avodu.
31
Kapitola 5 Konfigurace 5.1
´ Uvod
Jednotliv´e moduly Load Balanceru mohou bˇeˇzet na r˚ uzn´ ych poˇc´ıtaˇc´ıch, konfiguraˇcn´ı soubor je ale pouze na jednom poˇc´ıtaˇci a to na poˇc´ıtaˇci, na kter´em bˇeˇz´ı modul Init. Standardn´ı jm´eno konfiguraˇcn´ıho souboru je lb.cfg a standardn´ı um´ıstˇen´ı je v adres´aˇri /etc. Modulu Init m˚ uˇze b´ yt pˇri startu zad´an jin´ y neˇz standardn´ı konfiguraˇcn´ı soubor. Modul Init tak´e umoˇzn ˇuje kontrolu syntaktick´e spr´avnosti zadan´eho (ˇci standardn´ıho) konfiguraˇcn´ıho souboru. Jednotliv´e moduly Load Balanceru si mezi sebou obsah konfiguraˇcn´ıho souboru pˇredaj´ı. Konfigurace Load Balanceru m˚ uˇze b´ yt prov´adˇena pˇr´ımo zmˇenou konfiguraˇcn´ıho souboru a posl´eze restartu modulu Init (zasl´an´ım sign´alu) nebo pˇres webov´e rozhran´ı.
5.2 5.2.1
Konfiguraˇ cn´ı soubor Z´ akladn´ı struktura
Konfiguraˇcn´ı soubor se skl´ad´a (v dan´em poˇrad´ı) z povinn´e sekce MAIN, povinn´e sekce ALIASES a nepovinn´ ych uˇzivatelsk´ ych sekc´ı. Zaˇca´tek sekce SEC je uveden ˇra´dkem <SEC>
a ukonˇcena ˇra´dkem
32
,kde za SEC m˚ uˇzeme substituovat MAIN, ALIASES nebo libovoln´ y identifik´ator uˇzivatelsk´e sekce. Pˇr´ıpustn´ y identifik´ator uˇzivatelsk´e sekce je posloupnost znak˚ u zaˇc´ınaj´ıc´ı podtrˇz´ıtkem nebo p´ısmenem anglick´e abecedy a pokraˇcuj´ıc´ı libovoln´ ym p´ısmenem anglick´e abecedy, cifrou ˇci podtrˇz´ıtkem. Kaˇzd´a ˇr´adka v libovoln´e sekci (tj. sekci MAIN, ALIASES ˇci uˇzivatelsk´e sekci) je ukonˇcena povinn´ ym stˇredn´ıkem. Konfiguraˇcn´ı soubor je tzv. case-sensitive, tedy rozliˇsuje mal´a a velk´a p´ısmena (jak je v Unix-ov´em svˇetˇe zvykem). V konfiguraˇcn´ım souboru se mohou vyskytovat i ˇr´adky s koment´aˇrem uvozen´e znakem mˇr´ıˇzky (]), ale ty jsou pˇri zmˇenˇe konfiguraˇcn´ıho souboru pˇres webov´e rozhran´ı odstranˇeny. Pro koment´aˇr jednotliv´ ych promˇenn´ ych konfiguraˇcn´ıho souboru slouˇz´ı k tomu urˇcen´ y, d´ale popsan´ y, mechanismus. Celkov´a koncepce konfiguraˇcn´ıho souboru byla navrˇzena s c´ılem snadn´eho rozˇs´ıˇren´ı o nov´e balancovac´ı moduly, kter´e mohou snadn´ ym a jednoduch´ ym zp˚ usobem z´ıskat data z konfiguraˇcn´ıho souboru.
5.2.2
Princip modul˚ u, sekc´ı a alias˚ u
Konfiguraˇcn´ı soubor slouˇz´ı k uchov´an´ı dat. Pouˇz´ıvaj´ı ho moduly samotn´eho Load Balanceru i moduly, jeˇz se staraj´ı o distribuci pˇr´ıchoz´ıch poˇzadavk˚ u na server mezi servery ve farmˇe. Kaˇzd´ y takov´ y modul zn´a sv´e jm´eno a m˚ uˇze si do konfiguraˇcn´ıho souboru uloˇzit sv´e promˇenn´e. Uˇzivatelsk´e sekce slouˇz´ı k pojmenov´an´ı jedn´e oblasti uchov´avaj´ıc´ı v´ıce promˇenn´ ych. Byly vytvoˇreny proto, aby stejn´ y modul mohl m´ıt nˇekolik alternativn´ıch nastaven´ı sv´ ych intern´ıch promˇenn´ ych. Sekce MAIN umoˇzn ˇuje pˇriˇradit modul˚ um uˇzivatelsk´e sekce. Pokud pak dan´ y modul zaˇz´ad´a o data z konfiguraˇcn´ıho souboru, pˇriˇcemˇz se identifikuje sv´ ym jm´enem, dostane hodnoty promˇenn´ ych z uˇzivatelsk´ ych sekc´ı pˇriˇrazen´ ych modulu t´ehoˇz jm´ena. Uˇzivatelsk´e sekce mohou b´ yt mezi moduly sd´ılen´e, tedy jedna uˇzivatelsk´a sekce m˚ uˇze b´ yt pˇriˇrazena obecnˇe v´ıce modul˚ um. Pro vˇetˇs´ı pohodl´ı uˇzivatele byl vytvoˇren koncept alias˚ u. Alias si lze pˇredstavit jako ”nˇekolik ˇr´adek v sekci MAIN”. Alias je tedy zkratka za obecnˇe nˇekolik pˇriˇrazen´ı, kde kaˇzd´e jednotliv´e pˇriˇrazen´ı pˇriˇrazuje modulu uˇzivatelsk´e sekce. Hlavn´ı d˚ uvod pro vytvoˇren´ı alias˚ u byla moˇznost rychl´eho a snadn´eho pˇrep´ın´an´ı mezi r˚ uzn´ ymi balancovac´ımi algoritmy (viz. uk´azkov´ y pˇr´ıklad konfiguraˇcn´ıho souboru d´ale) - staˇc´ı zmˇenit pˇr´ısluˇsn´ y alias v sekci MAIN. Sekce ALIASES slouˇz´ı pro definici alias˚ u, kter´e se mohou pouˇz´ıvat v sekci MAIN.
33
5.2.3
Sekce MAIN
Sekce MAIN, jak jiˇz bylo ˇreˇceno, slouˇz´ı pro pˇriˇrazen´ı uˇzivatelsk´ ych sekc´ı dan´emu modulu. Toho lze dos´ahnout pˇr´ımo nebo pouˇzit´ım alias˚ u. Jednotliv´e ˇra´dky sekce MAIN, ukonˇcen´e (jako vˇsechny ˇra´dky vˇsech sekc´ı) povinn´ ym stˇredn´ıkem, mohou b´ yt dvoj´ıho typu. Bud’ je to ˇr´adka obsahuj´ıc´ı jedin´e slovo a stˇredn´ık. V tom pˇr´ıpadˇe se jedn´a o n´azev aliasu, kter´ y se m´a pouˇz´ıt. A v´ ysledn´ y efekt je stejn´ y, jako kdyby vˇsechny ˇra´dky ze sekce ALIASES, jeˇz maj´ı prvn´ı slovo na ˇra´dce pr´avˇe dan´ y alias, byly vloˇzeny do sekce MAIN. Druh´a moˇznost je, ˇze ˇr´adka v sekci MAIN obsahuje alespoˇ n dvˇe slova a v tomto pˇr´ıpadˇe je to interpretov´ano tak, ˇze modulu (prvn´ı slovo na ˇra´dce) jsou pˇriˇrazeny uˇzivatelsk´e sekce (zbyl´a slova na ˇra´dce). Sekce MAIN je povinn´a, i kdyˇz m˚ uˇze b´ yt pr´azdn´a. Bez n´ı bude konfiguraˇcn´ı soubor prohl´aˇsen za syntakticky nespr´avn´ y. Uveden´ı stejn´eho identifik´atoru uˇzivatelsk´e sekce v´ıcekr´at v ˇra´dce pˇriˇrazuj´ıc´ı uˇzivatelsk´e sekce dan´emu modulu nem´a smysl. Pokud jsou dan´emu modulu pˇriˇrazeny uˇzivatelsk´e sekce na nˇekolika ˇr´adc´ıch sekce MAIN, je v´ yslednˇe modulu pˇriˇrazeno sjednocen´ı tˇechto uˇzivatelsk´ ych sekc´ı. Obdobnˇe v´ıcen´asobn´e pouˇzit´ı jednoho a t´ehoˇz aliasu v sekci MAIN. Uk´azkov´ y pˇr´ıklad sekce MAIN: <MAIN> core core_base core_ext SERVERS_SECTION; stat statistics SERVERS_SECTION; round_robin1; prezent2;
5.2.4
Sekce ALIASES
Sekce ALIASES je stejnˇe jako sekce MAIN povinn´a, i kdyˇz m˚ uˇze b´ yt tak´e pr´azdn´a. Bez n´ı je konfiguraˇcn´ı soubor prohl´aˇsen za syntakticky nespr´avn´ y. Sekce ALIASES slouˇz´ı k definici alias˚ u, kter´e se mohou pouˇz´ıvat v sekci MAIN. Kaˇzd´a ˇr´adka sekce ALIASES mus´ı obsahovat alespoˇ n tˇri slova. Prvn´ı je jm´eno aliasu, druh´e jm´eno modulu, kter´emu chceme pˇriˇrazovat a tˇret´ı (a pˇr´ıpadnˇe dalˇs´ı) slova jsou jm´enu uˇzivatelsk´ ych sekc´ı, kter´e dan´emu modulu pˇriˇrazujeme. Obdobnˇe jako v sekci MAIN, nem´a smysl v jedn´e ˇr´adce sekce ALIASES uv´adˇet stejn´e identifik´atory uˇzivatelsk´ ych sekc´ı v´ıcekr´at a ani na r˚ uzn´ ych ˇra´dk´ach pˇriˇrazuj´ıc´ıch stejn´emu modulu v r´amci t´ehoˇz aliasu.
34
Aliasy, kter´e se vyskytly v sekci MAIN ale nebyly definov´any v sekci ALIASES jsou ignorov´any. Uk´azkov´ y pˇr´ıklad sekce ALIASES round_robin1 mod1basic mod1A mod1C; round_robin1 mod2php PHP; round_robin2 mod1basic mod1B mod1C; round_robin2 mod2php PHPnew; prezent1 prezent prezent1 prezent_old_style; prezent2 preeznt prezent1 prezent_new_style;
5.2.5
Uˇ zivatelsk´ e sekce
Uˇzivatelsk´e sekce jsou pojmenov´an´ım oblasti, kter´a obsahuje obecnˇe v´ıce promˇenn´ ych. Slouˇz´ı k tomu, aby moduly mohly m´ıt nˇekolik alternativn´ıch konfigurac´ı, jeˇz se liˇs´ı tˇreba jen v nepatrn´ ych zmˇen´ach hodnot nˇekter´ ych promˇenn´ ych a ˇslo mezi nimi jednoduˇse pˇrep´ınat. D´ale mohou poslouˇzit ke sd´ılen´ı sekc´ı mezi moduly. Pˇr´ıklady uˇzivatelsk´ ych sekc´ı jsou d´ale v pˇr´ıkladu kompletn´ıho konfiguraˇcn´ıho souboru. Nejprve bude vysvˇetleno, jak lze v uˇzivatelsk´ ych sekc´ıch definovat promˇenn´e r˚ uzn´ ych datov´ ych typ˚ u. Jak bude pops´ano d´ale, kontroluje se sice syntaktick´a spr´avnost konfiguraˇcn´ıho souboru (spr´avn´ y poˇcet argument˚ u, nepr´azdnost identifik´ator˚ u atd.), ale pokud se vyskytnou dvˇe sekce se stejn´ ym jm´enem, jsou jednoduˇse spojeny do jedn´e. Pokud uˇzivatel v´ı, co dˇel´a, nen´ı to probl´em. Pokud ale obsahy nejsou disjunktn´ı (tj. napˇr´ıklad se vyskytne dvoj´ı definice t´eˇze promˇenn´e), bude modulu pˇred´ana hodnota promˇenn´e jeˇz byla v konfiguraˇcn´ım souboru dˇr´ıve uveden´a a obecnˇe nen´ı chov´an´ı jednoznaˇcn´e. Vˇsechny ˇra´dky uˇzivatelsk´ ych sekc´ı maj´ı stejnou strukturu: prvn´ı je kl´ıˇcov´e slovo a pak je nˇekolik hodnot v uvozovk´ach, vˇse ukonˇcen´e povinn´ ym stˇredn´ıkem. Poˇcet slov za kl´ıˇcov´ ym slovem z´avis´ı na kl´ıˇcov´em slovˇe samotn´em.
5.2.6
Jednoduch´ e datov´ e typy
N´asleduje seznam tzv. jednoduch´ ych datov´ ych typ˚ u spolu s pˇr´ısluˇsn´ ym kl´ıˇcov´ ym slovem pro deklaraci promˇenn´e dan´eho typu. V z´avorce je uvedena implementaci dan´eho typu v C, pro lepˇs´ı pochopen´ı o jak´ y ˇze datov´ y typ se to vlastnˇe jedn´a. Podporov´any jsou tyto datov´e typy: 35
• varint - cel´e ˇc´ıslo (int) • varlint - velk´e cel´e ˇc´ıslo (long) • vardouble - ˇc´ıslo v pohybliv´e ˇra´dov´e ˇc´arce (double) • varchar - znak (char) • varbool - pravdivostn´ı hodnota (int) • varstring - ˇretˇezec (* char) • varlist - seznam (*char[]) Vˇsechny tyto typy maj´ı stejn´ y zp˚ usob z´apisu v konfiguraˇcn´ım souboru, liˇs´ı se jen kl´ıˇcov´ ym slovem. Dan´a ˇra´dka mus´ı m´ıt tvar keyword "identifier" "value" "range" "comment";
nebo keyword "identifier" "value" "range" "comment" "longcomment";
tedy obsahuje kl´ıˇcov´e slovo (keyword), coˇz je jedno z v´ yˇse uveden´ ych a d´ale ˇctyˇri popˇr´ıpadˇe pˇet hodnot v uvozovk´ach, vˇse ukonˇcen´e stˇredn´ıkem. V´ yznam jednotliv´ ych hodnot: yt nepr´azdn´ y ˇretˇezec) • identifier - identifik´ator promˇenn´e (mus´ı b´ • value - hodnota promˇenn´e, m˚ uˇze b´ yt pr´azdn´ y ˇretˇezec (vyhodnocov´an´ı viz. n´ıˇze) • range - rozsah hodnot (seznam hodnot oddˇelen´ ych ˇca´rkami, o v´ yˇctov´ ych typech d´ale) • comment - popis promˇenn´e pro webov´e rozhran´ı • longcomment - podrobn´e vysvˇetlen´ı promˇenn´e pro webov´e rozhran´ı (nen´ı povinn´e) Zde je vidˇet, jak spr´avnˇe komentovat promˇenn´e v konfiguraˇcn´ım souboru. Vyhodnocov´an´ı hodnot promˇenn´ ych. Pro datov´ y typ varint, varlint a vardouble je hodnota z´ısk´ana pomoc´ı funkc´ı (v tomto poˇrad´ı) atoi(), atol() a atof(). Tedy pro ˇretˇezec nepˇredstavuj´ıc´ı ˇc´ıselnou hodnotu to bude typicky 0. 36
Typ varchar vr´at´ı prvn´ı znak dan´eho ˇretˇezce. Typ varlist je ˇretˇezec hodnot oddˇelen´ ych ˇca´rkami. Typ varbool nab´ yv´a hodnoty 1 (true) pokud se jedn´a o string ”YES” (v tomto jedin´em pˇr´ıpadˇe nez´aleˇz´ı na velikosti p´ısmen), nebo string ”TRUE” (opˇet nez´aleˇz´ı na velikosti p´ısmen) nebo je dan´ y string vyhodnocen funkc´ı atoi() na kladnou hodnotu. Uk´azka sekce obsahuj´ıc´ı definice promˇenn´ ych vˇsech jednoduch´ ych datov´ ych typ˚ u <prezent1> varint varlint vardouble varchar varbool varstring varlist
5.2.7
"MAX" "100" "" "max threadu" ""; "EE" "20000" "" ""; "pi" "3.14" "" ""; "zn" "a" "" ""; "print_all" "yes" "" "vypisovat vsechny podrobnosti"; "email" "[email protected]" "mail na spravce" "in case"; "dny" "po,ut" "po,ut,st,cp,pa" "udrzba" "zalohovaci dny";
Tabulky
Pro definice tabulek m´ame n´asleduj´ıc´ı kl´ıˇcov´a slova: • tabledef ”id” ”n” ”t1 ” . . . ”tn ” - definuje tabulku s dan´ ym jm´enem (id), poˇctem sloupc˚ u (n) a datov´ ymi typy dan´ ych sloupc˚ u (t1 , . . ., tn ). Datov´e typy mohou b´ yt jen jednoduch´ ych datov´ ych typ˚ u (drobn´e upˇresnˇen´ı v dalˇs´ı sekci). • tablerow ”id” ”v1 ” . . . ”vn ” - ˇr´adka tabulky s dan´ ymi hodnotami (v1 , . . ., vn ) • tablehelp ”id” ”comment” - popis tabulky pro webov´e rozhran´ı (m˚ uˇze b´ yt pr´azdn´e) • tablecomm ”id” ”c1 ” . . . ”cn ” - popis sloupc˚ u tabulky pro webov´e rozhran´ı y popis sloupc˚ u tabulky pro • tablelcomm ”id” ”c1 ” . . . ”cn ” - podrobn´ webov´e rozhran´ı • tabledlist ”id” ”l1 ” . . . ”ln ” - rozsah hodnot pro sloupce tabulky (pouˇzit pro tzv. droplist v webov´em rozhran´ı), podobnˇe jako range u jednoduch´ ych datov´ ych typ˚ u, seznam hodnot oddˇelen´ ych ˇca´rkami (o v´ yˇctov´ ych typech d´ale) 37
Pro minim´aln´ı pouˇzit´ı tabulek je povinn´a deklarace pomoc´ı tabledef a pro vloˇzen´ı dat deklarace tablerow. Ostatn´ı jsou nepovinn´e, ale mˇely by b´ yt pouˇzity kv˚ uli webov´emu rozhran´ı. Vˇsechny definice t´ ykaj´ıc´ı se jedn´e tabulky, by mˇely b´ yt v jedn´e uˇzivatelsk´e sekci. Uk´azka sekce obsahuj´ıc´ı pouˇzit´ı datov´eho typu tabulka <prezent2> tabledef tablecomm tablelcomm tabledlist tablehelp tablerow tablerow
5.2.8
"pravidla" "pravidla" "pravidla" "pravidla" "pravidla" "pravidla" "pravidla"
"3" "varint" "varlist" "varstring"; "priorita" "seznam dnu" "e-mail"; "" "" ""; "1,2,3,4,5" "po,ut,st,ct,pa" ""; "seznam pravidel kam se posilaji chybove hlasky"; "2" "po,st" "[email protected]"; "1" "po,ut,pa" "root@localhost";
Typ pro servery
Vˇetˇsina balancovac´ıch modul˚ u bude m´ıt jako stˇeˇzejn´ı ˇca´st sv´ ych promˇenn´ ych tabulku s pravidly, kam se pˇr´ıchoz´ı poˇzadavky pˇresmˇerov´avaj´ı. Jeden ze sloupc˚ u takov´e tabulky typicky bude obsahovat server(y). Pro zpˇr´ıjemnˇen´ı pr´ace uˇzivatele pomoc´ı webov´eho rozhran´ı byl vytvoˇren speci´aln´ı datov´ y typ uvozen´ y kl´ıˇcov´ ym slovem varservers. Promˇenn´e tohoto typu se deklaruj´ı stejnˇe jako promˇenn´e jednoduch´ ych datov´ ych typ˚ u, tj. varservers "identifier" "value" "range" "comment";
nebo varservers "identifier" "value" "range" "comment" "longcomment";
tedy p´at´ y argument (podrobn´ y koment´aˇr) je nepovinn´ y. Ostatn´ı argumenty maj´ı naprosto stejn´ y v´ yznam jako u jednoduch´ ych datov´ ych typ˚ u. V ˇcem je tedy tento datov´ y typ speci´aln´ı? Pˇr´ıpustnou hodnotou je bud’ jm´eno server˚ u nebo jm´eno skupiny server˚ u (chci-li pouˇz´ıt v´ıce server˚ u, mus´ım vytvoˇrit skupinu server˚ u). Hodnota parametru range je tedy irelevantn´ı. Obdobnˇe, pokud se datov´ y typ varservers vyskytne jako i-t´ y sloupeˇcek tabulky, pak i-t´ y sloupeˇcek pˇr´ısluˇsn´e deklarace tabledlist je irelevantn´ı. V konfiguraˇcn´ım souboru se oˇcek´av´a sekce s jm´enem SERVERS SECTION a v n´ı tabulka SERVERS, s informacemi o serverech. D´ale se oˇcek´av´aj´ı tabulky s jm´eny GROUPS, s informacemi o skupinach 38
server˚ u, a LISTEN PORTS, s informacemi o portech, na kter´ ych Load Balancer poslouch´a. Webov´e rozhran´ı pak d´ıky speci´aln´ımu datov´emu typu v´ı, ˇze se jedn´a o servery a v´ı, kde je m´a hledat a pr´ace se tak st´av´a pˇr´ıjemnˇejˇs´ı. Datov´eho typu varservers m˚ uˇze b´ yt definov´ana jak jednoduch´a promˇenn´a tak i sloupeˇcek tabulky. Pˇr´ıklad sekce SERVERS: <SERVERS_SECTION> tabledef "LISTEN_PORTS" "2" "varstring" "varint"; tablerow "LISTEN_PORTS" "TCP" "11230"; tablerow "LISTEN_PORTS" "TCP" "11231"; tabledef "SERVERS" "5" "varstring" "varstring" "varstring" "varint" "varint"; tablerow "SERVERS" "serv0" "TCP" "195.113.27.248" "1111" "100"; tablerow "SERVERS" "serv1" "TCP" "195.113.27.248" "1112" "200"; tabledef "GROUPS" "2" "varstring" "varstring"; tablerow "GROUPS" "all" "serv0,serv1,serv2,serv3,serv4,serv5,serv6"; tablerow "GROUPS" "group1" "serv0,serv1,serv2";
5.2.9
V´ yˇ ctov´ e typy
Pro zpˇr´ıjemnˇen´ı pr´ace uˇzivatele je moˇzn´e v konfiguraˇcn´ım souboru definovat v´ yˇctov´e typy. To lze pomoc´ı kl´ıˇcov´eho slova defenum, jeˇz oˇcek´av´a identifik´ator typu a pak seznam hodnot oddˇelen´ ych ˇc´arkami. Pˇr´ıklad: defenum "vsedni_dny" "po,ut,st,ct,pa"; defenum "ang_dny" "mo,tu,we,th,fr,sa,su";
Dan´e typy se pak mohou pouˇz´ıt v range pro danou promˇennou (ˇci sloupeˇcek tabulky). Do t´eto chv´ıle jsme vˇedˇeli, ˇze range je seznam hodnot oddˇelen´ ych ˇca´rkami. Pokud je nˇekter´a hodnota uvozena znakem mˇr´ıˇzky (]), povaˇzuje se za v´ yˇctov´ y typ. Pokud dan´ y v´ yˇctov´ y typ nen´ı v konfiguraˇcn´ım souboru nalezen, bude moˇzn´a hodnota dan´ y ˇretˇezec vˇcetnˇe poˇc´ateˇcn´ıho znaku mˇr´ıˇzky. Pokud se nˇekde pouˇzije v´ yˇctov´ y typ, hled´a se jeho definice nejprve ve speci´aln´ı sekci s n´azvem ENUM a n´aslednˇe ve vˇsech uˇzivatelsk´ ych sekc´ıch dan´eho konfiguraˇcn´ıho souboru. Kv˚ uli rychlosti je doporuˇceno um´ıstit vˇsechny v´ yˇctov´e typy do uˇzivatelsk´e sekce ENUM. 39
Pˇr´ıklad pouˇzit´ı v´ yˇctov´eho typu: varstring "den" "po" "#vsedni_dny,so,ne"; <ENUM> typedef "vsedni_dny" "po,ut,st,ct,pa"; typdef "ang_dny" "mo,tu,we,th,fr,sa,su";
5.2.10
Kontrola spr´ avnosti
Load Balancer si pˇred sv´ ym spuˇstˇen´ım kontroluje dan´ y konfiguraˇcn´ı soubor. Kromˇe syntaktick´e spr´avnosti i spr´avn´ y poˇcet argument˚ u za pˇr´ısluˇsn´ ym kl´ıˇcov´ ym slovem, spr´avn´ y poˇcet sloupeˇck˚ u v tabulce, zn´am´e datov´e typy. Ale neprov´ad´ı s´emantickou kontrolu, viz. napˇr´ıklad dˇr´ıve zm´ınˇen´ y probl´em o sjednocen´ı nedisjunktn´ıch uˇzivatelsk´ ych sekc´ı se stejn´ y jm´enem. V takov´ ych pˇr´ıpadech nese plnou zodpovˇednost uˇzivatel. Startovac´ı modul Load Balanceru Init lze tak´e spustit pouze pro kontrolu standardn´ıho ˇci zadan´eho konfiguraˇcn´ıho souboru.
5.2.11
Uk´ azkov´ y konfiguraˇ cn´ı soubor
N´asleduje kompletn´ı uk´azkov´ y konfiguraˇcn´ı soubor, jehoˇz jednotliv´e ˇca´sti bylo moˇzno vidˇet v pr˚ ubˇehu t´eto kapitoly. <MAIN> core core_base core_ext SERVERS_SECTION; stat statistics SERVERS_SECTION; round_robin1; prezent2; round_robin1 mod1basic mod1A mod1C; round_robin1 mod2php PHP; round_robin2 mod1basic mod1B mod1C; round_robin2 mod2php PHPnew; prezent1 prezent prezent1 prezent_old_style; prezent2 preeznt prezent1 prezent_new_style;
40
varstring "den" "po" "#vsedni_dny,so,ne" "den kdy se zalohuje"; varint "core_n" "2" "1,2" "pocet kopii"; <mod1A> varint "A" "10" "" ""; <mod1B> varint "A" "20" "" ""; varint "velikost" "10" "" ""; <mod1C> varint "C" "100" "" ""; <mod1D> varint "C" "200" "" ""; varint "size" "5" "" ""; varstring "php" "3.0" "" ""; varstring "php" "4.0" "" ""; varstring "php2" "3.0" "" ""; <prezent_old_style> varlist "colors" "black,white" "" ""; <prezent_new_style> varlist "colors" "red,blue,white" "" "";
41
<prezent1> varint varlint vardouble varchar varbool varstring varlist
"MAX" "100" "" "max threadu" ""; "EE" "20000" "" ""; "pi" "3.14" "" ""; "zn" "a" "" ""; "print_all" "yes" "" "vypisovat vsechny podrobnosti"; "email" "[email protected]" "" "mail" "pouzijte v nouzi"; "dny" "po,ut" "po,ut,st,ct,pa" "udrzba" "kdy zalohovat";
<prezent2> tabledef tablecomm tablelcomm tabledlist tablehelp tablerow tablerow
"pravidla" "pravidla" "pravidla" "pravidla" "pravidla" "pravidla" "pravidla"
"3" "varint" "varlist" "varstring"; "priorita" "seznam dnu" "e-mail"; "" "" ""; "1,2,3,4,5" "po,ut,st,ct,pa" ""; "pravidla kam se posilaji chybove hlasky"; "2" "po,st" "[email protected]"; "1" "po,ut,pa" "root@localhost";
<SERVERS_SECTION> tabledef "LISTEN_PORTS" "2" "varstring" "varint"; tablerow "LISTEN_PORTS" "TCP" "11230"; tablerow "LISTEN_PORTS" "TCP" "11231"; tabledef "SERVERS" "5" "varstring" "varstring" "varstring" "varint" "varint"; tablerow "SERVERS" "serv0" "TCP" "195.113.27.248" "1111" "100"; tablerow "SERVERS" "serv1" "TCP" "195.113.27.248" "1112" "200"; tabledef "GROUPS" "2" "varstring" "varstring"; tablerow "GROUPS" "all" "serv0,serv1,serv2,serv3,serv4,serv5"; tablerow "GROUPS" "group1" "serv0,serv1,serv2"; <statistics> varint "max" "15" "" ""; <ENUM> defenum "vsedni_dny" "po,ut,st,ct,pa"; defenum "ang_dny" "mo,tu,we,th,fr,sa,su";
42
Kapitola 6 Webov´ e rozhran´ı 6.1
Monitoring
V ˇca´sti monitoring je moˇzn´e zjiˇst’ovat aktu´aln´ı stav vˇsech server˚ u(sluˇzeb) na farmˇe. Zobrazovan´e u ´daje jsou n´asleduj´ıc´ı: n´ azev N´azev serveru, kter´ y je mu pˇriˇrazen v konfiguraˇcn´ım souboru. IP adresa IP adresa dan´eho serveru. port Port, na kter´em sluˇzba bˇeˇz´ı. stav Aktu´aln´ı stav dan´eho serveru. Na n´asleduj´ıc´ım obr´azku je zobrazen pˇr´ıklad zobrazen´ı stavu server˚ u.
Obr´azek 6.1: Stav server˚ u Server test 1 v poˇr´adku bˇeˇz´ı, stav serveru test 3 nen´ı zn´am´ y (napˇr. mohlo doj´ıt k timeoutu pˇri posledn´ım connectu na server) a na serveru test 2 doˇslo k chybˇe a nen´ı funkˇcn´ı. D´ale je moˇzn´e zobrazit vˇsechny servery, kter´e byly na farmˇe pouˇzity, i kdyˇz v souˇcasn´e dobˇe nejsou pouˇz´ıv´any (tj. nejsou pˇr´ısluˇsnˇe nastaveny v 43
konfiguraˇcn´ım souboru). Tyto servery se samozˇrejmˇe zobraz´ı pouze v pˇr´ıpadˇe, ˇze pro ukl´ad´an´ı statistick´ ych informac´ı je pouˇzito datab´aze. Aktu´aln´ı stav server˚ u v monitorovac´ı ˇca´sti je obnovov´an kaˇzd´ ych 10 sekund. Pokud nen´ı dostupn´ y statistick´ y modul, nemohou b´ yt zobrazeny ˇza´dn´e u ´daje.
6.2
Zobrazov´ an´ı statistik
V t´eto ˇca´sti je moˇzn´e zobrazovat r˚ uzn´e statistick´e informace o pr´aci Load Balanceru. Uˇzivatel si vytvoˇr´ı dotaz, kde specifikuje jak´a data a v jak´em ˇcasov´em intervalu chce zobrazit. Po odesl´an´ı dotazu se mu zobraz´ı poˇzadovan´a data jednak v podobˇe grafu a jednak v podobˇe tabulky v´ ysledn´ ych hodnot. V´ ysledn´a data se aktualizuj´ı kaˇzdou minutu.
6.2.1
Vytv´ aˇ ren´ı dotazu
V prvn´ı ˇca´sti zad´av´an´ı dotazu si uˇzivatel m˚ uˇze vybrat ze seznamu server˚ u a jim pˇr´ısluˇsej´ıc´ıch datov´ ych typ˚ u, o kter´ ych z nich chce zobrazit informace. Aby mohl b´ yt poloˇzen dotaz, mus´ı b´ yt vybr´an alespoˇ n jeden datov´ y typ u nˇejak´eho serveru.
Obr´azek 6.2: V´ ybˇer server˚ u a datov´eho typu 44
Na pˇr´ıkladˇe si uˇzivatel vybral zobrazen´ı informac´ı o datov´em typu tcp u vˇsech server˚ u. Pozn. N´azvy datov´ ych typ˚ u jsou vytv´aˇreny z n´azv˚ u protokol˚ u a vyvaˇzovac´ıch pravidel z konfiguraˇcn´ıho souboru, kter´ ym dan´a data vyhovovala. V dalˇs´ı ˇca´sti zad´av´an´ı dotazu uˇzivatel urˇcuje typ informac´ı, kter´e chce zobrazit. M˚ uˇze si vybrat z n´asleduj´ıc´ıch typ˚ u (info type): RESPONSE Odezva serveru (v milisekund´ach). FLOW Datov´ y tok (v Bytech za sekundu). FLOW FROM SERVER Datov´ y tok od serveru ke klientovi (v Bytech za sekundu). y tok od klienta ke serveru (v Bytech za FLOW FROM CLIENT Datov´ sekundu). CONNECTIONS PER SECOND Poˇcet vteˇrinu.
uskuteˇcnˇen´ ych
spojen´ı za
REQUESTS PER SECOND Poˇcet zpracovan´ ych poˇzadavk˚ u za vteˇrinu. CONNECT TIME Doba trv´an´ı vytvoˇren´ı spojen´ı se serverem. U kaˇzd´eho z tˇechto typ˚ u uˇzivatel m˚ uˇze zvolit, jestli chce zobrazit maxim´aln´ı, pr˚ umˇern´e nebo minim´aln´ı hodnoty (value type). D´ale je moˇzn´e zvolit jeˇstˇe dva speci´aln´ı typy CONNECTIONS (poˇcet uskuteˇcnˇen´ ych spojen´ı) a REQUESTS (poˇcet zpracovan´ ych poˇzadavk˚ u), u kter´ ych maxim´aln´ı, pr˚ umˇern´e ani minim´aln´ı hodnoty nemaj´ı smysl. Aby mohl b´ yt poloˇzen dotaz, mus´ı b´ yt nˇekter´ y z typ˚ u informac´ı vybr´an. V posledn´ı ˇca´sti zad´av´an´ı dotazu uˇzivatel urˇcuje ˇcasov´ y interval, pro kter´ y chce vybran´e informace zobrazit. M˚ uˇze si bud’ vybrat z listu standardn´ıch hodnot nebo m˚ uˇze ˇcasov´ y interval urˇcit pˇr´ım´ ym zad´an´ım jeho mezn´ıch hodnot. Na z´akladˇe zadan´eho intervalu se automaticky urˇc´ı velikost agregace tj. jak dlouh´e ˇcasov´e intervaly se agreguj´ı do jednotliv´ ych hodnot v´ ysledku, aby byl pˇrehledn´ y. Vˇetˇsinou tyto intervaly b´ yvaj´ı o ˇr´ad niˇzˇs´ı je ˇr´ad intervalu, o kter´em se hodnoty zobrazuj´ı (pokud se napˇr´ıklad uˇzivatel zept´a na hodnoty z posledn´ı hodiny, jednotliv´e hodnoty odpovˇedi se zobraz´ı agregovanˇe po minut´ach). Na n´asleduj´ıc´ım obr´azku je pˇr´ıklad s kompletn´ım dotazem:
45
Obr´azek 6.3: Kompletn´ı dotaz
6.2.2
Zobrazen´ı v´ ysledku dotazu
Po stisknut´ı tlaˇc´ıtka Show se odeˇsle dotaz statistick´emu modulu a zobraz´ı se pˇr´ıchoz´ı odpovˇed’. Pro kaˇzd´ y datov´ y typ kaˇzd´eho serveru jsou v´ ysledn´e hodnoty zobrazeny jako samostatn´a kˇrivka v grafu a samostatn´ y sloupec hodnot v n´asledn´e tabulce. Na n´asleduj´ıc´ım obr´azku je zobrazen pˇr´ıklad odpovˇedi na dotaz pr˚ umˇern´eho toku dat v intervalu 10 minut na vybran´ ych serverech:
46
Obr´azek 6.4: Odpovˇed’ na dotaz
6.3
Konfigurace
V ˇca´sti konfigurace je umoˇznˇeno mˇenit nastaven´ı Load Balanceru pomoc´ı zmˇen v konfiguraˇcn´ım souboru a propagovat je do bˇeˇz´ıc´ıho Load Balanceru. Konfigurace obsahuje pˇet ˇc´ast´ı: • Admin • View Config • Main • Aliases • Sections 47
6.3.1
Administrace
Tato sekce umoˇzn ˇuje pr´aci s jednotliv´ ymi konfiguraˇcn´ımi soubory, restartov´an´ı a ukonˇcen´ı Load Balanceru. Webov´e rozhran´ı pracuje se tˇremi konfiguraˇcn´ımi soubory: running aktu´aln´ı konfigurace Load Balanceru, pˇri startu ho naˇc´ıt´a modul init. default obsahuje z´akladn´ı nastaven´ı Load Balanceru. editing uchov´av´a zmˇeny proveden´e webov´ ym rozhran´ım. Sekce administrace obsahuje pˇet tlaˇc´ıtek: Load Nahraje do editovan´eho konfiguraˇcn´ıho souboru pr´avˇe bˇeˇz´ıc´ı konfiguraˇcn´ı soubor. Pokud tento soubor neexistuje, nahraje se m´ısto nˇeho defaultn´ı konfiguraˇcn´ı soubor. Load default Nahraje do editovan´eho konfiguraˇcn´ıho souboru defaultn´ı konfiguraˇcn´ı soubor. Save Uloˇz´ı editovan´ y konfiguraˇcn´ı soubor do pr´avˇe bˇeˇz´ıc´ıho konfiguraˇcn´ıho souboru. (zmˇeny se projev´ı pˇri nov´em spuˇstˇen´ı nebo pˇri restartu) Restart Restartuje cel´ y Load Balancer. Modul init naˇcte ze souboru konfiguraˇcn´ı soubor a rozeˇsle ostatn´ım modul˚ um sign´al restartu. Ty po sv´em restartu naˇctou nov´ y konfiguraˇcn´ı soubor. Shutdown Ukonˇc´ı bˇeh cel´eho Load Balanceru.
6.3.2
N´ ahled konfiguraˇ cn´ıho souboru
V t´eto ˇc´asti je vidˇet editovan´ y konfiguraˇcn´ı soubor v textov´e podobˇe. Pˇri zmˇenˇe v nˇekter´e ˇca´sti pˇres webov´e rozhran´ı je moˇzn´e tyto zmˇeny vidˇet i v textov´e podobˇe. Tento soubor je pˇr´ıpadnˇe uloˇzen jako bˇeˇz´ıc´ı a ostatn´ı ˇca´ati Load Balanceru ho vyuˇz´ıvaj´ı v t´eto podobˇe.
6.3.3
Main
V t´eto ˇca´sti je moˇzn´e upravovat sekci MAIN z konfiguraˇcn´ıho souboru. Kaˇzd´emu z´aznamu odpov´ıd´a jedna odr´aˇzka. Jednotliv´e z´aznamy lze mazat pomoc´ı ikony koˇse vedle n´azvu modulu. Pokud modul obsahuje v´ıce sekc´ı, pak je moˇzn´e je mazat ikonou koˇse vedle jejich n´azvu. Na konci seznamu 48
sekc´ı dan´eho modulu je moˇznost pˇridat existuj´ıc´ı sekci v´ ybˇerem ze seznamu a tlaˇc´ıtkem add new section. Pod seznamem vˇsech modul˚ u je ˇr´adek umoˇzn ˇuj´ıc´ı pˇrid´an´ı nov´eho modulu. Po zad´an´ı n´azv˚ u a jedn´e sekce, kterou bude obsahovat se vytvoˇr´ı stisknut´ım tlaˇc´ıtka add new module.
Obr´azek 6.5: Editace sekce MAIN Ve spodn´ı polovinˇe je tabulka informuj´ıc´ı o sekci ALIASES. Je rozdˇelena do svou sloupc˚ u. V lev´e polovinˇe je seznam aktivn´ıch alias˚ u (tzn. kter´e jsou pouˇzity v sekci MAIN). Po stisknut´ı tlaˇc´ıtka Disable jsou vˇsechny aliasy, kter´e byly zaˇskrtnuty pˇresunuty do neaktivn´ıch. V prav´e polovinˇe je seznam neaktivn´ıch alias˚ u. Po stisknut´ı tlaˇc´ıtka Enable jsou vˇsechny aliasy, kter´e byly zaˇskrtnuty pˇresunuty do aktivn´ıch.
6.3.4
Aliases
V t´eto ˇc´asti je moˇzn´e upravovat sekci ALIASES z konfiguraˇcn´ıho souboru.
49
Obr´azek 6.6: Editace sekce ALIASES Kaˇzd´ y alias je zah´ajen odr´aˇzkou a ukonˇcen horizont´aln´ı oddˇelovac´ı ˇc´arou. Vedle n´azvu je trojice ikon. Prvn´ı informuje o stavu aliasu. Zelen´ y krouˇzek oznaˇcuje aktivn´ı alias, ˇcerven´ y neaktivn´ı. Druh´a ikona umoˇzn ˇuje aktivaci nebo deaktivaci aliasu a tˇret´ı ikona koˇse provede zruˇsen´ı aliasu. Pod n´azvem je uveden´ y seznam modul˚ u, kter´e alias nahrazuje v sekci MAIN. Vedle kaˇzd´eho n´azvu modulu je ikona koˇse pro zruˇsen´ı modulu. U kaˇzd´eho modulu je lok´aln´ı seznam sekc´ı (stejn´ y jako u modul˚ u v sekci MAIN). Pokud je uvedena v´ıce neˇz jedna sekce, je u kaˇzd´e zobrazena ikona koˇse pro zruˇsen´ı pˇr´ısluˇsn´e sekce. Na konci seznamu modul˚ u je u kaˇzd´eho aliasu je pˇrid´an´ı nov´e sekce do aliasu. Pokud je sekce pˇrid´av´ana do uˇz existuj´ıc´ıho modulu, pˇrid´a se do seznamu dan´eho modulu. Pokud modul neexistuje, nejdˇr´ıve se vytvoˇr´ı a pak je k nˇemu jako jedin´a poloˇzka vloˇzena nov´a sekce. Sekce se pˇrid´a po stisknut´ı tlaˇc´ıtka add. Pod seznamem vˇsech alias˚ u je ˇca´st umoˇzn ˇuj´ıc´ı pˇrid´an´ı nov´eho aliasu. Pro vytvoˇren´ı je nutn´e zadat n´azev, modul a sekci a stisknout tlaˇc´ıtko add.
6.3.5
Sekce
Na u ´vodn´ı str´ance je zobrazen seznam vˇsech sekc´ı v konfiguraˇcn´ım souboru. Sekce, kter´e nejsou uvedeny u ˇz´adn´eho modulu ani aliasu, maj´ı vedle sv´eho n´azvu ikonu koˇse pro jejich zruˇsen´ı. Pod seznamem sekc´ı je ˇca´st umoˇzn ˇuj´ıc´ı pˇrid´an´ı nov´e sekce. Sekce se pˇrid´a po zad´an´ı n´azvu a stisknut´ı tlaˇc´ıtka add new section. Po kliknut´ı na vybranou sekci se ve spodn´ı ˇc´asti str´anky zobraz´ı jednotliv´e promˇenn´e, v´ yˇctov´e typy a tabulky, kter´e vybran´a sekce obsahuje. 50
Kaˇzd´a poloˇzka je zobrazeny v samostatn´em r´ameˇcku. Vedle n´azvu poloˇzky je uveden v z´avorce datov´ y typ. Vedle datov´eho typu je zobrazena ikona koˇse, kter´a umoˇzn ˇuje poloˇzky ze sekce odstranit V´ yˇctov´e typy by mˇely b´ yt definov´any v sekci ENUM, kter´a je pro tyto typy vyhrazen´a, ale mohou b´ yt definov´any i v uˇzivatelsk´ ych sekc´ıch.
Obr´azek 6.7: Editace v´ yˇctov´eho typu V horn´ı ˇca´st´ı v´ yˇctov´eho typu je zobrazen seznam hodnot. Hodnota se mˇen´ı pˇr´ımou editac´ı a n´asledn´ ym stisknut´ım tlaˇc´ıtka change. Pokud je nov´a hodnota pr´azdn´ y ˇretˇezec, je dan´a hodnota z v´ yˇctov´eho typu odstranˇena. Nov´a hodnota se pˇrid´a pomoc´ı editaˇcn´ıho okna Add new a stisknut´ım tlaˇc´ıtka change. V´ıce hodnot se oddˇeluje pomoc´ı ˇc´arky.
Obr´azek 6.8: Editace promˇenn´e 51
Pokud m´a promˇenn´a definovan´ y rozsah hodnot, je hodnota zobrazena jako rozbalovac´ı seznam hodnot. Jej´ı zmˇena se provede v´ ybˇerem jin´e hodnoty a stisknut´ım tlaˇc´ıtka change. Pokud promˇenn´a nem´a definovan´ y rozsah hodnot, je hodnota zobrazena v editaˇcn´ım oknˇe. Zmˇena hodnoty se provede pˇr´ımou editac´ı a stisknut´ım tlaˇc´ıtka change.
Obr´azek 6.9: Editace tabulky Prvn´ı ˇra´dek tabulky zobrazuje n´azvy jednotliv´ ych sloupc˚ u. Pak jsou uvedeny jednotliv´e ˇr´adky s daty. Posledn´ı ˇra´dek je pr´azdn´ y a slouˇz´ı k zad´av´an´ı nov´ ych hodnot. Zmˇena hodnot se prov´ad´ı podobnˇe jako u promˇenn´ ych pˇr´ımou editac´ı nebo v´ ybˇerem nov´e hodnoty a stisknut´ım tlaˇc´ıtka change. Pˇrid´an´ı nov´e hodnoty vyplnˇen´ım spodn´ıho pr´azdn´eho ˇra´dku a stisknut´ım tlaˇc´ıtka change. Na konci str´anky pod vˇsemi poloˇzkami obsaˇzen´ ymi v sekci je tlaˇc´ıtko Add, kter´e umoˇzn ˇuje pˇrid´an´ı nov´ ych poloˇzek. Po stisknut´ı tlaˇc´ıtka se otevˇre nov´a str´anka, na kter´e je trojice r´ameˇck˚ u pro pˇrid´an´ı nov´e promˇenn´e, tabulky a v´ yˇctov´eho typu.
52
Obr´azek 6.10: Pˇrid´an´ı nov´e promˇenn´e Pro pˇrid´an´ı nov´e promˇen´e je nutn´e vyplnit jej´ı datov´ y typ a n´azev. Dalˇs´ı hodnoty, kter´e se mohou vyplnit jsou hodnota, rozsah hodnot, kr´atk´ y koment´aˇr a dlouh´ y koment´aˇr. Nov´a promˇenn´a se pˇrid´a tlaˇc´ıtkem Add.
Obr´azek 6.11: Pˇrid´an´ı nov´e tabulky - prvn´ı krok Pro pˇrid´an´ı nov´e tabulky je nutn´e n´azev a poˇcet sloupc˚ u. Dalˇs´ı hodnota, kter´a se m˚ uˇze vyplnit je koment´aˇr k cel´e tabulce. K dalˇs´ımu kroku vytvoˇren´ı tabulky se postoup´ı stisknut´ım tlaˇc´ıtka Next.
53
Obr´azek 6.12: Pˇrid´an´ı nov´e tabulky - druh´ y krok V druh´em kroku je nutn´e pouze spr´avnˇe nastavit datov´e typy jednotliv´ ych sloupc˚ u. kter´e se vyb´ıraj´ı ze seznamu hodnot na druh´em ˇr´adku. Ostatn´ı parametry jsou voliteln´e. Na prvn´ım ˇra´dku je moˇzn´e zadat n´azvy jednotliv´ ych sloupc˚ u, na tˇret´ım rozsahy hodnot a na ˇctvrt´em koment´aˇre. Tabulka se pˇrid´a stisknut´ım tlaˇc´ıtka Add.
Obr´azek 6.13: Pˇrid´an´ı nov´eho v´ yˇctov´eho typu Pro pˇrid´an´ı nov´eho v´ yˇctov´eho typu je nutn´e vyplnit jeho n´azev a seznam hodnot. Jednotliv´e hodnoty se oddˇeluj´ı ˇc´arkou. V´ yˇctov´ y typ se pˇrid´a stisknut´ım tlaˇc´ıtka Add.
54
Kapitola 7 Podmoduly V t´eto ˇca´sti jsou pops´any jednotliv´e algoritmy, kter´e jsou souˇc´ast´ı Load Balanceru. Popis, jak pˇridat nov´e vlastn´ı podmoduly nebo upravit existuj´ıc´ı, je uveden v program´atorsk´e ˇc´asti dokumentace.
7.1
Knihovna prvn´ı vrstvy
Souˇc´ast´ı Load Balanceru je knihovna lib layer1 main.so s funkc´ı common. Tato funkce se ˇr´ıd´ı podle tabulky pravidel L1 RULES v sekci konfiguraˇcn´ıho souboru. Funkce postupnˇe proch´az´ı tabulkou a hodnoty kaˇzd´eho pravidla porovn´av´a s hodnotami aktu´aln´ıho spojen´ı. Pravidlo se uplatn´ı, pokud vyhovuje ve vˇsech parametrech. Pravidlo tvoˇr´ı 14 sloupc˚ u: n´ azev N´azev pravidla. Pokud se pravidlo uplatn´ı, pˇrid´a se jeho n´azev do datov´eho typu spojen´ı pro jeho identifikaci ve statistik´ach. stats
Pokud je parametr nastaven, budou se informace o spojen´ı odes´ılat do statistik.
protokol Seznam protokol˚ u, na kter´e se pravidlo vztahuje. Pokud nen´ı uveden ˇz´adn´ y protokol, je pravidlo ignorov´ano. c´ılov´ y port Port sluˇzby, na kter´e poslouch´a j´adro (napˇr. 80 pro HTTP). Pokud se rovn´a nule, vyhovuje pravidlu libovoln´ y port dan´ ych protokol˚ u. zdrojov´ y port Port, ze kter´eho se pˇripojil klient. Pokud se rovn´a nule, vyhovuje pravidlu libovoln´ y port. 55
zdrojov´ a IP adresa zdrojov´ a maska adresy Porovn´av´a IP adresu klienta s adresou a maskou v pravidlu. Pravidlo vyhovuje pokud je splnˇena alespoˇ n jedna z n´asleduj´ıc´ıch podm´ınek: • IP adresa je pr´azdn´a nebo se po pˇreveden´ı na ˇc´ıslo rovn´a nule. • Maska je pr´azdn´a nebo se po pˇreveden´ı na ˇc´ıslo rovn´a nule a z´aroveˇ n se zdrojov´a IP adresa rovn´a IP adrese pravidla. ych IP adresou • Zdrojov´a adresa spad´a do rozsahu adres definovan´ a maskou pravidla. knihovna na druh´ e vrstvˇ e funkce na druh´ e vrstvˇ e Dvojice parametr˚ u urˇcuj´ıc´ı funkci a knihovnu na druh´e vrstvˇe. Pokud jsou oba parametry platn´e a pravidlo bude uplatnˇeno, zavol´a se tato funkce po skonˇcen´ı funkce common. knihovna na tˇ ret´ı vrstvˇ e funkce na tˇ ret´ı vrstvˇ e Dvojice parametr˚ u urˇcuj´ıc´ı funkci a knihovnu na tˇret´ı vrstvˇe. Pokud jsou oba parametry platn´e, pravidlo bude uplatnˇeno a na druh´e vrstvˇe nebyla zad´ana platn´a knihovna nebo funkce, zavol´a se tato funkce po skonˇcen´ı funkce common. knihovna na datov´ e vrstvˇ e funkce na datov´ e vrstvˇ e Dvojice parametr˚ u urˇcuj´ıc´ı funkci a knihovnu na datov´e vrstvˇe. Pokud jsou oba parametry platn´e a pravidlo bude uplatnˇeno, je tato funkce vol´ana v j´adru bˇehem prov´adˇen´ı spojen´ı v okamˇziku vol´an´ı funkce podmodulu na datov´e vrstvˇe. servery Identifikace serveru nebo skupiny. Pokud je pravidlo uplatnˇeno, je vˇsem server˚ um, kter´e odpov´ıdaj´ı parametru, nastavena priorita 1. Mezi tˇemito servery se vyb´ır´a na dalˇs´ıch vrstv´ach. Pokud parametru neodpov´ıd´a ˇz´adn´ y server, je pravidlo ignorov´ano.
7.2
Knihovna druh´ e vrstvy
Souˇc´ast´ı Load Balanceru je knihovna http layer2.so s funkc´ı http headers. Parametry nastavuj´ıc´ı tuto funkci jsou v sekci konfiguraˇcn´ıho souboru. Tato funkce je urˇcena pro balancov´an´ı HTTP protokolu 56
na aplikaˇcn´ı vrstvˇe podle standardu RFC2616. Funkce naˇcte HTTP hlaviˇcku a na z´akladˇe jej´ıho obsahu rozdˇeluje spojen´ı. Naˇc´ıt´an´ı HTTP hlaviˇcky je omezeno tˇemito parametry: MAX URI
Maxim´aln´ı d´elka URI.
MAX URI HEADER BODY MAX HEADERS
Maxim´aln´ı d´elka tˇela z´aznamu header.
Maxim´aln´ı poˇcet z´aznam˚ u header.
Z naˇcten´e hlaviˇcky funkce z´ısk´a jednotliv´e ˇc´asti, kter´e je pak moˇzn´e porovn´avat v pravidlech. Pokud nen´ı zad´ano vyhled´av´an´ı v z´aznamech headers, jsou pˇr´ıpustn´e hodnoty parametru ”kde aplikovat” v tabulce pravidel tyto: default Pokud je uveden tento parametr, je pravidlo uplatnˇeno bez ohledu na dalˇs´ı parametry. method
Metoda protokolu (napˇr. GET, POST, . . . ).
request URI HTTP version scheme host
Nezmˇenˇen´a URI, tak jak je pˇrijata v hlaviˇcce. Verze HTTP protokolu, kter´a je uvedena za URI.
Schema poˇzadavku (napˇr. http).
Hostitel (adresa serveru) poˇzadavku. Pokud je v z´aznamech headers z´aznam ”Host”, pouˇzije se jeho adresa.
port
C´ılov´ y port poˇzadavku.
absolute path query
Absolutn´ı cesta poˇzadavku na serveru.
Dotaz poˇzadavku, obsahuje poˇc´ateˇcn´ı otazn´ık.
Pokud v poˇzadavku nen´ı uvedeno schema, dopln´ı se na ”http”. Pokud v poˇzadavku nen´ı uveden port, dopln´ı se na hodnotu 80. Pokud v poˇzadavku nen´ı uvedena absolutn´ı cesta, dopln´ı se na ”/”. Pokud je zad´ano vyhled´av´an´ı v z´aznamech headers, pouˇzije se pro porovn´an´ı takov´ y z´aznam header, kter´ y m´a shodn´ y n´azev s n´azvem v pravidlu. Seznam pravidel je uveden´ y v tabulce HTTP RULES a tvoˇr´ı ji 14 sloupc˚ u: n´ azev N´azev pravidla. Pokud se pravidlo uplatn´ı, pˇrid´a se jeho n´azev do datov´eho typu spojen´ı pro jeho identifikaci ve statistik´ach. 57
stats
Pokud je parametr nastaven, budou se informace o spojen´ı odes´ılat do statistik.
porovn´ avat v headers Pokud je parametr nastaven, hled´a se ˇretˇezec v z´aznamu header urˇcen´ ym parametrem kde aplikovat. Pokud nen´ı nastaven, hled´a se ˇretˇezec v hlaviˇcce. kde aplikovat Pokud je nastaveno hled´an´ı v z´aznamech headers, obsahuje n´azev z´aznamu header. Pokud nen´ı nastaveno hled´an´ı v z´aznamech headers, m˚ uˇze obsahovat jednu z hodnot ”default”, ”method”, ”request URI”, ”HTTP version”, ”scheme”, ”host”, ”port”, ”absolute path”, ”query”. regul´ arn´ı v´ yraz Pokud je parametr nastaven, bere se hledan´ y ˇretˇezec jako regul´arn´ı v´ yraz. case sensitive Pokud je parametr nastaven, bere se hledan´ y ˇretˇezec jako case-sensitive. ˇ ezec, kter´ ˇ retˇ ezec Retˇ y se porovn´av´a s poˇzadavkem podle v´ yˇse zm´ınˇen´ ych pravidel. knihovna na druh´ e vrstvˇ e funkce na druh´ e vrstvˇ e Dvojice parametr˚ u urˇcuj´ıc´ı funkci a knihovnu na druh´e vrstvˇe. Pokud jsou oba parametry platn´e a pravidlo bude uplatnˇeno, zavol´a se tato funkce po skonˇcen´ı funkce http headers. Tato funkce m˚ uˇze b´ yt vol´ana znovu pro jemnˇejˇs´ı ladˇen´ı poˇzadavk˚ u. knihovna na tˇ ret´ı vrstvˇ e funkce na tˇ ret´ı vrstvˇ e Dvojice parametr˚ u urˇcuj´ıc´ı funkci a knihovnu na tˇret´ı vrstvˇe. Pokud jsou oba parametry platn´e, pravidlo bude uplatnˇeno a na druh´e vrstvˇe nebyla zad´ana platn´a knihovna nebo funkce, zavol´a se tato funkce po skonˇcen´ı funkce http headers. knihovna na datov´ e vrstvˇ e funkce na datov´ e vrstvˇ e Dvojice parametr˚ u urˇcuj´ıc´ı funkci a knihovnu na datov´e vrstvˇe. Pokud jsou oba parametry platn´e a pravidlo bude uplatnˇeno, je tato funkce vol´ana v j´adru bˇehem prov´adˇen´ı spojen´ı v okamˇziku vol´an´ı funkce podmodulu na datov´e vrstvˇe.
58
servery Identifikace serveru nebo skupiny. Pokud je pravidlo uplatnˇeno, je vˇsem server˚ um, kter´e odpov´ıdaj´ı parametru nastavena priorita 1. Mezi tˇemito servery se vyb´ır´a na dalˇs´ıch vrstv´ach. Pokud parametru neodpov´ıd´a ˇz´adn´ y server, je pravidlo ignorov´ano. Pokud je uplatnˇeno pravidlo, ponech´a se nastaven´a priorita u tˇech server˚ u, kter´e vyhovuj´ı pravidlu. U ostatn´ıch se nastav´ı na nulu. Dalˇs´ı funkc´ı tohoto podmodulu je vyuˇzit´ı cache, kter´a se pouˇzije, pokud je nastaven´a promˇenn´a USE CACHE. Cache je seznam ˇra´dek, kde kaˇzd´ y odpov´ıd´a jednomu hashovac´ımu ˇc´ıslu. Kaˇzd´ y ˇr´adek obsahuje poloˇzky, kter´e maj´ı stejn´e hashovac´ı ˇc´ıslo (kolizn´ı dom´ena). V kaˇzd´e poloˇzce je uloˇzen hashovan´ y ˇretˇezec, id serveru a timestamp. V cache je uloˇzeno ˇc´ıslo serveru, kam bylo naposled pˇreposl´ano spojen´ı. Pˇri dotazu podmodulu se postupnˇe projde urˇcen´a kolizn´ı dom´ena urˇcen´a hashovac´ım ˇc´ıslem a pokud se v n´ı nalezne pˇr´ısluˇsn´ y z´aznam, vr´at´ı funkce ˇc´ıslo serveru a timestamp. Parametr CACHE SIZE urˇcuje poˇcet ˇr´adk˚ u cache, parametr CACHE DOMAIN SIZE urˇcuje poˇcet z´aznam˚ u v kolizn´ı dom´enˇe a parametr CACHE STRING SIZE urˇcuje maxim´aln´ı d´elku hashovan´eho ˇretˇezce. Pro pouˇzit´ı cache se vybere ˇretˇezec, kter´ y je urˇcen parametrem CACHE WHERE APPLY. Ten m˚ uˇze obsahovat bud’ jednu z hodnot ”method”, ”request URI”, ”HTTP version”, ”scheme”, ”host”, ”port”, ”absolute path”, ”query”, kter´a urˇcuje, ˇze se jako hashovac´ı ˇretˇezec pouˇzije pˇr´ısluˇsn´a pevnˇe zvolen´a ˇc´ast hlaviˇcky nebo hodnotu ”rule match”, kter´a jako hashovac´ı ˇretˇezec pouˇzije hodnotu, kter´a odpov´ıd´a uplatnˇen´emu pravidlu. Pokud je z cache vr´acen server, je mezi vybran´ ymi servery a z´aznam v cache nen´ı starˇs´ı neˇz CACHE AGE sekund, je k jeho prioritˇe pˇriˇctena hodnota CACHE PRIORITY.
7.3
Knihovny tˇ ret´ı vrstvy
Souˇc´ast´ı Load Balanceru je knihovna static layer3.so, kter´a obsahuje statick´e algoritmy a knihovna dynamic layer3.so, kter´a obsahuje dynamick´e algoritmy algoritmy, kter´e pro rozhodov´an´ı pouˇz´ıvaj´ı dotazov´an´ı do statistik.
59
7.3.1
Statick´ e algoritmy
Basic round robin Z´akladn´ı algoritmus, kter´ y si pamatuje posledn´ı vybran´ y server a prioritu nastav´ı server˚ um takov´ ym zp˚ usobem, aby n´asleduj´ıc´ımu serveru, kter´ y m´a prioritu vˇetˇs´ı neˇz nula, nastavil nejvˇetˇs´ı prioritu a pak ji postupnˇe sniˇzuje. Algoritmus nen´ı vhodn´ y pro takovou konfiguraci farmy server˚ u, kde se pˇrekr´ yv´a nˇejak´a skupina server˚ u. Pokud jsou vybr´any vˇsechny servery a jsou v jedn´e skupinˇe, algoritmus servery vyb´ır´a postupnˇe podobnˇe jako DNS-round robin algoritmus. Tento algoritmus je rychl´ y a proto je vhodn´ y jako n´ahrada DNS - round robin algoritmu Random select Algoritmus, kter´ y vybere c´ılov´ y server n´ahodnˇe ze vˇsech server˚ u, kter´e maj´ı prioritu vˇetˇs´ı neˇz nula. Hash IP select ˇ ıslo Algoritmus, kter´ y vybere c´ılov´ y server na z´akladˇe zdrojov´e IP adresy. C´ adresy vydˇel´ı poˇctem server˚ u, kter´e maj´ı prioritu vˇetˇs´ı neˇz nula. Zbytek po dˇelen´ı urˇcuje index mezi tˇemito servery. Self weighted round robin Algoritmus, kter´ y rozˇsiˇruje z´akladn´ı round robin algoritmus na pouˇzit´ı, kdy jsou servery ve v´ıce skupin´ach. Algoritmus si ukl´ad´a poˇcet spojen´ı u kaˇzd´eho serveru. Ze vˇsech server˚ u s prioritou vˇetˇs´ı neˇz nula vybere server s nejmenˇs´ım poˇctem spojen´ı. Pokud je nejmenˇs´ı poˇcet spojen´ı u nˇekolika server˚ u, vybere server s nejmenˇs´ım indexem. Tento algortimus je vhodn´ y pro pouˇzit´ı, kde se nepˇrekr´ yvaj´ı skupiny server˚ u a na kaˇzdou skupinu by se pouˇzil algortimus round robin. Static select first Algoritmus, kter´ y ke sv´emu v´ ypoˇctu vyuˇz´ıv´a statick´ ych vah jednotliv´ ych server˚ u. Pouˇzije se pokud maj´ı servery r˚ uzn´ y v´ ykon. Jejich v´ ykon se jako statick´a v´aha nastav´ı v konfiguraˇcn´ım souboru. Algoritmus zajiˇst’uje aby byla z´atˇeˇz rovnomˇernˇe podle statick´ ych vah. Algoritmus je pouˇziteln´ y, ikdyˇz se skupiny server˚ u pˇrekr´ yvaj´ı. U kaˇzd´eho serveru si funkce ukl´ad´a poˇcet spojen´ı smˇerovan´ ych na tento server. Bˇehem v´ ypoˇctu se pro kaˇzd´ y server, kter´ y m´a prioritu vˇetˇs´ı neˇz 60
weight nula, spoˇc´ıt´a aktu´aln´ı v´aha jako actual = static weight∗priority , kde weight je poˇcet spojen´ı uskuteˇcnˇen´ ych uˇz na dan´ y server, static weight je statick´a v´aha serveru z konfiguraˇcn´ıho souboru a priority je priorita serveru z pˇredchoz´ıch podmodul˚ u. Aktu´aln´ı v´aha vyjadˇruje v´ahu server˚ u po zapoˇc´ıt´an´ı statick´e v´ahy serveru a jeho priorit (preferenc´ı) z pˇredchoz´ıch podmodul˚ u. T´ım se smaˇze rozd´ıl mezi v´ ykonnost´ı server˚ u a algoritmus se pak snaˇz´ı, aby ta to v´aha byla u vˇsech server˚ u stejn´a. Proto vybere server s nejmenˇs´ı aktu´aln´ı v´ahou.
7.3.2
Dynamick´ e algoritmy
Dynamick´e algoritmy pouˇz´ıvaj´ı ke sv´emu rozhodov´an´ı data uloˇzen´a ve statistick´em modulu. Uˇzivatel m´a moˇznost nastavit, jestli chce tyto dotazy prov´adˇet pˇri zpracov´an´ı kaˇzd´eho poˇzadavku nebo staˇc´ı informace z´ıskan´e dotazem obnovit po urˇcit´e dobˇe. To lze prov´est nastaven´ım hodnot v tabulce L3 QUERY RATES v konfiguraˇcn´ım souboru v sekci : pravidlo N´azev pravidla z tabulky L1 RULES, pro kter´e zadan´e hodnoty pouˇz´ıt. Je-li tato hodnota pr´azdn´a, pouˇzij´ı se zadan´e hodnoty pro vˇsechna pravidla, kter´e v t´eto tabulce nejsou obsaˇzena, jinak se pro vˇsechna takov´a pravidla prov´adˇej´ı dotazy pˇri zpracov´an´ı kaˇzd´eho poˇzadavku. poˇ cet poˇ zadavk˚ u Nov´ y dotaz pro aktualizaci hodnot je poloˇzen vˇzdy po zpracov´an´ı dan´eho poˇctu poˇzadavk˚ u. doba mezi dotazy Nov´ y dotaz pro aktualizaci hodnot je poloˇzen vˇzdy po dan´e dobˇe uveden´e v milisekund´ach. Minimal server response Tento algoritmus tˇr´ıd´ı vybranou skupinu server˚ u na z´akladˇe jejich maxim´aln´ı odezvy. Nejvyˇsˇs´ı prioritu dostane pˇriˇrazenou ten server, jehoˇz maxim´aln´ı odezva za posledn´ı vteˇrinu je nejniˇzˇs´ı. Minimal average server response Tento algoritmus tˇr´ıd´ı vybranou skupinu server˚ u na z´akladˇe jejich pr˚ umˇern´e odezvy. Nejvyˇsˇs´ı prioritu dostane pˇriˇrazenou ten server, jehoˇz pr˚ umˇern´a odezva za posledn´ı vteˇrinu je nejniˇzˇs´ı. Vylepˇsuje tak pˇredchoz´ı algoritmus v pˇr´ıpadˇe, ˇze odezva u nˇekter´eho ze server˚ u m´a vˇetˇs´ı rozptyl neˇz u ostatn´ıch. 61
Least open connections Tento algoritmus tˇr´ıd´ı vybranou skupinu server˚ u na z´akladˇe poˇctu jejich aktu´alnˇe otevˇren´ ych spojen´ı. Nejvyˇsˇs´ı prioritu dostane pˇriˇrazenou ten server, jenˇz m´a aktu´alnˇe nejm´enˇe otevˇren´ ych spojen´ı. Weighted least open connections Vylepˇsuje pˇredchoz´ı algoritmus o moˇznost nastaven´ı r˚ uzn´eho v´ ykonu jednotliv´ ym server˚ um. Tento algoritmus tˇr´ıd´ı vybranou skupinu server˚ u na z´akladˇe poˇctu jejich aktu´alnˇe otevˇren´ ych spojen´ı a na z´akladˇe statick´e v´ahy pˇriˇrazen´e dan´emu serveru. Nejvyˇsˇs´ı prioritu dostane pˇriˇrazenou ten server, jenˇz m´a minim´aln´ı pomˇer poˇctu aktu´alnˇe otevˇren´ ych spojen´ı ku statick´e v´aze. Weighted minimal sessions count Tento algoritmus tˇr´ıd´ı vybranou skupinu server˚ u na z´akladˇe poˇctu nov´ ych spojen´ı otevˇren´ ych za posledn´ı sekundu a na z´akladˇe statick´e v´ahy pˇriˇrazen´e dan´emu serveru. Nejvyˇsˇs´ı prioritu dostane pˇriˇrazenou ten server, jenˇz m´a minim´aln´ı pomˇer poˇctu nov´ ych spojen´ı otevˇren´ ych za posledn´ı sekundu ku statick´e v´aze. Weighted minimal flow from server Tento algoritmus tˇr´ıd´ı vybranou skupinu server˚ u na z´akladˇe velikosti toku dat od serveru za posledn´ı sekundu a na z´akladˇe statick´e v´ahy pˇriˇrazen´e dan´emu serveru. Nejvyˇsˇs´ı prioritu dostane pˇriˇrazenou ten server, jenˇz m´a minim´aln´ı pomˇer velikosti toku dat od serveru za posledn´ı sekundu ku statick´e v´aze. Predictive minimal server response Tento algoritmus tˇr´ıd´ı vybranou skupinu server˚ u na z´akladˇe posledn´ıho ˇ ım v´ıc se zmenˇsuje maxim´aln´ı odezva v´ yvoje jejich maxim´aln´ı odezvy. C´ oproti jej´ım pˇredchoz´ım hodnot´am, t´ım v´ıc poˇzadavk˚ u m˚ uˇze b´ yt na server smˇerov´ano a t´ım vˇetˇs´ı by tedy mˇel m´ıt prioritu. Servery jsou porovn´av´any ∗ o5 , kde o10 je maxim´aln´ı odezva z posledn´ıch deseti na z´akladˇe ˇc´ısla c = o10 o5 o1 odezev serveru, o5 je maxim´aln´ı odezva z posledn´ıch pˇeti odezev serveru a o1 je posledn´ı odezva serveru. Nejvyˇsˇs´ı prioritu dostane pˇriˇrazenou ten server, u kter´eho je v´ ysledn´e ˇc´ıslo c nejvˇetˇs´ı.
62
Predictive minimal flow from server Tento algoritmus tˇr´ıd´ı vybranou skupinu server˚ u na z´akladˇe posledn´ıho ˇ v´ yvoje velikosti datov´eho toku od serveru. C´ım v´ıc se zmenˇsuje velikost datov´eho toku od serveru oproti jeho pˇredchoz´ım hodnot´am, t´ım v´ıc poˇzadavk˚ u m˚ uˇze b´ yt na server smˇerov´ano a t´ım vˇetˇs´ı by tedy mˇel m´ıt prioritu. Servery ∗ t5 , kde t10 je pr˚ umˇern´ y datov´ y tok jsou porovn´av´any na z´akladˇe ˇc´ısla c = t10 t5 t1 od serveru za posledn´ıch deset sekund, t5 je pr˚ umˇern´ y datov´ y tok od serveru za posledn´ıch pˇet sekund a t1 je datov´ y tok od serveru za posledn´ı sekundu. Nejvyˇsˇs´ı prioritu dostane pˇriˇrazenou ten server, u kter´eho je v´ ysledn´e ˇc´ıslo c nejvˇetˇs´ı. Predictive minimal sessions count per second Tento algoritmus tˇr´ıd´ı vybranou skupinu server˚ u na z´akladˇe posledn´ıho ˇ ım v´ıc se zmenˇsuje poˇcet v´ yvoje poˇctu jejich spojen´ı za sekundu. C´ uskuteˇcnˇen´ ych spojen´ı za sekundu oproti pˇredchoz´ım poˇct˚ um, t´ım v´ıc poˇzadavk˚ u m˚ uˇze b´ yt na server smˇerov´ano a t´ım vˇetˇs´ı by tedy mˇel m´ıt prioritu. Servery jsou porovn´av´any na z´akladˇe ˇc´ısla c = s10 ∗ s5 , kde s10 je s5 s1 pr˚ umˇern´ y poˇcet uskuteˇcnˇen´ ych spojen´ı za sekundu v pr˚ ubˇehu posledn´ıch deseti sekund, s5 je pr˚ umˇern´ y poˇcet uskuteˇcnˇen´ ych spojen´ı za sekundu v pr˚ ubˇehu posledn´ıch pˇeti sekund a s1 je poˇcet uskuteˇcnˇen´ ych spojen´ı za posledn´ı sekundu. Nejvyˇsˇs´ı prioritu dostane pˇriˇrazenou ten server, u kter´eho je v´ ysledn´e ˇc´ıslo c nejvˇetˇs´ı.
7.4
Knihovna na datov´ e vrstvˇ e
Souˇc´ast´ı Load Balanceru je knihovna data layer.so s funkc´ı ftp. Tato funkce se nastav´ı jako podmodul na datov´e vrstvˇe bˇehem vol´an´ı podmodul˚ u na prvn´ı aˇz tˇret´ı vrstvˇe (typicky na prvn´ı vrstvˇe). J´adro pak funkci vol´a v urˇcen´ ych okamˇzic´ıch pr˚ ubˇehu spojen´ı. Bˇehem vol´an´ı funkce upravuje pˇr´ıchoz´ı i odchoz´ı data a otev´ır´a pˇr´ısluˇsn´a pomocn´a datov´a spojen´ı, aby protokol ftp fungoval v aktivn´ım i pasivn´ım reˇzimu.
63
Dodatek A Testy A.1
Testy funkˇ cnosti
Testy funkˇcnosti jsou urˇceny k otestov´an´ı vˇsech funkc´ı Load Balanceru a proto je staˇc´ı zkouˇset kr´atkodobˇe. Protoˇze nˇekter´e ˇca´sti, kter´e nejsou nutn´e pro z´akladn´ı bˇeh Load Balanceru, mohou bˇeh zpomalovat nebo nemus´ı b´ yt dostateˇcnˇe stabiln´ı, je tˇreba vyzkouˇset bˇeh Load Balanceru bez tˇechto ˇc´ast´ı. Minim´ aln´ı z´ aklad pro bˇ eh. Odzkouˇsen´ı t´eto ˇc´asti je nejd˚ uleˇzitˇejˇs´ı a proto mu bylo vˇenov´ano nejv´ıce ˇcasu. Z hlediska funkˇcnosti se jedn´a o testov´an´ı nastaven´ı port˚ u pro poslouch´an´ı, nastaven´ı server˚ u a samotn´e pˇrepojov´an´ı. Pro protokoly UDP a TCP je rozd´ıln´a implementace a obˇe varianty byly peˇclivˇe testov´any. Tato z´akladn´ı ˇc´ast je spolehliv´a a stabiln´ı a byla nejv´ıce testov´ana i v dalˇs´ıch testech. Management vl´ aken je neoddˇelitelnou souˇca´st´ı z´akladu j´adra. Pokud si uˇzivatel nepˇreje, aby byla vl´akna vyuˇz´ıv´ana, je moˇzn´e nastavit pˇr´ısluˇsn´e parametry v konfiguraˇcn´ım souboru. Testov´an´ı se zamˇeˇrovalo pˇredevˇs´ım na ˇcast´e zvyˇsov´an´ı a sniˇzov´an´ı poˇctu vl´aken a stabilitu bˇehu bˇehem tˇechto zmˇen. Autorestart Funkce kter´a umoˇzn ˇuje automatickou detekci ”zatuhnut´ı” j´adra a statistik a jejich okamˇzit´emu automatick´emu restartov´an´ı. Knihovny pro v´ ybˇ er serveru jsou dynamicky linkovan´e knihovny, kter´e nejsou souˇc´ast´ı j´adra a uˇzivatel m´a moˇznost pˇrid´avat si svoje vlastn´ı knihovny. Z hlediska j´adra se testovalo bezprobl´emov´e naˇc´ıt´an´ı knihoven, jejich zaˇrazen´ı za bˇehu a vol´an´ı bˇehem rozhodov´an´ı o v´ ybˇeru serveru.
64
Knihovny pro ˇ r´ızen´ı spojen´ı jsou jsou dynamicky linkovan´e knihovny, kter´e nejsou souˇca´st´ı j´adra a uˇzivatel m´a moˇznost pˇrid´avat si svoje vlastn´ı knihovny. Z hlediska j´adra se testovalo bezprobl´emov´e naˇc´ıt´an´ı knihoven, jejich zaˇrazen´ı za bˇehu a jejich spr´avn´e vol´an´ı pˇri prov´adˇen´ı spojen´ı. J´adro tˇemto knihovn´am poskytuje prostˇredky na vytv´aˇren´ı pomocn´ ych datov´ ych spojen´ı, jejich management a zav´ır´an´ı. D´ale se testovalo spr´avn´e pˇred´av´an´ı dat tˇemto knihovn´am. Odes´ıl´ an´ı dat do statistik. Data se odes´ılaj´ı o vˇetˇsinˇe ud´alost´ı, kter´e se v j´adˇre dˇej´ı pˇri pr˚ ubˇehu spojen´ı a z´aroveˇ n jsou uvedena v konfiguraˇcn´ım souboru, ˇze se maj´ı odeslat. Testov´any byly vˇsechny kombinace odes´ıl´an´ı dat. Ping je samostatnˇe bˇeˇz´ıc´ı vl´akno, kter´e pˇr´ımo spolupracuje s ˇca´st´ı pro v´ ybˇer server˚ u. Je implementov´an ping pro protokoly HTTP, MYSQL, FTP, POP, IMAP a SMTP. Statick´ e knihovny j´ adra jsou urˇceny pro podporu uˇzivatelsk´ ych dynamick´ ych knihoven. Dovoluj´ı uˇzivatelsk´ ym knihovn´am vyuˇz´ıt nˇekter´e funkce j´adra. Bylo vyzkouˇseno bezprobl´emov´e pˇred´av´an´ı parametr˚ ua vol´an´ı funkc´ı. Uˇ zivatelsk´ e knihovny Souˇca´st´ı Load Balanceru je nˇekolik uˇzivatelsk´ ych knihoven, kter´e obsahuj´ı z´akladn´ı algoritmy. Dotazy do datab´ aze Uˇzivatelsk´e knihovny maj´ı moˇznost se dotazovat na data z datab´aze. Testov´ano bylo pˇredevˇs´ım nav´az´an´ı spojen´ı se statistick´ ym modulem a rychl´ ym vyˇr´ızen´ım poˇzadavku. Konfiguraˇ cn´ı knihovna zpracov´av´a konfiguraˇcn´ı soubor. Je odzkouˇsena na kontrolu syntaktick´ ych i s´emantick´ ych chyb a na spolupr´aci s ostatn´ımi ˇca´stmi Load Balanceru. ych od j´adra statistick´ ym modulem. Testov´ano spr´avn´e Ukl´ ad´ an´ı dat pˇrijat´ ukl´ad´an´ı dat jak do bufferu v pamˇeti, tak i jejich agregace a ukl´ad´an´ı do datab´aze. Odpojen´ı datab´ aze Testov´ano chov´an´ı statistick´eho modulu po ztracen´ı spojen´ı s datab´az´ı, kdy statistick´ y modul zaˇcne data ukl´adat pouze do pamˇeti. Zpracov´ an´ı dotaz˚ u od modulu j´adra a webov´eho rozhran´ı.
65
Webov´ e rozhran´ı je nav´az´ano na statistick´ y modul a konfiguraˇcn´ı knihovnu. Je otestov´ana komunikace se statistick´ ym modulem a nav´az´an´ı na funkce konfiguraˇcn´ı knihovny. Je testov´ano zas´ıl´an´ı sign´al˚ u modulu init.
A.2
Testy stability a z´ atˇ eˇ zov´ e testy
Tyto testy byly prov´adˇeny v poˇc´ıtaˇcov´e laboratoˇr´ı labTS v Tr´oji MFF. K testov´an´ı bylo pouˇzito deset poˇc´ıtaˇc˚ u. Jeden byl pouˇzit jako Load Balancer, obsahoval dvˇe s´ıt’ov´a rozhran´ı, kde jedno bylo pˇripojeno do pods´ıtˇe klient˚ ua druh´e do s´ıtˇe server˚ u. Klienty tvoˇrily ˇctyˇri poˇc´ıtaˇce, servery pˇet poˇc´ıtaˇc˚ u. Konfigurace poˇc´ıtaˇc˚ u: • procesor AMD Athlon XP 2500+ • pamˇet’ Kingston 512 MB • pevn´ y disk Maxtor, 80 GB • s´ıt’ov´e rozhran´ı 100Mbit/s V t´eto konfiguraci se nejdˇr´ıv testovaly nˇekter´e funkˇcnosti, kter´e neˇsly otestovat dˇr´ıve. • Spuˇstˇen´ı, restartov´an´ı a ukonˇcen´ı Load Balanceru s um´ıstˇen´ım r˚ uzn´ ych modul˚ u na r˚ uzn´ ych poˇc´ıtaˇc´ıch. • Testov´an´ı v´ ypadku spojen´ı vytahov´an´ım kabelu a n´asledn´e spojen´ı u jednotliv´ ych modul˚ u, dodateˇcn´e doruˇcen´ı pˇr´ıkazu restartu modul˚ um po v´ ypadku spojen´ı. • Testov´an´ı v´ ypadku spojen´ı se servery pˇri ˇz´adn´e ˇci minim´aln´ı ztr´atˇe spojen´ı a n´asledn´em zaˇrazen´ı serveru po obnovˇe spojen´ı. Dalˇs´ı testy byly provedeny se zamˇeˇren´ım na maxim´aln´ı dosaˇzitelnou z´atˇeˇz. Testov´any byly protokoly ftp a http a testy byly provedeny opakovanˇe Pro testov´an´ı ftp byly zvoleny dva testy. Jeden na pˇrenos velk´ ych soubor˚ u a druh´ y na pˇrenos velk´eho poˇctu mal´ ych soubor˚ u. V prv´ım testu bylo opakovanˇe pˇreneseno nˇekolik soubor˚ u o velikostech 100-200MB. Pˇri tomto testu byla dosaˇzena stejn´a rychlost pˇrenosu ( 11MB/s) jako pˇri pˇr´ım´em propojen´ı klienta se serverem. V druh´em testu bylo opakovanˇe pˇreneseno 10000 soubor˚ u o velikosti 500B. Pˇrenos soubor˚ u prob´ıhal poloviˇcn´ı rychlost´ı neˇz u pˇr´ım´eho propojen´ı. To 66
je zp˚ usobeno protokolem ftp, kter´ y pro kaˇzd´ y soubor otv´ır´a nov´e spojen´ı. Protoˇze velikost soubor˚ u je zanedbateln´a a pˇri pˇrenosu pˇres Load Balanceru je nutn´e otevˇr´ıt dvojn´asobn´ y poˇcet spojen´ı, mus´ı i ˇcas b´ yt dvojn´asobn´ y. Pˇri testech protokolu http byl vyuˇzit server apache a klient httperf, kter´ y umoˇzn ˇuje generovat pˇredem stanoven´ y objem poˇzadavk˚ u. Testy byly zamˇeˇreny na maxim´aln´ı dosaˇziteln´ y v´ ykon a ˇr´adovˇe trvaly v jednotk´ach minut. Dotazy prob´ıhaly na dva soubory o velikosti 1.4KB. RR bude d´ale oznaˇcovat request rate / sec (odchoz´ı frekvence klienta) a T bude oznaˇcovat d´elku testu v sec. 1. Pˇrepojov´an´ı z jednoho klienta mezi tˇri servery. RR=2500, T=200. Pˇri testu byly pˇrepojeny vˇsechny spojen´ı bez chyby. ypadky server˚ u. 2. Pˇrepojov´an´ı z jednoho klienta mezi tˇri servery s v´ RR=2500, T=200. Pˇri vytaˇzen´ı kabelu ze serveru doˇslo k v´ ypadku jednotek spojen´ı a pot´e se spojen´ı rozloˇzila mezi ostatn´ı servery. Po zapojen´ı serveru zpˇet do s´ıtˇe byl opˇet zapojen do vyˇrizov´an´ı poˇzadavk˚ u. 3. Pˇrepojov´an´ı z jednoho klienta mezi tˇri servery s v´ ypadkem vˇsech server˚ u. RR=2500. Po zapojen´ı alespoˇ n jedno serveru a jeho detekci ping modulem okamˇzit´ y n´abˇeh vˇsech spojen´ı. 4. Pˇrepojov´an´ı z jednoho klienta mezi tˇri servery. RR=3500, T=400. Load Balancer byl schopn´ y pˇrepojovat 3050 +- 60 spojen´ı / sec. 5. Pˇrepojov´an´ı z jednoho klienta mezi tˇri servery. RR=5000, T=400. Load Balancer byl schopn´ y pˇrepojovat 2200 +- 50 spojen´ı / sec. 6. Pˇrepojen´ı poˇzadavku http na soubor o velikosti ¿100MB. Pˇrenos prob´ıhal rychlost´ı 11MB/sec a odpov´ıdal rychlosti pˇr´ım´eho dotazu na server. N´asleduj´ıc´ı dva testy byly zamˇeˇreny na stabilitu Load Balanceru. Souˇcty odchoz´ıch poˇzadavk˚ u od klient˚ u a pˇr´ıchoz´ıch poˇct˚ u na servery nemus´ı souhlasit, protoˇze mezi poˇzadavky u server˚ u jsou zapoˇc´ıt´av´any i poˇzadavky ping funkce. u na pˇet server˚ u. Klienti 1 a 2 se 1. Prvn´ı test prob´ıhal ze ˇctyˇr klient˚ dotazovali na port 11230 a klienti 3 a 4 na port 11231. Dotazy z portu 11230 se rozdˇelovaly mezi servery 1, 2 a 3. Dotazy z portu 11231 se rozdˇelovaly mezi servery 3, 4 a 5. Load Balancer poˇzadavky rozdˇeloval pomoc´ı algoritmu static select first mezi pˇet server˚ u s tˇemito vahami: • server 1 - 25 67
• server 2 - 275 • server 3 - 100 • server 4 - 100 • server 5 - 200 Kaˇzd´ y klient odes´ılal poˇzadavky rychlost´ı 250 poˇzadavk˚ u / sec. Doruˇceny byly vˇsechny poˇzadavky. Odeslan´e poˇzadavky z klient˚ u: • klient 1 - 13 539 502 • klient 2 - 13 540 330 • klient 3 - 13 540 942 • klient 4 - 13 541 562 Pˇrijat´e poˇzadavky server˚ u: • server 1 - 1 931 842 • server 2 - 21 250 262 • server 3 - 7 728 141 • server 4 - 7 750 697 • server 5 - 15 501 394 y test prob´ıhal ze tˇr´ı klient˚ u na tˇri servery. Klienti 1 a 2 se dota2. Druh´ zovali na port 11230 a klient 3 na port 11231. Dotazy z portu 11230 se rozdˇelovaly mezi servery 1 a 2. Dotazy z portu 11231 se rozdˇelovaly mezi servery 2 a 3. Load Balancer poˇzadavky rozdˇeloval pomoc´ı algoritmu static select first mezi tˇri servery s tˇemito vahami: • server 1 - 50 • server 2 - 50 • server 3 - 150 Klient 1 a 2 odeslal 10 mil. poˇzadavk˚ u rychlost´ı 250 poˇzadavk˚ u / sec. Klient 3 odeslal 20 mil. poˇzadavk˚ u rychlost´ı 500 poˇzadavk˚ u / sec. Na klientech byl nastaven timeout 5 sec. Doruˇceny byly vˇsechny poˇzadavky s odpov´ıdaj´ıc´ım rozloˇzen´ım. Pˇrestoˇze se nˇekolikahodinov´ y test m˚ uˇze zd´at jako pomˇernˇe kr´atk´ y, bylo pˇri nˇem dosaˇzeno nˇekolikan´asobnˇe vyˇsˇs´ıho poˇctu pˇrepojen´ ych poˇzadavk˚ u neˇz nast´av´a bˇeˇznˇe v praxi. Na poˇcet pˇreposlan´ ych poˇzadavk˚ u tak tyto testy odpov´ıdaj´ı nˇekolika dn˚ um bˇeˇzn´eho provozu bˇeˇzn´ ych serverov´ ych farem. 68
A.3
Testy ve WAN
C´ılem tˇechto test˚ u bylo doc´ılit moˇzn´e re´aln´e rozm´ıstˇen´ı jednotliv´ ych ˇc´ast´ı. Z d˚ uvod˚ u uveden´ ych v u ´vodn´ı kapitole byl cel´ y Load Balancer um´ıstˇen na jedn´e lok´aln´ı s´ıti s pˇrenosovou rychlost´ı 100Mbit / sec. V jednotliv´ ych konfigurac´ıch byly opakovanˇe provedeny n´asleduj´ıc´ı typy test˚ u: u a soubor˚ u na ftp • Nav´az´an´ı a proch´azen´ı, vytv´aˇren´ı a maz´an´ı adres´aˇr˚ serveru. • Pˇrenos ˇra´dovˇe stovek soubor˚ u o velikosti 1KB pomoc´ı protokolu ftp. • Pˇrenos velk´eho souboru (velikost z´aleˇzela na rychlosti nejpomalejˇs´ıho spojen´ı, aby byl test u ´nosn´ y a trval maxim´alnˇe des´ıtky minut) pomoc´ı protokolu ftp. • Pˇrenos adres´aˇrov´e struktury s r˚ uznˇe velk´ ymi soubory (opˇet aby celkov´a doba testu nepˇres´ahla des´ıtky minut) pomoc´ı protokolu ftp. • Dotazov´an´ı serveru http protokolu na ˇr´adovˇe stovky soubor˚ u o velikosti 1KB. • Pˇrenos velk´eho souboru (velikost z´aleˇzela na rychlosti nejpomalejˇs´ıho spojen´ı, aby byl test u ´nosn´ y a trval maxim´alnˇe des´ıtky minut) pomoc´ı protokolu http. Pro simulaci re´aln´ ych podm´ınek jsme vyuˇz´ıvali r˚ uzn´e druhy spojen´ı o r˚ uzn´ ych rychlostech: LAN Rozm´ıstˇen´ı v r´amci jedn´e lok´aln´ı s´ıtˇe s pˇrenosovou rychlost´ı 100Mbit / sec. PASNET Praˇzsk´a akademick´a WAN s´ıt’ s pˇrenosovou rychlost´ı 100/1000 Mbit / sec. XDSL Pˇripojen´ı pomoc´ı DSL firmy Nextra/TeleNor s pˇrenosovou rychlost´ı 512Kbit / sec download a 128Kbit / sec upload. Bezdr´ atov´ e spojen´ı - MW Pˇripojen´ı pomoc´ı mikrovlnn´eho spojen´ı s pˇrenosovou rychlost´ı 64Kbit / sec. GPRS Pˇripojen´ı pomoc´ı GSM telefonu s pˇrenosovou rychlost´ı 57Kbit/sec download a 28Kbit/sec upload.
69
S v´ yˇse uveden´ ymi moˇznostmi konektivity jsme vyzkouˇseli n´asleduj´ıc´ı kombinace. Load Balancer - LB, Servery - S, Klienti - K: • LB<->S - LAN, LB<->K - LAN • LB<->S - LAN, LB<->K - PASNET • LB<->S - LAN, LB<->K - XDSL • LB<->S - LAN, LB<->K - MW • LB<->S - LAN, LB<->K - GPRS • LB<->S - PASNET, LB<->K - PASNET • LB<->S - PASNET, LB<->K - XDSL • LB<->S - PASNET, LB<->K - MW • LB<->S - PASNET, LB<->K - GPRS • LB<->S - XDSL, LB<->K - PASNET • LB<->S - XDSL, LB<->K - XDSL • LB<->S - XDSL, LB<->K - MW • LB<->S - XDSL, LB<->K - GPRS Bˇehem vˇsech test˚ u nedoˇslo k ˇza´dn´emu z´avaˇznˇejˇs´ımu v´ ypadku. Pˇri pˇrehlcen´ı spojen´ı mezi servery a Load Balancerem doˇslo k vyˇr´ızen´ı jen ˇca´sti poˇzadavk˚ u. Pˇreruˇsen´ı spojen´ı zp˚ usoben´e specifiky dan´eho typu spojen´ı (v´ ypadky spojen´ı GPRS) byly bud’ vyˇr´ızeny pozdˇeji pokud nevyprˇsely timeouty dan´ ych protokol˚ u nebo byly ztraceny a bylo ponech´ano na vyˇsˇs´ıch vrstv´ach pokus o opˇetovn´e nav´az´an´ı spojen´ı.
A.4
Praktick´ y test
Praktick´ y test byl proveden ve spoleˇcnosti Czech OnLine. K testu n´am byly zap˚ ujˇceny ˇctyˇri poˇc´ıtaˇce. Jeden jsme vyuˇzili jako Load Balancer s bˇeˇz´ıc´ımi moduly initu, j´adra a statistik. Zbyl´e tˇri poˇc´ıtaˇce se vyuˇzily jako klienti. Pro testov´an´ı n´am byly zap˚ ujˇceny logy jedn´e hodiny re´aln´e z´atˇeˇze ze ˇctyˇr server˚ u ze ˇspiˇcky. Z tˇechto log˚ u jsme z´ıskali informace o dotazech na jednotliv´e servery. Tyto dotazy jsme pak pˇrehr´avali pomoc´ı nˇekolika soubˇeˇznˇe bˇeˇz´ıc´ıch klient˚ u na kaˇzd´em klientsk´em poˇc´ıtaˇci. Poˇcet simulovan´ ych klient˚ u 70
se pohyboval v rozmez´ı 50 aˇz 250. Poˇzadavky byly generov´any programem siege, kter´ y je vyb´ıral n´ahodnˇe. Aby nedoˇslo k pˇret´ıˇzen´ı server˚ u, byly testy prov´adˇeny v brzk´ ych rann´ıch hodin´ach. Z bezpeˇcnostn´ıch d˚ uvod˚ u se provedl postupn´ y n´abˇeh trafficu, aby nedoˇslo k neoˇcek´avan´emu pˇret´ıˇzen´ı server˚ u. Po u ´vodn´ı z´av´adˇec´ı f´azi se zv´ yˇsil traffic na maxim´aln´ı u ´roveˇ n. Bˇehem testu byl pouˇzit statick´ y algoritmus basic round robin, kter´ y traffic rozkl´ad´a rovnomˇernˇe mezi vˇsechny servery. Tento algoritmus jsme zvolili, protoˇze je ze vˇsech nejrychlejˇs´ı a d´ıky dostateˇcn´e dimenzovanosti a rovnomˇernosti v´ ykonu server˚ u je plnˇe dostaˇcuj´ıc´ı. Pˇri testu byla dosahov´ana pˇrenosov´a rychlost na hranici moˇznost´ı s´ıt’ov´eho rozhran´ı (100Mbit / sec). T´ım doch´azelo ke kol´ıs´an´ı trafficu a k v´ ypadku Load Balanceru, kter´ y byl zavinˇen chybou v kernelu syst´emu. Pr˚ ubˇeh testu ilustruj´ı n´asleduj´ıc´ı grafy:
Obr´azek A.1: Maxim´aln´ı datov´ y tok / sec agregovan´ y v minutov´ ych intervalech
Obr´azek A.2: Pr˚ umˇern´a doba odezvy serveru agregovan´a v minutov´ ych intervalech 71
Tento test prok´azal schopnost Load Balanceru fungovat v re´aln´em provozu i za podm´ınek zv´ yˇsen´e z´atˇeˇze.
72