HTTP Load Balancing za pomocą NginX

Równoważenie obciążenia (ang. load balancing) – technika rozpraszania obciążenia pomiędzy wiele procesorów, komputerów, dysków, połączeń sieciowych lub innych zasobów.
Jak to działa w praktyce z Nginx-em? Zaraz wszystko przedstawimy i w skrócie opiszemy.

Do przeprowadzenia testów potrzebujemy jakieś środowisko testowe. Ja w tym celu wykorzystam VirtualBox-a, aby stworzyć kilka wirtualek. Niektórzy używają Vagrant-a, ale dla mnie jest to kolejna zbędna aplikacja. Mam po prostu w VirtualBoxie zainstalowanego Debiana, którego sobie klonuję tyle razy ile mi potrzeba. Używam przy tym opcji Linked Clone i mam wirtualkę gotową do pracy w 5 sekund.

loadbalancer

Ok, zorganizujemy to sobie tak jak na powyższym diagramie. Czyli nawiązanie połączenia do naszego serwisu, strony, najpierw jest kierowane do load balancera a później do wybranego serwera. I tutaj uwaga, serwer web01 jest taki sam jak web02. Tzn jest jego bliźniaczą kopią. Też jest to dobre w przypadku awarii jednego z serwerów, ponieważ nasza strona nie zniknie z sieci.


Adresacja IP:
loadbalancer: 192.168.239.194
web01:        192.168.239.195
web02:        192.168.239.196

Zaczynamy od zainstalowania Nginx-a na każdej z wirtualek.


apt­-get install ­-y nginx

A na naszym loadbalancerze w /etc/nginx/site-available/default ustawiamy tak jak poniżej.


upstream web_test {

    server 192.168.239.195;
    server 192.168.239.196;
}
server {
    listen 80;
    location / {
        proxy_set_header X­Forwarded­For $proxy_add_x_forwarded_for;
        proxy_pass http://web_test;
        }
}

Oczywiście należy jeszcze zrestartować nasz serwer www


service nginx restart

Po wszystkim możemy przeprowadzić test, czy na pewno wszystko działa tak jak należy.


root@load:/etc/nginx/sites-available# curl localhost
web01
root@load:/etc/nginx/sites-available# curl localhost
web02
root@load:/etc/nginx/sites-available# curl localhost
web01
root@load:/etc/nginx/sites-available# curl localhost
web02
root@load:/etc/nginx/sites-available# curl localhost
web01

root@load:/etc/nginx/sites-available# curl http://192.168.239.194
web01
root@load:/etc/nginx/sites-available# curl http://192.168.239.194
web02
root@load:/etc/nginx/sites-available# curl http://192.168.239.194
web01
root@load:/etc/nginx/sites-available# curl http://192.168.239.194
web02
root@load:/etc/nginx/sites-available# curl http://192.168.239.194
web01

Wiedzę zaczerpnąłem też stąd:
load balancing

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *