Hur man ställer in en HAProxy Load Balancer

0
193

HAProxy är en belastningsbalanserare med öppen källkod, som kan balansera alla TCP-baserade tjänster . Det används ofta för att balansera HTTP och kan hjälpa till att lösa trafikproblem på din webbserver. Så här ställer du in det.

Vad är HAProxy?

Lastbalanserare som HAProxy låter dig dela trafik över flera servrar, vilket gör det lättare att hantera. Istället för att peka din IP-adress mot din webbserver, skulle du rikta den mot en HAProxy-server, som skulle avgöra vart den ska skickas därifrån. HAProxy är mycket lätt och behöver inte mycket resurser för att fungera, så du kan använda en enda lastbalanserare för många backend-servrar. Helst vill du att både din HAProxy-server och dina webbservrar ska finnas i samma datacenter, från samma molnleverantör, för att minska latensen.

HAProxy gör också att ditt nätverk blir mer motståndskraftigt. Om en webbserver går ner kan HAProxy dirigera trafik till resten medan du diagnostiserar problemet. För att den ska vara riktigt motståndskraftig vill du ha en backup HAProxy-server, ifall din belastningsutjämnare går ner.

Även med HAProxy vill du fortfarande ofta ha ett fullständigt CDN för webbplatsen framför sig, både för att hantera ytterligare belastning och för att ha flera närvaropunkter närmare slutanvändaren.

Hur man ställer in HAProxy Load Balancing

Installera först HAProxy från din distributions pakethanterare. För Debianbaserade system som Ubuntu skulle det vara:

apt-get install haproxy Annons

Därefter måste du aktivera det genom att redigera init-skriptet på /etc/default/haproxy och ställa in ENABLED till 1:

ENABLED=1

Nu, om du kör service haproxy, bör du se att den är aktiverad och redo att konfigureras. Vi börjar med att arkivera standardkonfigurationsfilen:

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.old

Skapa en ny konfigurationsfil i dess ställe och börja genom att lägga till några globala inställningar:

global     log 127.0.0.1 local0 notice     maxconn 2000     user haproxy     group haproxy stats enable stats uri /haproxy?stats stats realm HAProxy Statistics stats auth admin:password

Log inställningen anger vilken loggserver som HAProxy skickar till syslog-servern. Du måste ha en server som rsyslog igång för att kunna använda detta. Maxconn-inställningen anger det maximala antalet samtidiga anslutningar, och användare och grupp anger vilken Unix-användare HAProxy fungerar som.

De sista raderna aktiverar HAProxy’s inbyggda statistiksida, som du kan se genom att navigera till URI:n i din webbläsare. I det här fallet skulle det vara http://din_ip/haproxy?stats, men du kan se en demo av det här.

Närnäst kommer vi att ställa in standardkonfigurationen som gäller för alla lyssningsblock om de inte gör några ändringar i det:

standardvärden logg globalt läge http alternativ httplog alternativ dontlognull försöker igen 3 alternativ redispatch timeout ansluta 5000 timeout klient 10000 timeout server 10000

Vi ställer in standard för att använda den globala logginställningen, arbeta på HTTP och ställa in vissa inställningar relaterade till anslutningstidsgränser.

Vi skapar ett frontend-block som gör det tunga lyftet och framåtanslutningar till backend:

frontend proxy bindning *:80 # ACL-funktionsdeklarationer acl is_abuse src_http_req_rate(Abuse) ge 10 acl inc_abuse_cnt src_inc_gpc0(Abuse) gt 0 acl abuse_cnt src_get_gpc0(Abuse-0(Abuse) avvisa if abuse_cnt http-request deny if abuse_cnt http-request deny if is_abuse inc_abuse_cnt option httpclose option forwardfor use_backend appnamn Annons

Den första raden binder denna frontend till port 80, där HAProxy kommer att lyssna på.

< p>De följande två avsnitten är för hastighetsbegränsning. Först deklareras ACL-funktionerna (Access Control List), som avgör om en IP-adress är otillåten. Sedan kommer en uppsättning regler att avvisa en anslutning om den gör för många förfrågningar.

Alternativet forwardfor vidarebefordrar klientens IP-adress till servern. Eftersom HAProxy fungerar som en omvänd proxy, ser din nginx-server bara din HAProxy-servers IP-adress. Det här alternativet ställer in  X-Forwarded-For HTTP-huvudet till klientens IP-adress.

Och slutligen ställer vi in ​​det här frontend-blocket så att det använder backend “appnamn,” som vi måste skapa. Backend-blocket definierar helt enkelt servrarna som ska vidarebefordras till, tillsammans med några alternativ:

backend-appnamn your_ip:80 saldo roundrobin-cookie SERVERNAME infoga server web1 web1_ip:80 check cookie web1 server web2 web2_ip:80 check cookie web2

Balansdirektivet definierar hur HAProxy balanserar förfrågningar mellan servrar. Det vanligaste alternativet är roundrobin, som kommer att rotera anslutningar genom varje server i ordning. Om du stöter på problem med balansen kan du prova att använda alternativet leastconn, som väljer baserat på samtidiga anslutningar. Om du behöver användare för att få åtkomst till samma server över flera anslutningar kan du använda källalternativet, som väljer baserat på en hash av klientens IP-adress.

Annons

De två sista raderna allokerar servrar till detta avlyssningsblock. Du ger dem ett namn (web1 och web2), anger deras adresser och listar sedan några alternativ. Här använder vi check-parametern för att se till att servern är frisk och accepterar anslutningar, och cookie-parametern för att ställa in SERVERNAME-cookien (som vi infogade direkt ovan) till namnet på servern, som används för sessionsklibbighet (så att användaren byter inte server medan du använder din webbplats). Alternativet för balanskälla uppnår samma effekt.

Och eftersom vi använder hastighetsbegränsning behöver vi faktiskt en annan backend för att lagra IP-adresser:

Backend Abuse stick-table typ ip storlek 100K expire 30m store gpc0,http_req_rate(10s)

Detta vidarebefordrar faktiskt inga anslutningar; den fungerar som en tabell att lagra adresser i. Adresser rensas efter 30 minuter, så adresser som anses vara otillåtna kommer att blockeras i 30 minuter.

Slutligen kan du starta HAProxy-tjänsten genom att köra:

tjänst haproxy start