HAProxy pamoka pradedančiajam

Haproxy Pamoka Pradedanciajam



Kai jūsų programa plečiasi, atsiranda poreikis pridėti daugiau serverių, kad būtų galima valdyti didesnį srautą. Kuo daugiau srauto sulaukia jūsų programa, tuo didesnė tikimybė susidurti su prastovomis, kai serveris perkraunamas. Tačiau yra įrankių, tokių kaip HAProxy, kurie leidžia apibrėžti, kaip srautas tvarkomas, kad būtų subalansuota serverio apkrova. Idėja yra užtikrinti, kad joks serveris nebūtų perkrautas. Aukšto pasiekiamumo tarpinis serveris yra atvirojo kodo programinė įranga, sukurta siekiant pasiūlyti patikimą apkrovos balansavimą ir veikianti kaip atvirkštinis tarpinis serveris TCP/HTTP programoms.

HAProxy padeda sumažinti bet kurio serverio perkrovą ir tai pasiekia paskirstydama srautą, kad būtų užtikrinta, jog serveris neperkraunamas, bet kiti serveriai yra prieinami. Tokios platformos kaip „Instagram“ srautas yra didžiulis dėl per sekundę siunčiamų užklausų, todėl reikia naudoti HAProxy, kad būtų galima apibrėžti serverių priekinę dalį, užpakalinę sistemą ir klausytojus, kad būtų išvengta perkrovos.

Kodėl verta naudoti HAProxy

Prieš sužinodami apie HAProxy diegimą ir konfigūravimą, turėtumėte suprasti, kodėl mums to reikia, atsižvelgiant į jo siūlomas funkcijas. Toliau pateikiamos pagrindinės HAProxy savybės:







  1. Apkrovos balansavimas - Naudodami HAProxy galite patogiai paskirstyti srautą įvairiuose serveriuose, kad išvengtumėte vieno serverio perkrovos. Tokiu būdu jūsų programa nesusidurs su prastovos problemomis ir pasieksite greitesnį reagavimą, patikimumą ir pasiekiamumą.
  2. Registravimas ir stebėjimas – Gausite išsamius savo serverių stebėjimo žurnalus, kurie padės išspręsti problemas. Be to, HAProxy turi statistikos puslapį, kuriame galite gauti apkrovos balansavimo priemonės našumo analizę realiuoju laiku.
  3. Sveikatos patikrinimai – Net jūsų serveriams reikalingas sveikatos patikrinimas, kad būtų nustatyta jų būsena. HAProxy dažnai atlieka sveikatos patikrinimus, kad sužinotų jūsų serverio būseną, kad padidintų jo patikimumą. Jei aptinkamas netinkamas serveris, jis nukreipia srautą į kitą serverį.
  4. Atvirkštinis tarpinis serveris – Vienas iš būdų padidinti saugumą yra paslėpti vidinę struktūrą. Laimei, HAProxy leidžia gauti srautą iš klientų ir nukreipti juos į atitinkamus serverius. Tokiu būdu jūsų vidinė struktūra yra paslėpta nuo įsilaužėlio akies.
  5. ACL (prieigos kontrolės sąrašai) – Naudodami HAProxy, galite apibrėžti, kaip turėtų vykti srauto nukreipimas, naudodami įvairius kriterijus, pvz., kelius, antraštes ir IP adresus. Taigi, lengviau nustatyti tinkintą srauto maršruto logiką.
  6. SSL nutraukimas – Pagal numatytuosius nustatymus SSL/TLS iškraunama pagalbinių serverių, todėl sumažėja našumas. Tačiau naudojant HAProxy SSL/TLS nutraukimas įvyksta apkrovos balansavimo priemonėje, iškraunant užduotį vidiniuose serveriuose.

HAProxy diegimas

Iki šiol apibrėžėme, kas yra HAProxy, ir aptarėme jos siūlomas funkcijas, kad padėtų suprasti, kodėl jos reikia jūsų programai. Kitas žingsnis – suprasti, kaip pradėti jį įdiegti savo sistemoje.



Jei naudojate Ubuntu arba Debian sistemas, HAProxy galima įdiegti iš APT paketų tvarkyklės. Vykdykite šią komandą:



$ sudo apt atnaujinimas
$ sudo apt įdiegti haproxy

Panašiai, jei naudojate RHEL pagrįstas sistemas arba CentOS, HAProxy galima įsigyti iš „yum“ paketų tvarkyklės. Vykdykite šias komandas:





$ sudo yum atnaujinimas
$ sudo yum įdiegti haproxy

Mūsų atveju mes naudojame Ubuntu. Taigi, mes turime tokią komandą:



Tada galime patikrinti jo versiją, kad įsitikintume, ar mums pavyko sėkmingai įdiegti HAProxy.

$ haproxy -- versija

Kaip sukonfigūruoti HAProxy

Įdiegę HAProxy, dabar galite atidaryti jos konfigūracijos failą ( / etc/haproxy/haproxy.cfg) ir apibrėžkite parametrus, kuriuos norite naudoti apkrovos balansuotojui.

Atidarykite konfigūracijos failą naudodami redaktorių, pvz., nano arba vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Gaunate konfigūracijos failą, panašų į toliau pateiktą:

Iš konfigūracijos failo pastebėsite, kad jame yra du pagrindiniai skyriai:

  1. pasaulinis – Tai pirmasis failo skyrius ir jo reikšmės neturėtų būti keičiamos. Jame yra proceso parametrai, apibrėžiantys, kaip veikia HAProxy. Pavyzdžiui, ji apibrėžia registravimo informaciją ir grupes arba vartotojus, kurie gali vykdyti HAProxy funkcijas. Atminkite, kad šiame konfigūracijos faile galite turėti tik vieną visuotinį skyrių, o jo reikšmės turėtų likti nepakitusios.
  1. numatytieji - Šiame skyriuje pateikiamos numatytosios mazgų reikšmės. Pavyzdžiui, šiame skyriuje galite pridėti HAProxy skirtąjį laiką arba veikimo režimą. Be to, HAProxy konfigūracijos faile galima turėti daugybę numatytųjų skyrių.

Štai skilties „Numatytieji“ pavyzdys:

Pateiktame paveikslėlyje režimas apibrėžia, kaip jūsų HAProxy tvarkys gaunamas užklausas. Galite nustatyti HTTP arba TCP režimą. Kalbant apie skirtąjį laiką, jis nurodo, kiek laiko HAProxy turėtų laukti. Pavyzdžiui, skirtasis prisijungimo laikas yra laikas, kurį reikia laukti, kol bus užmegztas vidinis ryšys. Laiko pabaigos klientas nurodo, kiek laiko HAProxy turėtų laukti, kol klientas išsiųs duomenis. Timeout serveris yra laikas, per kurį reikia laukti, kol atitinkamas serveris išsiųs duomenis, kurie bus persiųsti klientui. Tai, kaip apibrėžiate numatytąsias reikšmes, turi didelę reikšmę didinant programos atsako laiką.

Yra dar trys skyriai, kuriuos turėtumėte apibrėžti, kad jūsų apkrovos balansavimo priemonė veiktų taip, kaip tikėtasi.

  1. frontend - Šiame skyriuje yra IP adresai, kuriuos norite, kad jūsų klientai naudotų ryšiui užmegzti.
  2. backend - Tai rodo serverių telkinius, kurie apdoroja užklausas, kaip apibrėžta sąsajos skyriuje.
  3. klausyk - Jis naudojamas paeiliui, kai norite nukreipti konkrečią serverių grupę. Šiame skyriuje sujungiamos priekinės ir užpakalinės sistemos užduotys.

Turėkime pavyzdį

Šiame pavyzdyje mes apibrėžiame sąsają, kad naudotume vietinį pagrindinį kompiuterį su konkrečiu prievadu. Tada susiejame jį su užpakaline programa, kuri paleidžia „localhost“, tada paleidžiame „Python“ serverį, kad patikrintume, ar viskas veikia taip, kaip tikėtasi apkrovos balansavimo srityje. Atlikite nurodytus veiksmus.

1 veiksmas: Numatytųjų skilties konfigūravimas

Skiltyje „Numatytieji nustatymai“ nustatome reikšmes, kurios bus bendrinamos visuose mazguose. Mūsų atveju mes nustatome HTTP režimą ir nustatome kliento ir serverio skirtąjį laiką. Galite pritaikyti laiką pagal savo poreikius.

Atminkite, kad visi šie pakeitimai yra HAProxy konfigūracijoje, esančioje adresu „/etc/haproxy/haproxy.cfg“. Sukonfigūravus numatytąjį skyrių, apibrėžkime sąsają.

2 veiksmas: priekinės dalies konfigūravimas

Frontend skiltyje apibrėžiame, kaip norime, kad programa ar svetainė būtų pasiekiama klientams prisijungus. Pateikiame programos IP adresus. Tačiau šiuo atveju dirbame su vietiniu prieglobsčiu. Todėl mūsų IP adresas yra atsarginis adresas 127.0.0.1 ir norime priimti ryšius per 80 prievadą.

Turite pridėti raktinį žodį „pririšti“, kuris veikia kaip IP adreso klausytojas nurodytame prievade. Apkrovos balansavimo priemonė naudoja jūsų apibrėžtą IP adresą ir prievadą, kad priimtų gaunamas užklausas.

Pridėję ankstesnes eilutes į konfigūracijos failą, turime iš naujo paleisti „haproxy.service“ naudodami šią komandą:

$ sudo systemctl iš naujo paleiskite haproxy

Šiuo metu galime pabandyti nusiųsti užklausas į mūsų svetainę naudodami komandą „curl“. Vykdykite komandą ir pridėkite tikslinį IP adresą.

$ curl

Kadangi dar turime apibrėžti, kaip bus mūsų HAProxy užpakalinė programa, gauname 503 klaidą, kaip parodyta toliau. Nors apkrovos balansavimo priemonė sugebėjo gauti užklausas, šiuo metu nėra serverio, kuris galėtų juos apdoroti, todėl įvyko klaida.

3 veiksmas: foninės programos konfigūravimas

Užpakalinėje dalyje apibrėžiame serverius, kurie tvarkys visas gaunamas užklausas. Apkrovos balansavimo priemonė nurodo šį skyrių, kad sužinotų, kaip ji turėtų paskirstyti gaunamas užklausas, kad užtikrintų, jog nė vienas serveris nebūtų perkrautas.

503 klaida, kurią gavome anksčiau, atsirado todėl, kad neturėjome jokios užklausoms apdoroti skirtos sistemos. Pradėkime apibrėždami „default_backend“, kad būtų galima apdoroti užklausas. Jį apibrėžiate priekinės dalies skiltyje. Šiuo atveju mes jį pavadinome „linux_backend“.

Tada sukurkite užpakalinės dalies skyrių, kurio pavadinimas yra toks pat kaip ir tos, kuri apibrėžta sąsajos skiltyje. Tada turite naudoti raktinį žodį „serveris“, po kurio nurodomas serverio pavadinimas ir jo IP adresas. Toliau pateiktame paveikslėlyje parodyta, kad „linuxhint1“ serverį apibrėžėme naudodami IP 127.0.0.1 ir 8001 prievadą:

Galite turėti galinių serverių telkinį, tačiau šiuo atveju nustatėme tik vieną. Įsitikinkite, kad išsaugojote failą. Turime iš naujo paleisti HAProxy paslaugą.

Norėdami išbandyti sukurtą HAProxy apkrovos balansavimo priemonę, sukuriame žiniatinklio serverį naudodami Python3, kad susietume pagrindinius prievadus naudodami nurodytą IP adresą. Mes vykdome komandą taip:

$ python3 -m http.serveris 8001 --bind 127.0.0.1

Įsitikinkite, kad pakeisite reikšmes, kad jos atitiktų jūsų IP adresą ir prievadą, kurį norite susieti. Atkreipkite dėmesį, kaip sukuriamas žiniatinklio serveris ir išklauso visas gaunamas užklausas.

Kitame terminale naudokite komandą „curl“, kad nusiųstume užklausą serveriui.

$ curl

Skirtingai nuo to, kai anksčiau gavome 503 klaidą, kuri rodo, kad nėra serverio, kuris galėtų apdoroti užklausą, šį kartą gauname išvestį, patvirtinančią, kad mūsų HAProxy apkrovos balansavimo priemonė veikia.

Jei grįšite į ankstesnį terminalą, kuriame sukūrėme žiniatinklio serverį, pamatysite, kad gausime sėkmingą išvestį 200, kuri patvirtina, kad HAProxy gavo užklausą ir ją apdorojo, nusiųsdama ją į nustatytą serverį mūsų užpakalinėje dalyje.

Taip savo svetainei ar programai galite nustatyti paprastą HAProxy.

Darbas su taisyklėmis

Prieš baigdami šią pradedančiųjų HAProxy mokymo programą, greitai pakalbėkime apie tai, kaip galite apibrėžti taisykles, pagal kurias apkrovos balansavimo priemonė apdoros užklausas.

Atlikdami tuos pačius veiksmus, kaip ir anksčiau, palikime numatytąją skiltį nepažeistą ir apibrėžkime skirtingus IP adresus priekinėje dalyje. Mes susiejame tą patį IP adresą, bet priimame ryšius iš skirtingų prievadų.

Be to, turime savo „default_backend“ ir kitą „use_backend“, kuris yra skirtingas serverių rinkinys, kurį naudosime priklausomai nuo prievado, iš kurio gaunamos užklausos. Toliau pateiktoje konfigūracijoje visas užklausas per 81 prievadą tvarko „Linux2_backend“ serveriai. Visas kitas užklausas apdoroja „default_backend“.

Tada sukuriame pagrindines dalis, kaip apibrėžta sąsajoje. Atminkite, kad kiekvienai vidinei sistemai turime skirtingą serverį, kurį nurodome naudoti užklausoms tvarkyti.

Greitai iš naujo paleiskite HAProxy paslaugą.

Sukurkime žiniatinklio serverį naudodami Python3 ir susiekime užklausas prie 8002 prievado, kuris yra alternatyvus vidinis serveris.

Siųsdami jam užklausas, nurodome prievadą kaip 81, kad suaktyvintume apkrovos balansavimo priemonę ir išsiųstų užklausas į alternatyvų serverį, kuris nėra numatytasis.

Dar kartą patikrinę mūsų žiniatinklio serverį, matome, kad jis sugeba priimti ir apdoroti užklausas ir pateikia 200 (sėkmių) atsakymą.

Taip galite apibrėžti taisykles, kaip jūsų apkrovos balansavimo priemonė gaus ir tvarkys užklausas.

Išvada

HAProxy yra idealus sprendimas apkrovos balansavimui TCP/HTTP programoms. Įdiegę galite patogiai redaguoti konfigūracijos failą, kad nustatytumėte numatytuosius nustatymus, sąsajos ir užpakalinės dalies skyrius, kad galėtumėte vadovautis, kaip veiks jūsų apkrovos balansavimo priemonė. Šis įrašas yra pradedančiųjų HAProxy vadovas. Jis prasidėjo apibrėžiant HAProxy ir jo funkcijas. Toliau buvo ieškoma supratimo, kaip sukonfigūruoti HAProxy, ir baigta pateikdamas pavyzdį, kaip naudoti HAProxy kaip apkrovos balansavimo priemonę.