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:).