Load Balancer – HAProxy + HTTP Debian Lenny

Najkrócej mówiąc, skonfigurujemy maszyny tak, aby równomiernie rozłożyć obciążenie na dwie maszyny obsługujące Apache oraz dwie z Proxy. Dzięki czemu w przypadku uszkodzenie jednego z wezłów zachowamy działanie naszej infrastruktury.


LB1/LB2 lub HTTP1/HTTP2 oznaczają, że opisane czynności trzeba wykonać na odpowiednich maszynach.

HAProxy – jak możemy wyczytać z dokumentacji, jest to reverse proxy TCP/HTTP dla środowisk wysokiej dostępności, potrafiące m.in:
  • route’ować pakiety HTTP na podstawie zawartych Cookie
  • przełączać ruch na inny serwer w przypadku wykrycia awarii
  • blokować requesty HTTP na podstawie analizy nagłówków
  • generować statystyki ruchu/usług
  • modyfikować nagłówki HTTP w locie (coś dodać, coś usunąć, coś zmodyfikować)
  • zatrzymać przyjmowanie nowych połączeń bez zrywania nawiązanych
  • i wiele wiele więcej

 0) Informacje podstawowe:

Potrzebować będziemy 4 maszyn z systemem Debian Lenny:

Load Balancer 1: lb1.example.com, IP address: 192.168.1.100

Load Balancer 2: lb2.example.com, IP address: 192.168.1.101
HTTP 1: http1.example.com, IP address: 192.168.1.102
HTTP 2: http2.example.com, IP address: 192.168.1.103
Wirtualny adres IP łączący LB1 oraz LB2: 192.168.1.99

Diagram


Łącznik IP=192.168.1.99
 192.168.1.100  192.168.1.101 192.168.1.102 192.168.1.103
 ——-+————+————–+———–+———-
        |            |              |           |
     +–+–+      +–+–+      +—-+—-+ +—-+—-+
     | LB1 |      | LB2 |      |  HTTP1  | |  HTTP2  |
     +—–+      +—–+      +———+ +———+
     haproxy      haproxy            2xApache
     



1) HAProxy – transparentne proxy (HTTP1/HTTP2):

nano /etc/apache2/apache2.conf


dodajemy do niego:


LogFormat „%{X-Forwarded-For}i %l %u %t „%r” %>s %b „%{Referer}i” „%{User-Agent}i”” combined


będziemy sprawdzać kondycję naszych maszyn:


nano /etc/apache2/sites-available/default


dodamy:


SetEnvIf Request_URI „^/check.txt$” dontlog

CustomLog /var/log/apache2/access.log combined env=!dontlog


restart:


/etc/init.d/apache2 restart

tworzymy plik check

touch /var/www/check.txt



2)Instalacja HAProxy (LB1/LB2):


aptitude install haproxy



3)Konfiguracja Load Balancers (LB1/LB2):



cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_orig


cat /dev/null > /etc/haproxy/haproxy.cfg


vi /etc/haproxy/haproxy.cfg



do niego dodajemy:



global

        log 127.0.0.1   local0

        log 127.0.0.1   local1 notice

        #log loghost    local0 info

        maxconn 4096

        #debug
        #quiet
        user haproxy
        group haproxy

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen webfarm 192.168.1.99:80
       mode http
       stats enable
       stats auth someuser:somepassword
       balance roundrobin
       cookie JSESSIONID prefix
       option httpclose
       option forwardfor
       option httpchk HEAD /check.txt HTTP/1.0
       server webA 192.168.1.102:80 cookie A check
       server webB 192.168.1.103:80 cookie B check


Dodajemy ENABLED = 1

nano /etc/default/haproxy


# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1
# Add extra flags here.
#EXTRAOPTS=”-de -m 16″



4) Sprawdzenie czy LB działają (dla LB1/LB2):


aptitude install keepalived


pozwolimy na dzielenie jednego IP:192.168.1.99:


nano /etc/sysctl.conf

dodajemy:

net.ipv4.ip_nonlocal_bind=1


uruchamiamy:

sysctl -p


LB1:


nano /etc/keepalived/keepalived.conf


dodajemy do niego:


vrrp_script chk_haproxy {           # Requires keepalived-1.1.13
        script „killall -0 haproxy”     # cheaper than pidof
        interval 2                      # check every 2 seconds
        weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 51
        priority 101                    # 101 on master, 100 on backup
        virtual_ipaddress {
            192.168.1.99
        }
        track_script {
            chk_haproxy
        }
}


LB1:


/etc/init.d/keepalived start

ip addr sh eth0

Eth0 powinno nasłuchiwać również na 192.168.1.99/32

LB2:

nano /etc/keepalived/keepalived.conf


dodajemy do niego:


vrrp_script chk_haproxy {           # Requires keepalived-1.1.13
        script „killall -0 haproxy”     # cheaper than pidof
        interval 2                      # check every 2 seconds
        weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
        interface eth0
        state MASTER
        virtual_router_id 51
        priority 100                    # 101 on master, 100 on backup
        virtual_ipaddress {
            192.168.1.99
        }
        track_script {
            chk_haproxy
        }
}


LB2:

/etc/init.d/keepalived start

ip addr sh eth0


dla LB2 nie będziemy mięli 192.168.1.99.


LB1/LB2:

/etc/init.d/haproxy start


Teraz po wpisaniu http://192.168.1.99 powinniśmy zobaczyć poniższe okno, które pokaże nam obciążenie na konkretnych węzłach:




Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.

Link do formularza tutaj: https://beitadmin.pl/pomysly

Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).

Dodaj komentarz

beitadmin.pl - Droga Administratora IT