HAProxy

Allikas: Kuutõrvaja
                                        Roheline.jpg Toores. Ehk seda pala võib täiendada.

HAProxy on üsna võimas proksiserver, mis suunab edasi nii TCP kui ka HTTP-protokolli ühendusi. Lisaks põhifunktsioonile (ehk proksimisele) töötab HAproxy ka koormusjaoturina, jagades defineeritud serverite vahel koormust erinevate meetoditega.

2014. märtsi seisuga on viimane versioon arenduses 1.5-dev21, mida oleme ka näidete juures kasutanud. Siiamaani pole vigu esinenud. Viimane stabiilne versioon on 1.4. Kui https tuge on vaja, siis on vaja kasutada versiooni 1.5 ja riskida mõningate vigadega, mis võivad esineda.

HAProxy installeerimine ja konfigureerimine

Käsurealt saab installeerida HAproxy kasutades käsku

sudo apt-get install haproxy

Sellepeale paigaldatakse vajalikud failid ja konfiguratsioonifaili loetakse asukohast */etc/haproxy/haproxy.cfg* Seal oli vist veel teid, kus neid otsitakse, aga etc asukoht oli mu arust esimene.

Võimalik installeerida ka binaarpaki kaudu. Selleks tuleb HAProxy kodulehelt tõmmata vastav fail, see lahti pakkida ja anda tekkinud failile käivitamisõigus (execute).

Parameetrid

Konfiguratsioonis on neli põhilist sektsiooni - defaults, frontend, backend ja listen.

- Defaults kehtib kõikidele sektsioonidele, kusjuures igas sektsioonis mainitud sama parameeter kirjutab default väärtuse üle.

- Frontend kehtib sissetulevatele ühendustele

- Backend kehtib suunatud ühendustele

- Listen kombineerib endas frontendi ja backendi. Listeni süntaks on lühem, kuid võib olla keerulisem lugeda.

Kõiki parameetreid (ja mis parameeter kuskil blokis lubatud on), saad lugeda HAProxy konfiguratsioonist. (Vaata: Ver 1.5 konfiguratsioon 4.1 Proxy keyword matrix)

Põhilised parameetrid

balance

Balance määrab koormusjaoturi algoritmi. Võimalikud variandid on leastconn, source ja roundrobin.

  • leastconn saadab ühenduse kõige vähem koormatud serverile
  • source saadab kõik ühelt IP-lt tulnud ühendused ühele ja samale serverile
  • roundrobin saadab ühendused vaheldumisi kõigile serveritele (vaikeväärtus)

weight

Weight parameeter on valikuline ja lubab serveri juures määrata kaalu. Kaalu võib kasutada siis, kui serverid on erineva konfiguratsiooniga ja soov on võimsamale serverile anda suuremat koormust. Soovitatav on kasutada koormusi kümnendsammuga (10, 20, 30), siis on lihtsam võimalus vahele lisada mõnda serverit, kui seesugune vajadus peaks tekkima.

Väärtus peab olema vahemikus 0...100, kus 0 on kõige väiksema ja 100 kõige suurema kaaluga server. Serverid võivad olla ka sama kaaluga (nt 3 tükki on kaaluga 30 ja 2 tükki kaaluga 50).

minconn, maxconn

Parameeter peaks olema kindlasti seadistatud, kui kasutatakse roundrobin tüüpi koormuse jaotust. Ehk siis, kuna roundrobin on vaikeväärtus, siis peaks igaljuhul need parameetrid kasutusele võtma.

minconn ja maxconn on vastavalt madala koormuse ja suure koormusega lubatud ühenduste arv. Kui ühenduste arv on täis, siis pannakse ülejäänud ühendused ootele, et mitte serverit koormata.

Näidiskonfiguratisoon

Konfiguratsioonis eeldatakse,

  • proksiserver aadressiga 192.168.0.2
  • server 1 aadressiga 192.168.0.10
  • server 2 aadressiga 192.168.0.20
  • server 3 aadressiga 192.168.0.30

Näidiskonfiguratsioon /etc/haproxy/haproxy.cfg mis suunab kõik porti 80 tulnud ühendused edasi kolme serveri 5555 porti

global
  daemon
  pidfile /var/run/haproxy.pid
  maxconn 4096

defaults
  mode http
  timeout client 240s
  timeout connect 500s
  timeout server 240s

frontend sissetulevad_http_yhendused *:80
  maxconn 1000
  default backend arvutus_serverid
backend arvutus_serverid
  mode tcp
  balance source
  server serveri_nimi1 192.168.0.10:5555 check
  server serveri_nimi2 192.168.0.20:5555 check
  server serveri_nimi3 192.168.0.30:5555 check

listen statistika 192.168.0.2:8080
  mode http
  stats enable
  stats uri /
  stats realm HAProxy\ statistika.\ Parool\ palun!
  stats auth admin:1234
check id 2

Kommentaarid konfiguratsiooni kohta

Konfiguratsiooni saab kirjutada väga mitmel erineval moel. Näiteks üks erinevus:

frontend yhenduse_nimi
 bind *:80

VERSUS

frontend yhenduse_nimi *:80

Kirjapildilt kaks erinevat, kuid mõte ja toimimine on mõlemal sama - kuulatakse kõiki sissetulevaid ühendusi kõikidele masinale omistatud IP aadressidele pordile 80.


Serveri nimi on niiöelda sinu enda jaoks, et saaksid statistika lehel eristada ja identifitseerida servereid. Kui kasutad parameetrit "check" serveri järel, siis kontrollitakse, kas server on "elus" ja sellest antakse ka statistika lehel märku.


Kui kuskil nimes on vaja kasutada tühikut " ", siis tuleb tühikule eelnevalt kirjutada tagurpidi kaldkriips "\" (ilma jutumärkideta!). Vt konfiguratsioonis näiteks parameetrit "stats realm".


Konfiguratsiooni muutmisel saab teha testi konfiguratsiooni vigade kohta:

sudo haproxy -f /etc/haproxy/haproxy.cfg -c

Muudatuste tegemisel jõustuvad need pärast teenuse taaskäivitamist:

sudo /etc/init.d/haproxy restart

Https offload

SSL offloadi põhimõtet iseloomustab järgnev skeem:

Ssl offloading.png

Ühendus kliendist koormusejaoturini tehakse krüpteeritult sertifikaatide abil. Koormusjaoturist teenusmasinani (10.40.0.4 aadressiga) aga ilma. See vähemdab ühtlasi teenusemasina koormust, kuna tal pole vaja krüpteerimisega tegeleda.

frontend ft_test
  mode http
  maxconn 1000

  bind 0.0.0.0:443 ssl crt /etc/haproxy/haproxy.pem
  default_backend bk_test
 
backend bk_test
  mode http
  server srv1 10.10.0.4:80

faili /etc/haproxy/haproxy.pem tekitamiseks tuleb server.crt ja server.key ühte faili kokku panna, näiteks cat utiliidi abil.

Lisada võib ka automaatse ümbersuunamise 80 pordilt 443 peale

frontend production-http-in
    bind *:80
    redirect scheme https if !{ ssl_fc }

Statistika

Statistika lehekülge on võimalik lubada / keelata. Selleks tuleb konfiguratsioonifaili see sisse kirjutada, vaikimisi on statistika lehekülg keelatud. Samuti saab vahetada statistikalehe porti, URI, admin kasutajanime ja parooli. Kui ligipääs tulemüürist on lubatud vaid sisevõrgust, siis võib jätta admin-admin, kui väline ligipääs, siis oleks mõistlik need ära vahetada. :)

Ekraanitõmmis statistika lehelt, kus konfiguratsioon seadistatud järgmiselt: Kasutusel 3 serverit, sissetulev http ühendus suunatakse edasi TCP ühenduseks pordile 443 (https), vaikimisi kasutatakse https ühendust. HTTPS ühendus kasutab kolme serverit, mille vahel koormust jaotatakse - test1, test2 ja test3. Kui ühendus on TCP portidele 5900, 5901 või 5092, siis need suunatakse edasi "konsool"-idele, mis on tegelikult samad serverid, aga millel pordid seadistatud eraldi.

Haproxystat.jpg

Lisamaterjal