This shows you the differences between two versions of the page.
saisp:labs:05:contents:01 [2013/11/11 00:46] 127.0.0.1 external edit |
saisp:labs:05:contents:01 [2014/04/04 11:38] (current) razvan.deaconescu [01. [20p] LVS-DR (direct routing)] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 01. Lorem ipsum ==== | + | ==== 01. [20p] LVS-DR (direct routing) ==== |
- | ... | + | Serviciul pentru care vom face load-balancing este **HTTP**. Serverul de web Apache2 este deja instalat pe realservere. Directorul va imparti cererile venite din partea clientului catre cele 2 realservere. |
+ | Pe director este deja instalat pachetul ''ipvsadm'' necesar configurării load balancing-ului. | ||
+ | Mai intai vom configura adresa virtuala pe director. Adaugam adresa **10.0.0.1/24** pe subinterfata **eth0:1** de pe **saisp-vm-1**: | ||
+ | <code> | ||
+ | root@saisp-vm-1:~# ip addr add dev eth0 10.0.0.1/24 label eth0:1 | ||
+ | </code> | ||
+ | |||
+ | Vom configura HTTP ca serviciu virtual. Trebuie să specificăm adresa si portul serverului virtual și protocolul de nivel transport (TCP, în cazul nostru). | ||
+ | <code> | ||
+ | root@saisp-vm-1:~# ipvsadm -A -t 10.0.0.1:80 | ||
+ | </code> | ||
+ | |||
+ | Serviciul virtual a fost configurat, dar trebuie să adăugăm și servere reale: | ||
+ | <code> | ||
+ | root@saisp-vm-1:~# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.20:80 -g | ||
+ | root@saisp-vm-1:~# ipvsadm -a -t 10.0.0.1:80 -r 10.0.0.30:80 -g | ||
+ | </code> | ||
+ | |||
+ | Parametrul **-g** semnifică folosirea LVS-DR. | ||
+ | |||
+ | Trebuie, de asemenea, să "convingem" RS-urile să răspundă la cereri pe adresa VS-ului. Există cel puțin două posibilități pentru acest lucru: | ||
+ | * configurarea adresei VS pe o interfață de loopback a RS. Această metodă are neajunsul că un RS ar putea răspunde unei cereri ARP pentru VS. Problema astfel creată se numește, în LVS, //[[http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html|The ARP Problem]]//. | ||
+ | * utilizarea unei reguli iptables care face RS-ul să accepte pachete, chiar dacă adresa VS-ului nu este configurată pe nicio interfață. **Vom folosi această abordare**. | ||
+ | <code> | ||
+ | root@saisp-vm-2:~# iptables -t nat -A PREROUTING -d 10.0.0.1 -j REDIRECT | ||
+ | </code> | ||
+ | <code> | ||
+ | root@saisp-vm-3:~# iptables -t nat -A PREROUTING -d 10.0.0.1 -j REDIRECT | ||
+ | </code> | ||
+ | |||
+ | Acum puteți utiliza serviciul configurat. | ||
+ | |||
+ | Verificati functionarea deschizand in browser adresa http://10.0.0.1 Folosind **CTRL+F5**, faceti refresh de cateva ori si observati cum apar, pe rand, paginile de pe cele 2 realservere. | ||
+ | |||
+ | Folosind Wireshark, porniti o captura pe interfata **br0** de pe masina fizica. Observati adresele IP si MAC din: | ||
+ | * pachetele care circula de la client spre director; | ||
+ | * pachetele care circula de la director spre realservere; | ||
+ | * pachetele care se intorc de la realservere catre client. | ||
+ | |||
+ | Pentru a vizualiza starea VS-ului, folositi parametrul **-l**: | ||
+ | <code> | ||
+ | root@saisp-vm-1:~# ipvsadm -l | ||
+ | </code> | ||
+ | |||
+ | Pentru a afisa detalii despre conexiunile gestionate de VS, adaugati si parametrul **-c**: | ||
+ | <code> | ||
+ | root@saisp-vm-1:~# ipvsadm -l -c | ||
+ | </code> | ||
+ | |||
+ | Pe langa configuratia de baza pe care am realizat-o, putem seta parametri aditionali. | ||
+ | |||
+ | De exemplu, vom activa scheduler-ul de tip round-robin, apoi vom configura un maxim de 4 conexiuni simultane pentru fiecare RS: | ||
+ | <code> | ||
+ | root@saisp-vm-1:~# ipvsadm -E -t 10.0.0.1:80 -s rr | ||
+ | root@saisp-vm-1:~# ipvsadm -e -t 10.0.0.1:80 -r 10.0.0.20:80 -x 4 | ||
+ | root@saisp-vm-1:~# ipvsadm -e -t 10.0.0.1:80 -r 10.0.0.30:80 -x 4 | ||
+ | </code> | ||
+ | |||
+ | Parametrul **-E** desemneaza editarea serviciului (in cazul nostru, s-a modificat scheduler-ul). | ||
+ | |||
+ | Parametrul **-e** desemneaza editarea realserverului (in cazul nostru, s-a modificat limita maxima de conexiuni). | ||
+ | |||
+ | In browser, faceti refresh de cateva ori si observati cum dupa 8 refresh-uri, directorul nu va mai trimite cererile catre realservere. | ||
+ | |||
+ | Pentru RS-uri cu configurație hardware diferită, se pot folosi valori diferite ale numărului maxim de conexiuni. Alternativ, se poate defini o pondere (weight) diferită pentru fiecare server și se poate folosi un scheduler ponderat (de exemplu, wrr) pe VS. | ||
+ | |||
+ | Pentru a sterge serviciul definit, folosim parametrul **-D**: | ||
+ | <code> | ||
+ | root@saisp-vm-1:~# ipvsadm -D -t 10.0.0.1:80 | ||
+ | </code> | ||
+ | |||
+ | In plus, pe realservere vom sterge regulile iptables definite: | ||
+ | <code> | ||
+ | root@saisp-vm-2:~# iptables -t nat -F | ||
+ | </code> | ||
+ | <code> | ||
+ | root@saisp-vm-3:~# iptables -t nat -F | ||
+ | </code> |