Sziasztok,
valakinek tapasztalata nyílt (free?) szoftverrel ami tudja https loadbalance-ot cookie alapuló sticky session-nel?
Esetleg működő példán bemutatva...
TamsA
- 8494 megtekintés
Hozzászólások
Akad tapasztalat.
Ami ilyet tud: apache2, nginx
- A hozzászóláshoz be kell jelentkezni
Ezek mennyire tekinthetőek "könnyűsúlyúnak"?
Igazából az ldirectord amit le kellene cserélni ...
Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..
- A hozzászóláshoz be kell jelentkezni
hát, figy, nem egy szinten vannak.
ha cookie, vagy bármi ami a forgalomban magában van alapján akarsz dönteni, fel kell dolgoznod a forgalmat, így layer 7-es alkalmazás kell. Nginx, lighttpd, varnish, meg még tonnaszám van ilyen program amivel ezt meg lehet tenni.
ldirectord csak a hálózati forgalmat figyeli, layer 4-5ben, az csak annyit tud, hogy ilyen ip ilyen port, és azt vagy routolja tovább vagy natolja, beállítástól függően. de abba a csomagba aztán akkor akármi lehet, nem foglalkozik vele.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Nginx-el egy működő példa:
http://www.ramkitech.com/2013/01/tomcat-clustering-series-part-5-nginx…
- A hozzászóláshoz be kell jelentkezni
just restart the server, u feel like sticky session concept, világos :) de pont cookie-t nem tud.
- A hozzászóláshoz be kell jelentkezni
haproxy?
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
ami nekem kell az a dev ágban van benne (1.5)
Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..
- A hozzászóláshoz be kell jelentkezni
használok 1.4-es ágat éles rendszerben (nagyon nagy terhelés mellett) és eddig teljesen stabil és megbízható. 1.5 ágat saját szerveremen használom, ha belefér az időnkénti downtime hogy frissíts, akkor szerintem jó barátok lehettek:)
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
off on
Imádom amikor a xarul tervezett rendszert kell pikk pakk ingyé működő képessé tenni.
off off
Pound >> jónak tűnik
apache2 >> ilyet csináltam már, de pont attól tartok hogy elfogynak az erőforrások alóla
ngnix >> nem használtam még... de attól tartok apache2-höz hasonló
haproxy >> dev (1.5) ág jónak tűnik
oracle webcache >> értek hozzá / stabil / kicsit pazarlós/ de fizetős
Majd beszámolok ...
- A hozzászóláshoz be kell jelentkezni
nginx-nek köze nincs az apachehoz, teljesen más a felépítése is már.
- A hozzászóláshoz be kell jelentkezni
+1
Az nginx async, az apache meg worker/thread pool. Hála égnek köze nincs egymáshoz a kettőnek:)
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
jaja.
Használatban van nálunk is reverse proxyként és terheléselosztóként, napi átlag 2 ezer aktív kapcsolat van rajta (mármint folyamatosan, nem naponta), mindezt pár 512 megás VPS-be.
- A hozzászóláshoz be kell jelentkezni
Webcache-t felejtsd el, szálkezelést tekintve ipari hulladék, sok szopással, gyatra konfigurációs lehetőségekkel, és csúnya hack-ekkel.
HaProxy kell neked, de nem értem, miért mondod, hogy csak a dev ág jó neked. Hasonlót csináltam már az 1.3-as ágon is emlékeim szerint.
- A hozzászóláshoz be kell jelentkezni
esetleg erre egy működő konfig ?
Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..
- A hozzászóláshoz be kell jelentkezni
A dokumentációban rengeteg példa van. Még HTTPS is.
http://haproxy.1wt.eu/download/1.5/doc/configuration.txt
--
maszili
- A hozzászóláshoz be kell jelentkezni
Nézd meg az url-t, 1.5 -ös ág a DEV
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Nem az nem jó, mert nem tudja kibontani a https-t így a cookie-khoz sem fér hozzá. Ennek egyenesági következménye, hogy az alapján sticky routing-ot sem tudja.
Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..
- A hozzászóláshoz be kell jelentkezni
És miért fontos neked, hogy maga a LB bontsa az SSL-t?
Évekkel ezelőtt valósítottam meg az általad vágyott megoldást, egy stunnel-lel a haproxy előtt. Tökéletesen működött.
A haproxy ssl moduljának igazából annyi plusz értelme van, hogy SSL session alapján tudsz sticky-t csinálni.
- A hozzászóláshoz be kell jelentkezni
Fontos, mert egyébként nem látja a http fejlécben lévő cookie-t. Az stunnel performance szempontból meg elég szar, gyakorlatilag nincs értelme egy load balancer elé rakni
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
Elég jól működött enterprise környezetben 2-3000 konkurens felhasználóval.
Nem tudom, mikor használtál utoljára stunnel-t, amikor "performance szempontjából" elég szar volt.
- A hozzászóláshoz be kell jelentkezni
Ha alacsonyabb hálózati réteg szintjén megy a forgalom továbbítás akkor saját nyilvántartás szerint dolgozik a haproxy. Megjegyzi, hogy melyik kliens melyik backend szerverhez tartozik.
TCP mode
--------
In this mode, the service relays TCP connections as soon as they're established,
towards one or several servers. No processing is done on the stream. It's only
an association of source(addr:port) -> destination(addr:port). To use this mode,
you must specify 'mode tcp' in the 'listen' section. This is the default mode.
Example :
---------
listen smtp_proxy 0.0.0.0:25
mode tcp
--
maszili
- A hozzászóláshoz be kell jelentkezni
Igen, csak hogy a saját nyilvántartás nem más mint a source IP... ami viszont nem jó... (ezt teszi az ldirectord is)
Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..
- A hozzászóláshoz be kell jelentkezni
Nem értelek.
(1) Ha beesik egy új kapcsolat akkor még nincs sesion így a balancer valahogyan eldönti, hogy melyik backend szerver felé továbbítsa a forgalmat.
(2) Az első pontból következik, hogy nem feltétlenül kell session alapján meghatározni, hogy egy adott kliens forgalmát melyik backend szerver felé kell továbbítani.
(3) Ha bármilyen nyilvántartás szerint sikerül egy már felépített kapcsolat forgalmát következetesen ugyanarra a backend szerverre irányítani akkor nem sérül a session.
Tehát hol a probléma?
--
maszili
- A hozzászóláshoz be kell jelentkezni
Akkor mi alapján?
Erre van a sessionid, vagy szerverid vagy bármi ... de ugye azt nem tudod az iphez kötni .. így http esetén kénytelen vagy vagy POST-ba, vagy GET-be csomagolni paraméterként... POST-ban https alatt utazik, tehát HAPROXY stable nem tudja kicsomagolni, GET+POST együtt meg nem használandó..
hát itt a probléma.
Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..
- A hozzászóláshoz be kell jelentkezni
Próbálj meg elvonatkoztatni a HTTP/HTTPS -től. A haproxy egy általános forgalom irányító rendszer és TCP szintjén is tud hálózati forgalmat továbbítani, ahol nincs semmilyen folyamat azonosító.
Nincs sessionid, nincs szerver azonosító, nincs semmi.
(1) Ha jön egy kliens akkor annak a forgalmát pl. round-robin beirányítja az egyik backend szerverhez. Nem néz bele a hálózati forgalomba mert nem érdekli hogy mi megy benne. (http,https,smtp,stb.)
(2) Az új kapcsolat adatait (kliens IP / backend IP) feljegyzi a saját nyilvántartásába.
(3) Ha újabb kérés érkezik a kliens felől akkor a saját nyilvántartása szerint ugyanarra a szerverre továbbítja így (http/https esetén) session tartó a forgalom továbbítás.
Remélem így már érthető mert ennél jobban már nem tudom elbábozni.
--
maszili
- A hozzászóláshoz be kell jelentkezni
A tipikus ellenpélda, hogy ha a kliens olyan peches, hogy round-robin proxyja van (létezik még ilyen egyáltalán?), vagy egyszerűen csak éppen megváltozik a dinamikus IP címe, akkor elveszítheti a sessionjét, és ezt csak alkalmazás szinten, cookie-val lehet lekezelni.
- A hozzászóláshoz be kell jelentkezni
bizony ez a bibi nálunk is... ha t. fejlesztésnél figyelembe vették volna azokat az irányelveket amitet mondtam (session state replication) akkor nem lenne baj.
De nem vették és egyre többen jönnek loadbalace-olt (több forrás ip) helyről.
- A hozzászóláshoz be kell jelentkezni
Visszakérdezek: az első kérésnél sticky session esetén, hogy dönti el az LB, hogy melyik szerverhez kerüljön a user?
Mert ugye még nincs cooke és sessionid sem.
- A hozzászóláshoz be kell jelentkezni
Ha nincs sticky akkor a belállított balance metodika alapján (roundrob. terhelés ,súly stb)
- A hozzászóláshoz be kell jelentkezni
https!!!
Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..
- A hozzászóláshoz be kell jelentkezni
Én értem, hogy https, de azt nem értem, miért lenne ez akadály.
- A hozzászóláshoz be kell jelentkezni
nginx +1
- A hozzászóláshoz be kell jelentkezni
Ha kellően kiheréled az apache2-ot akkor elég sokáig bírja.
Ha ez sem elég akkor gyanúm szerint az nginx is határon lesz.
Esetleg megpróbálhatsz iptables alapú LB-t és mögé teszed az apache2/nginx-et.
*Kiheréled= kikapcsolod az összes olyan modult amit nem használsz.
Mekkora a terhelés (req/sec), hogy szerinted karcsú az apache teljesítménye?
- A hozzászóláshoz be kell jelentkezni
Az apache és az nginx teljesen máshogy működik, máshogy skálázódik, így teljesen más teljesítményre is képes. Igaz, cserébe az nginx nem olyan univerzális.
- A hozzászóláshoz be kell jelentkezni
Tudom, hogy belül máshogy működnek, de gyanúm (nem próbáltam ki, szigorúan csak gyanú) ha az apache-ot "lebutítod" az nginx szintjére akkor 10%-20% eltérésen belül ugyanakkora teljesítményt hoznak.
Szigorúan saját vélemény: az nginx lesz gyorsabb.
- A hozzászóláshoz be kell jelentkezni
Nagyon nem igaz. Egyrészt hiába butítod le (gondolom itt a betöltött modulokat érted), akkor is egy nagyságrenddel gyorsabb lesz az nginx.
- A hozzászóláshoz be kell jelentkezni
Ez mar nem igaz es igazabol regebbi verzioknal sem volt minden esetben igaz. Ez a bekezdes jol elmagyarazza a valos helyzetet, ami a performance-t illeti (http://en.wikipedia.org/wiki/Apache_HTTP_Server):
The Apache 2.2 series was considered significantly slower than nginx for delivering static pages, although remaining significantly faster for dynamic pages. To address this issue, the Apache version considered by the Apache Foundation as providing high-performance is the multi-threaded version which mixes the use of several processes and several threads per process.[16] This architecture, and the way it was implemented in the Apache 2.4 series, provides for performance equivalent or slightly better than event-based webservers.
Viszont a lenyeg az igazan itt mutatkozik meg (http://blog.coralic.nl/2013/05/12/apache-2-4-vs-nginx-1-4/):
Nginx is supposed to use less resources so I used the “uptime” command before starting the test and right after the test, here are the results (measured only for test: 1000 users, 1000 times):
Server Average load before the test Average load after the test
apache 1,55, 0,33, 0,11 18,74, 9,97, 4,02
apache 0,69, 0,16, 0,05 1,02, 0,77, 0,36
It clearly shows that Nginx uses less CPU than Apache for the same work, the difference is so big you can see it by just looking at the system monitor.
- A hozzászóláshoz be kell jelentkezni
Itt most te statikus fájlkiszolgálást hozol példának, mikor az egész topikban proxyzásról van kvázi szó.
- A hozzászóláshoz be kell jelentkezni
Vagyis szepen latszik, hogy nem szokik a load nginx eseten es kevesebbet zabal kozel ugyanolyan kiszolgalas alatt. Ez csak egy dolgot jelent: van benne meg boven tartalek cpu es savszel szempontbol es jo eselyel az alatta levo hattertar nem volt kepes megfelelo rate-et hozni.
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
Az apache belső megoldásait tekintve nem képes az nginx-el felvenni a versenyt semmilyen szinten, leszámítva funkcionalitásban
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
Viszont nem terminálhatja el a https kapcsolatot a balancer, mert a https-t meg kell tartani egészen az appserverekig.... ez sajnos követelmény... Ha nem lenne az akkor már az IPS-ben meg tudnánk ezt oldani.
tehát így kell kinézzen:
kliens -https-->balancer --https--->appserv1
|->appserv2
\->appservn
Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..
- A hozzászóláshoz be kell jelentkezni
Ebben az esetben viszont nincs nem használhatsz layer7-es szintű LB-t. Pontosítok nem sok értelme van,még lassabb is lesz.
Performancia szempontjából az csak rossz, ha az LB kibontja az ssl-t majd újra létrehoz egyet a backend szerverek felé.
Mi az amiatt az LB-től is kell az SSL az app szerverekig? Ha azt mondod, hogy van olyan alkalmazásod ami megköveteli és ellenőrzi, hogy a kérés SSL-en jött be, akkor azt mondom, igen, láttam már ilyet és annak sem kellett az SSL az LB-től az appszerverig. Persze az LB-ig volt az SSL. (A félreértések végett nem írtam át a kódját, hogy menjen ssl nélkül!)
Az előző mondatom _biztosan_ csak JAVA-s alkalmazás esetén és TOMCAT/Glassfishben állja meg a helyét.
- A hozzászóláshoz be kell jelentkezni
Félinformációkat dobálsz, és vagdalkozol az "az nekem nem jó, meg amaz se" típusú válaszokkal, de azt nem vagy képes leírni, mi a francért nem opció valami, csak hogy "azt nem lehet".
Miért fontos a https a webszerverig? Meg kell kapja a webszerver a kliens tanúsítványt?
Miért kell megkapja? Ha kell a tanúsítvány bármelyik jellemzője, hátradobhatod a backendnek HTTP headerként.
Ha nem kell, akkor simán megoldod az SSL terminálást az LB-n, majd ugyanúgy mehetsz a backend szerverek felé SSL-en, semmi akadálya. Persze nem tesz jót a teljesítménynek, de valamit valamiért ugye.
- A hozzászóláshoz be kell jelentkezni
Sajnos a köveletményeket nem én írom...
eyebként lehet, h. valamilyen más módon fogom ezt kiváltani ... mert a kövelményben az van, hogy " ...a kommunikáció a teljes folyamat alatt (klienstől a végfelhasználási pontig) rejtjelezve kell történjen..."
Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..
- A hozzászóláshoz be kell jelentkezni
Ez jó, nincs benne, hogy ugyanazzal a protokollal kell, lb-ig https, utána mehet VPN-el, vagy bármilyen tunnel-el, ami egyszerűen megvalósítható, nincs kiírva, hogy nem mehet sima http-n a szerverig. Egyébként ezt úgy is lehet csinálni ha nincs sok belőle(<4), hogy minden appszerverre raksz egy http szervert amik sticky session-el hívják az appszervereket httpn, így a loadbalancer lehet buta majd az apache-ok elintézik, hogy minden mindig jó helyre menjen.
- A hozzászóláshoz be kell jelentkezni
Raadaskent az LB is lehet vegfelhasznalasi pont, ha a sajat infrastrukturat tekinted (nembeszelve arrol hogy ha nem, akkor meg felhasznalasi pontokig es nem pontig a megfelelo).
// Happy debugging, suckers
#define true (rand() > 10)
- A hozzászóláshoz be kell jelentkezni
Olyan write only vagy, hogy az már fáj.
Aztán próbáljon az ember segíteni.
Először leírtam, hogy semmitmondó válaszokat adsz, majd feltettem 3 kérdést. Erre megint egy olyan választ adtál, ami leginkább lópikulát sem ér, és csak az egyik kérdésre válaszoltál, félig, azt is véletlenül.
Na mindegy. Ahogy a másik két kolléga is írja: a legjobb, ami történhet, hogy ilyen elvontan fogalmazták meg a követelményt.
A problémád meg van oldva:
kliens ----(HTTPS)----> [ stunnel -----(HTTP)----> haproxy 1.3 ] ----(HTTP over ipsec)----> frontend http szerver
Mivel a haproxy és az stunnel azonos gépen fut, a követelményt teljesítetted.
- A hozzászóláshoz be kell jelentkezni
Ha vetted volna a fáradságot, hogy elolvasd a követelmény specifikációt, akkor magad is rájöttél volna, hogy amit felvázolsz az nettó hülyeség.
Az általad idézett specifikáció szerint "rejtjelezve" kell folynia az adatforgalomnak. Nos, mihamarabb terminálod az ssl-t tehát "kliens -https-->balancer", utána meg olyan rejtjelezési megoldást használsz, amit csak akarsz.
- A hozzászóláshoz be kell jelentkezni
+1
--
A legértékesebb idő a pillanat amelyben élsz.
http://phoenix_art.webmuvek.hu/
https://sites.google.com/site/jupiter2005ster/
- A hozzászóláshoz be kell jelentkezni
Nos, köszönöm a válaszokat.
Az hogy milyen megoldás fog 'játszani' azt majd vki eldönti.
Nekem egyebek iránt az szimpatikus, hogy az LB terminálja a kapcsolatot és dedikált titkosított csatornában kommunikál a backend szerverekkel http-n.
Talán így lehet minimális szoftveres erőforrással megoldani. Az biztos, hogy lassabb lesz mint az ldirectord.
Köszönet a hozzászólásokért mindenkinek!
TamsA
- A hozzászóláshoz be kell jelentkezni