Sziasztok!
Szeretnek egy http-frontend szervert osszerakni de sajnos nem mukodik tokeletesen.Funkcioja szerint szetosztja a kereseket a backend szerverek kozott mikozben a statikus tartalmat a sajat cache-ebol szolgalja ki. Mindezt egy apache2 szerverrel es a kovetkezo modulokkal:
-
* mod_proxy
* mod_proxy_balancer
* mod_proxy_http
* mod_cache
* mod_mem_cache
* mod_disk_cache
A konfig fajlok a kovetkezok:
frontend
<IfModule mod_cache.c>
<IfModule mod_disk_cache.c>
CacheMinFileSize 1
CacheMaxFileSize 52428800
CacheDirLength 4
CacheDirLevels 4
CacheRoot /var/cache/apache2/mod_disk_cache
</IfModule>
<IfModule mod_mem_cache.c>
MCacheMinObjectSize 1
MCacheMaxObjectSize 1048576
MCacheMaxObjectCount 65536
MCacheSize 1572864
MCacheRemovalAlgorithm GDSF
</IfModule>
#UseCanonicalName On
CacheDefaultExpire 14400
CacheMaxExpire 86400
CacheEnable mem /
CacheEnable disk /
</IfModule>
ProxyRequests Off
ProxyIOBufferSize 8192
ProxyReceiveBufferSize 65535
ProxyMaxForwards 1000
ProxyTimeout 30
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Proxy balancer://proba_cluster>
BalancerMember http://www1.proba.hu route=ha1
BalancerMember http://www2.proba.hu route=ha2
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass /balancer-manager !
ProxyPass /server-status !
ProxyPass / balancer://proba_cluster/ stickysession=BALANCEID nofailover=On
ProxyPassReverse / http://www1.proba.hu/
ProxyPassReverse / http://www2.proba.hu/
backend 1
RewriteEngine On
RewriteRule .* - [CO=BALANCEID:balancer.www1:.proba.hu]
backend 2
RewriteEngine On
RewriteRule .* - [CO=BALANCEID:balancer.www2:.proba.hu]
A problemam az, hogy ha be van kapcsolva a mem_cache vagy a disk_cache kozul barmelyik vagy akar mindketto akkor elofordul, hogy hiaba van a stickysession szerint a www1 szerveren a kliens egyszer csak atrakja a masik szerverre. Ilyenkor elveszlik a session.
Nem talalok logikus magyarazatot, hogy miert tortenik ez. Mi koze lehet a cache-nek ehhez? Mit csinalok rosszul?
- 1600 megtekintés
Hozzászólások
Bocs az offtopic-ért, de ilyet inkább squid reverse proxy-val szokás csinálni, esetleg PLB-vel.
Apache az egyik legkevésbé hatékony megoldás erre a célra.
- A hozzászóláshoz be kell jelentkezni
Az altalad emlitett ket megoldas kulon-kulon tudja a load-balance es cache funkciokat. Nekem mindkettore szuksegem van egy gepen.
Osszerakhato a squid reverse proxy es egy barmilyen load balancer (pl. haproxy) egy gepen?
--
maszili
- A hozzászóláshoz be kell jelentkezni
Virtualizáció nem jöhet szóba ezen a gépen?
- A hozzászóláshoz be kell jelentkezni
Nem bonyolitanam a dolgot ha nem muszaly...
--
maszili
- A hozzászóláshoz be kell jelentkezni
Miért lenne ez bonyolítás :)?
- A hozzászóláshoz be kell jelentkezni
Hogyan kepzeled a dolgot, hogy ne legyen bonyolultabb mint egy apache a szerveren?
--
maszili
- A hozzászóláshoz be kell jelentkezni
Squid-ben be lehet állítani egy redirectort, ami a bejövő URL és egyéb adatok alapján állítja elő a kimenő URL-t. Ez akár egy bash script is lehet, ami stdin-en kapja a bejövő adatokat és stdout-on adja a kimenetét (persze jobb egy C/C++ progi).
Létezik egy csomó ilyen redirector mindenféle célokra, köztük load balancerek is, de ezeket még nem próbáltam, mert én sajátot írtam a speciális igények miatt.
- A hozzászóláshoz be kell jelentkezni
Tehat azt mondod, hogy egy ilyen felallas megoldhato?
[server1]...[serverN] <====> [ haproxy <---> squid ] <====> [client]
--
maszili
- A hozzászóláshoz be kell jelentkezni
haproxy-t nem ismerem, szerintem keress inkább "load balancing squid redirector"-ra a google-ben.
Amúgy asszem egyszerű load balancing támogatás is van már a mostani squid-ben.
- A hozzászóláshoz be kell jelentkezni
Amúgy asszem egyszerű load balancing támogatás is van már a mostani squid-ben.
Ha ez az...
http://wiki.squid-cache.org/SquidFaq/ReverseProxy#head-81d06e5a0d3a3ed4…
...akkor tenyleg eleg egyszeru :) Session kovetesrol nem talaltam semmit.
--
maszili
- A hozzászóláshoz be kell jelentkezni
Ja igen...
Session követést nem tudott régen a squid, át is kellett írni, hogy a session-cookie-t is továbbítsa a redirectornak (elég egyszerű hack amúgy).
Lehet, hogy az újba ezt már betették, de ezt nem tudom, csak renmélem...
Ha idengenkedsz a squid hackelésétől, akkor tényleg kell haproxy vagy plb vagy valami hasonló is mellé. Nagyon valószínű, hogy még így is sokkal jobban fog teljesíteni, mintha apache lenne.
- A hozzászóláshoz be kell jelentkezni
Na találtam is ilyen patch-et, bár ez elég régi.
- A hozzászóláshoz be kell jelentkezni
Nekem az apache teljesitmenyevel nincs semmi bajom. Rengeteg szalon nagyon gyorsan kepes kiszolgalni es a disk_cache, mem_cache hatekonyan gyorsitja a kiszolgalast. Csak sajnos ez az anomalia felboritja az egesz tervet...
Es az a szomoru hogy ilyen apache2 megoldast (proxy + palancer) meg nem lattam dokumentalva a neten. Egyeb doksiban emlitik a ketto egyuttmukodeset. Tehat elviekben mukodnie kellene. Ezert azt tartom valoszinunek, hogy en valamit elrontok a konfig fajlokban.
Azert fordultam az itteni kozosseghez segitsegert, hatha talalkozott mar valaki ilyen hibaval.
--
maszili
- A hozzászóláshoz be kell jelentkezni
Ja, néhány száz konkurens kapcsolatig jó lehet Apache is (fontos, hogy ez nem egyidejű felhasználó, hanem kapcsolat, tehát nyitott socket).
Több ezer párhuzamos socket-nél viszont apache biztosan bedől, squid viszont vígan megy.
- A hozzászóláshoz be kell jelentkezni
Nem kotekedesbol kerdezem...
Tehat azt mondod, hogy egy apache2-mpm-worker (nincs php mert csak statikus tartalmat kell kiszolgalni) 200 child processzel processzenkent 50 szalon (~10000) nem fog elboldogulni a feladattal? Mik a tapasztalataid?
--
maszili
- A hozzászóláshoz be kell jelentkezni
Vagy 4-5 éve vacakoltam ezzel, de az a helyzet, hogy apache akkoriban iszonyú erőforrás-igényes volt squid-hez képest. Ezt az mpm verziót nem próbáltam, de az tény, hogy squid non-blocking architektúrája már elméleti szinten is sokkal alkalmasabb proxy célokra, mint az apache "socket-en blokkoló szálak" megoldása.
Mindenesetre squid bevált és ha jól tudom, azóta sincs semmi gond a rendszerrel, pedig ott tényleg előfordul több ezer nyitott socket egy időben. Ráadásul az még a régi select-es squid verzió volt.
Azóta sqiud képes használni a kernel epoll interface-ét is, ami lényegesen hatékonyabbá teszi.
Itt egy összehasonlítás is:
http://monkey.org/~provos/libevent/libevent-benchmark.jpg
- A hozzászóláshoz be kell jelentkezni
nálam haproxy helyett pound proxy van. szóval megoldható. a squid localhost-ra küldi kérést, ott meg a pound figyel és adja tovább a webszerverek felé.
- A hozzászóláshoz be kell jelentkezni
kiprobaltam en is es nalam is ezt csinalja. te milyen bongeszovel probaltad? nem teszteltem agyon, de nekem ugy tunt, csak explorer alatt csinalja. firefox alatt nem.
- A hozzászóláshoz be kell jelentkezni