Praėjusį kartą kalbėjome apie NSX Edge galimybes statinio ir dinaminio maršruto parinkimo srityje, o šiandien kalbėsime apie apkrovos balansavimo priemonę.
Prieš pradedant kurti, norėčiau trumpai priminti apie pagrindines balansavimo rūšis.
Теория
Visi šiandieniniai naudingosios apkrovos balansavimo sprendimai dažniausiai skirstomi į dvi kategorijas: balansavimas ketvirtame (transporto) ir septintame (taikymas) modelio lygiuose.
- Balansuotojas L4 dažniausiai tai yra tarpinis tarpinis serveris, stovintis tarp kliento ir galimų užpakalinių sistemų rinkinio, kuris nutraukia TCP ryšius (tai yra savarankiškai reaguoja į SYN), pasirenka backend ir inicijuoja naują TCP seansą jo kryptimi, savarankiškai siųsdamas SYN. Šis tipas yra vienas iš pagrindinių, galimi ir kiti variantai.
- Balansuotojas L7 paskirsto srautą turimoms užpakalinėms sistemoms „rafinuoliau“ nei L4 balansavimo priemonė. Ji gali nuspręsti, kurią užpakalinę programą pasirinkti, atsižvelgdama, pavyzdžiui, į HTTP pranešimo turinį (URL, slapuką ir kt.).
Nepriklausomai nuo tipo, balansyras gali palaikyti šias funkcijas:
- Paslaugos aptikimas yra galimų užpakalinių sistemų (statinių, DNS, konsulinių, kt. ir kt.) nustatymo procesas.
- Aptiktų užpakalinių sistemų funkcionalumo tikrinimas (aktyvus užpakalinės programos „ping“ naudojant HTTP užklausą, pasyvus TCP ryšių problemų aptikimas, kelių 503 HTTP kodų buvimas atsakymuose ir kt.).
- Pats balansavimas (apvalus, atsitiktinis pasirinkimas, šaltinio IP maiša, URI).
- TLS nutraukimas ir sertifikato patikrinimas.
- Su sauga susijusios parinktys (autentifikavimas, DoS atakų prevencija, greičio ribojimas) ir daug daugiau.
NSX Edge palaiko du apkrovos balansavimo priemonės diegimo režimus:
Tarpinio serverio režimas arba viena ranka. Šiuo režimu NSX Edge naudoja savo IP adresą kaip šaltinio adresą, kai siunčia užklausą vienai iš užpakalinių sistemų. Taigi balansuotojas vienu metu atlieka šaltinio ir paskirties NAT funkcijas. Užpakalinė programa mato visą srautą, siunčiamą iš balansavimo priemonės, ir tiesiogiai į jį reaguoja. Tokioje schemoje balansuotojas turi būti tame pačiame tinklo segmente su vidiniais serveriais.
Štai kaip viskas vyksta:
1. Vartotojas siunčia užklausą VIP adresu (balansavimo adresu), kuris sukonfigūruotas Edge.
2. Edge pasirenka vieną iš užpakalinių sistemų ir atlieka paskirties NAT, pakeisdamas VIP adresą pasirinktos užpakalinės programos adresu.
3. Edge atlieka šaltinio NAT, pakeisdamas užklausą išsiuntusio vartotojo adresą savo.
4. Paketas siunčiamas į pasirinktą užpakalinę programą.
5. Backend atsako ne tiesiai į vartotoją, o į Edge, nes pradinis vartotojo adresas buvo pakeistas į balansuotojo adresą.
6. Edge perduoda serverio atsakymą vartotojui.
Diagrama yra žemiau.
Skaidrus arba tiesioginis režimas. Pagal šį scenarijų balansuotojas turi sąsajas vidiniuose ir išoriniuose tinkluose. Tuo pačiu metu nėra tiesioginės prieigos prie vidinio tinklo iš išorinio. Integruotas apkrovos balansavimo įrankis veikia kaip NAT šliuzas virtualioms mašinoms vidiniame tinkle.
Mechanizmas yra toks:
1. Vartotojas siunčia užklausą VIP adresu (balansavimo adresu), kuris sukonfigūruotas Edge.
2. Edge pasirenka vieną iš užpakalinių sistemų ir atlieka paskirties NAT, pakeisdamas VIP adresą pasirinktos užpakalinės programos adresu.
3. Paketas siunčiamas į pasirinktą užpakalinę programą.
4. Užpakalinė programa gauna užklausą su pirminiu vartotojo adresu (šaltinio NAT nebuvo atlikta) ir tiesiogiai į ją atsako.
5. Apkrovos balansavimo priemonė vėl priima srautą, nes tiesioginėje schemoje jis paprastai veikia kaip numatytasis serverių ūkio šliuzas.
6. „Edge“ atlieka šaltinio NAT, kad nukreiptų srautą vartotojui, naudodamas jo VIP kaip šaltinio IP adresą.
Diagrama yra žemiau.
Praktika
Mano bandymų stende yra 3 serveriai, kuriuose veikia „Apache“, kuris sukonfigūruotas veikti per HTTPS. Edge atliks apvalų HTTPS užklausų balansavimą, kiekvieną naują užklausą perkeldamas į naują serverį.
Pradėkime.
Generuojamas SSL sertifikatas, kurį naudos NSX Edge
Galite importuoti galiojantį CA sertifikatą arba naudoti pasirašytą. Šiam testui naudosiu savarankiškai pasirašytą.
- „vCloud Director“ sąsajoje eikite į „Edge“ paslaugų nustatymus.
- Eikite į skirtuką Sertifikatai. Veiksmų sąraše pasirinkite pridėti naują CSR.
- Užpildykite reikiamus laukus ir spustelėkite Laikyti.
- Pasirinkite naujai sukurtą CSR ir pasirinkite savarankiško CSR pasirašymo parinktį.
- Pasirinkite sertifikato galiojimo laiką ir spustelėkite Laikyti
- Savarankiškai pasirašytas sertifikatas rodomas galimų sertifikatų sąraše.
Programos profilio nustatymas
Programų profiliai suteikia pilnesnę tinklo srauto kontrolę ir leidžia jį valdyti paprastai bei efektyviai. Jie gali būti naudojami norint apibrėžti konkrečių tipų srautą.
- Eikite į Load Balancer skirtuką ir įjunkite balansavimo priemonę. Parinktis Acceleration įgalinta čia leidžia balansuotojui naudoti greitesnį L4 balansavimą, o ne L7.
- Eikite į skirtuką Programos profilis, kad nustatytumėte programos profilį. Spustelėkite +.
- Nustatykite profilio pavadinimą ir pasirinkite srauto tipą, kuriam profilis bus taikomas. Leiskite man paaiškinti kai kuriuos parametrus.
Atkaklumas – saugo ir seka seanso duomenis, pavyzdžiui: kuris konkretus telkinio serveris aptarnauja vartotojo užklausą. Taip užtikrinama, kad vartotojų užklausos būtų nukreipiamos į tą patį telkinio narį per visą seanso arba vėlesnių seansų laikotarpį.
Įgalinti SSL perdavimą – Kai pasirenkama ši parinktis, NSX Edge nustoja nutraukti SSL. Vietoj to, nutraukimas įvyksta tiesiogiai serveriuose, kurie yra subalansuojami.
Įdėkite X-Forwarded-For HTTP antraštę – leidžia nustatyti kliento, prisijungiančio prie žiniatinklio serverio per apkrovos balansavimo priemonę, šaltinio IP adresą.
Įgalinti baseino pusės SSL – leidžia nurodyti, kad pasirinktą telkinį sudarytų HTTPS serveriai.
- Kadangi aš balansuosiu HTTPS srautą, turiu įjungti baseino pusės SSL ir skirtuke Virtualaus serverio sertifikatai -> Paslaugos sertifikatas pasirinkti anksčiau sugeneruotą sertifikatą.
- Panašiai ir baseino sertifikatams -> Paslaugos sertifikatas.
Sukuriame serverių telkinį, kurio srautas bus subalansuotas Pools
- Eikite į skirtuką Baseinai. Spustelėkite +.
- Nustatome baseino pavadinimą, pasirenkame algoritmą (naudosiu round robin) ir būklės patikrinimo backend stebėjimo tipą.. Opcija Transparent nurodo, ar klientų pradiniai šaltinio IP yra matomi vidiniams serveriams.
- Jei parinktis išjungta, vidinių serverių srautas gaunamas iš balansavimo šaltinio IP.
- Jei parinktis įjungta, vidiniai serveriai mato klientų šaltinio IP. Šioje konfigūracijoje NSX Edge turi veikti kaip numatytasis šliuzas, kad būtų užtikrinta, jog grąžinami paketai praeitų per NSX Edge.
NSX palaiko šiuos balansavimo algoritmus:
- IP_HASH – serverio pasirinkimas pagal maišos funkcijos rezultatus kiekvieno paketo šaltinio ir paskirties IP.
- LEASTKONAS – gaunamų jungčių balansavimas, priklausomai nuo konkrečiame serveryje jau turimo skaičiaus. Nauji ryšiai bus nukreipti į serverį, turintį mažiausiai ryšių.
- ROUND_ROBIN – į kiekvieną serverį paeiliui siunčiami nauji ryšiai pagal jam priskirtą svorį.
- URI – kairioji URI dalis (prieš klaustuką) sumaišoma ir padalinama iš bendro serverių svorio telkinyje. Rezultatas rodo, kuris serveris gauna užklausą, užtikrinant, kad užklausa visada būtų nukreipta į tą patį serverį, kol visi serveriai bus pasiekiami.
- HTTPHEADER – balansavimas pagal konkrečią HTTP antraštę, kurią galima nurodyti kaip parametrą. Jei antraštės trūksta arba ji neturi jokios reikšmės, taikomas ROUND_ROBIN algoritmas.
- URL adresas – Kiekviena HTTP GET užklausa ieško URL parametro, nurodyto kaip argumentas. Jei po parametro yra lygybės ženklas ir reikšmė, tada reikšmė yra maišoma ir padalyta iš bendro veikiančių serverių svorio. Rezultatas rodo, kuris serveris gauna užklausą. Šis procesas naudojamas siekiant sekti vartotojų ID užklausose ir užtikrinti, kad tas pats vartotojo ID visada būtų siunčiamas į tą patį serverį, kol visi serveriai bus pasiekiami.
- Narių bloke spustelėkite +, kad įtrauktumėte serverius į telkinį.
Čia reikia nurodyti:- serverio pavadinimas;
- Serverio IP adresas;
- prievadas, kuriuo serveris gaus srautą;
- prievadas sveikatos patikrinimui (Monitor healthcheck);
- svoris – šiuo parametru galite reguliuoti proporcingą srauto kiekį, gaunamą konkrečiam telkinio nariui;
- Max Connections – maksimalus prisijungimų prie serverio skaičius;
- Minimalūs ryšiai – minimalus jungčių skaičius, kurį serveris turi apdoroti, kad srautas būtų persiunčiamas kitam telkinio nariui.
Taip atrodo galutinis trijų serverių fondas.
Pridedamas virtualus serveris
- Eikite į skirtuką Virtualūs serveriai. Spustelėkite +.
- Suaktyviname virtualų serverį naudodami Įgalinti virtualų serverį.
Suteikiame jam pavadinimą, pasirenkame anksčiau sukurtą Application Profile, Pool ir nurodome IP adresą, kuriuo Virtualusis serveris gaus užklausas iš išorės. Nurodome HTTPS protokolą ir 443 prievadą.
Pasirenkami parametrai čia:
Ryšio riba – maksimalus virtualaus serverio vienu metu galimų prisijungimų skaičius;
Ryšio greičio riba (CPS) – maksimalus naujų įeinančių užklausų skaičius per sekundę.
Tai užbaigia balansyro konfigūraciją, galite patikrinti jo funkcionalumą. Serveriai turi paprastą konfigūraciją, leidžiančią suprasti, kuris serveris iš telkinio apdorojo užklausą. Sąrankos metu pasirinkome Round Robin balansavimo algoritmą, o kiekvieno serverio svorio parametras yra lygus vienetui, todėl kiekvieną paskesnę užklausą apdoros kitas serveris iš telkinio.
Naršyklėje įvedame išorinį balansyro adresą ir matome:
Atnaujinus puslapį, užklausą apdoros šis serveris:
Ir vėl - patikrinti trečiąjį serverį iš baseino:
Tikrindami matote, kad sertifikatas, kurį mums siunčia Edge, yra tas pats, kurį sugeneravome pačioje pradžioje.
Tikrinama balansyro būsena iš Edge gateway konsolės. Norėdami tai padaryti, įveskite parodyti serviso apkrovos balansavimo baseiną.
„Service Monitor“ konfigūravimas, kad būtų galima patikrinti telkinyje esančių serverių būseną
Naudodami „Service Monitor“ galime stebėti serverių būseną baziniame baseine. Jei atsakymas į užklausą nėra toks, kokio tikėtasi, serverį galima išimti iš telkinio, kad jis negautų jokių naujų užklausų.
Pagal numatytuosius nustatymus sukonfigūruoti trys patvirtinimo metodai:
- TCP monitorius,
- HTTP monitorius,
- HTTPS monitorius.
Sukurkime naują.
- Eikite į skirtuką Paslaugų stebėjimas, spustelėkite +.
- Pasirinkite:
- naujo metodo pavadinimas;
- užklausų siuntimo intervalas,
- laukimas atsakymo,
- stebėjimo tipas – HTTPS užklausa naudojant GET metodą, numatomas būsenos kodas – 200(OK) ir užklausos URL.
- Tai užbaigia naujojo paslaugų monitoriaus sąranką; dabar galime jį naudoti kurdami telkinį.
Taikymo taisyklių nustatymas
Taikymo taisyklės yra būdas manipuliuoti srautu pagal tam tikrus aktyviklius. Naudodami šį įrankį galime sukurti išplėstines apkrovos balansavimo taisykles, kurios gali būti neįmanomos naudojant programų profilius ar kitas Edge Gateway teikiamas paslaugas.
- Norėdami sukurti taisyklę, eikite į balansyro skirtuką Taikymo taisyklės.
- Pasirinkite pavadinimą, scenarijų, kuris naudos taisyklę, ir spustelėkite Laikyti.
- Sukūrę taisyklę, turime redaguoti jau sukonfigūruotą virtualųjį serverį.
- Skirtuke Išsamiau pridėkite mūsų sukurtą taisyklę.
Aukščiau pateiktame pavyzdyje įjungėme tlsv1 palaikymą.
Dar pora pavyzdžių:
Nukreipkite srautą į kitą baseiną.
Naudodami šį scenarijų galime nukreipti srautą į kitą balansavimo telkinį, jei pagrindinis telkinys neveikia. Kad taisyklė veiktų, balansavimo priemonėje turi būti sukonfigūruoti keli telkiniai ir visi pagrindinio telkinio nariai turi būti išjungtos būsenos. Turite nurodyti telkinio pavadinimą, o ne ID.
acl pool_down nbsrv(PRIMARY_POOL_NAME) eq 0
use_backend SECONDARY_POOL_NAME if PRIMARY_POOL_NAME
Peradresuokite srautą į išorinį šaltinį.
Čia nukreipiame srautą į išorinę svetainę, jei neveikia visi pagrindinio telkinio nariai.
acl pool_down nbsrv(NAME_OF_POOL) eq 0
redirect location http://www.example.com if pool_down
Dar daugiau pavyzdžių
Tai viskas apie balansuotoją. Jei turite klausimų, klauskite, aš pasiruošęs atsakyti.
Šaltinis: www.habr.com