Load balancing, heartbeat, haproxy, tomcat (3 webapp)

 ( gaabeesz | 2012. október 24., szerda - 12:59 )

Üdv!

Adott 2 vas, amely frontendként üzemel.

Mind a két gépen:

  • 1 publikus ip cím,
  • 1 beslő ip cím,
  • heartbeat,
  • haproxy,
  • tomcat (3 webapp)

Közös:

  • 1 db publikus ip cím
  • 3 db domain (3 webapp)

A működés jelenleg:

Aktív gép:

  • A "Közös" ip címet viseli (hearbeat), erre mutatnak a domainek és a haproxy a 80-as portra hallgat
  • A webappok a 8080-as portot viselik, alapértelmezetten erre mutat a haproxy és a session mögé fűzi az aktív gép host nevét
  • A tomcat be van állítva, hogy a passzív géppel clustert alkosson
  • Háttérfolyamatokat futtat megosztva a passzív géppel

Passzív gép:

  • A webappok a 8080-as portot viselik
  • Kívülről nem elérhetőel a webappok
  • Háttérfolyamatokat futtat megosztva az aktív géppel
  • A tomcat be van állítva, hogy az aktív géppel clustert alkosson

Szeretnénk megoldani, hogy valamilyen load balancing legyen a két gép között, mivel már elég nagy a terhelés. Fontos, hogy a munkamenetek érvényesek legyenek mind a két gépen, tehát ne kelljen újra bejelentkezni. Akinek van ilyesmivel tapasztalata, ötlete az kérem ossza meg velem. Előre is köszi! (Később feldobom a jelenlegi konfigot.)

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

subscribe

+1

A haproxy tud terhelés elosztást és azt írtad, hogy "A tomcat be van állítva, hogy a passzív géppel clustert alkosson". Így ha kiesik az egyik gép akkor a felhasználó nem vesz észre semmit.

Egyébként rendes üzemmenet esetén a haproxy megjegyzi, hogy melyik klienst melyik szerverre irányította, ezért nem jelentkezik session probléma.

Szerk.
Itt találhatsz hasznps infót: http://haproxy.1wt.eu/download/1.2/doc/architecture.txt

--
maszili

Sziasztok!

Bocsi, hogy csak most írok, de csak most jutottam el oda, hogy válaszoljak.

Ez a doksi sokat segített köszönöm! A roundrobin-t választottuk, működik is. Már csak annyit kellene megoldani, hogy a kliensek ip-címét továbbítsuk valamilyen úton módon, mivel van kivezetésünk, amelyet csak bizonyos ügyfelek láthatnak, és ip cím alapján van testreszabva. Ez egy rss kivezetés, amit egy speckó programmal látogatnak, viszont a program nem ismeri az auth-ot. (Próbáltuk rábeszélni őket a ms outlook-ra). Gondoltam már Iptables-re, viszont kellene a statisztikához a "látogató" ip címe, mert így csak localhostról érkeznek kérések a webappokba. A másik probléma, hogy néha mégsem jegyzi meg a session-t a haproxy, mivel néha előfordul, főleg ajax esetén, hogy elhasal a webapp session hiba miatt.

listen webfarm 192.168.1.1:80
mode http
balance roundrobin
cookie SERVERID insert indirect
option httpchk HEAD /index.action HTTP/1.0
server frontend-0 192.168.1.11:8080 cookie A check
server frontend-1 192.168.1.12:8080 cookie B check

a megfejtés: x-forwarded-for
ebben a http fejlécben utazik a kliens ip miután átszálguldott a haproxy-n

option forwardfor

http://code.google.com/p/haproxy-docs/wiki/forwardfor

Ezt meg inkább valahogy így probáld:

listen webfarm 192.168.1.1:80
mode http
balance roundrobin
cookie SERVERID insert indirect
option httpchk HEAD /index.action HTTP/1.0
option forwardfor
server frontend-0 192.168.1.11:8080 cookie A check inter 2000 rise 2 fall 2
server frontend-1 192.168.1.12:8080 cookie B check inter 2000 rise 2 fall 2

Ha apache van mögötte a mod_rpaf ... és beállítod, hogy mire cserélje az ip-t ha "proxyzott" vagy "loadbanc-szolt" címről jön...
Én ezt a megoldást használom az OracleWebCache mögötti kiszolgálóknál.


Ha átadod a tudásod neked attól még nem lesz kevesebb belőle..

Az IP cím problémára ott a megoldás a dokumentumban amit linkeltem:

- if the application needs to log the original client's IP, use the
   "forwardfor" option which will add an "X-Forwarded-For" header with the
   original client's IP address. You must also use "httpclose" to ensure
   that you will rewrite every requests and not only the first one of each
   session :

        option httpclose
        option forwardfor

   The web server will have to be configured to use this header instead.
   For example, on apache, you can use LogFormat for this :

        LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b " combined
        CustomLog /var/log/httpd/access_log combined

--
maszili

+1
--
A legértékesebb idő a pillanat amelyben élsz.
http://phoenix-art.hanzo.hu/
https://sites.google.com/site/jupiter2005ster/

ldirectord ?

s

vagy: haproxy helyett lehet squid is. roundrobin stb. ez is tudja.
sajna ipket nem tudja forwardolni, de lehet hogy nem is kell, mivel így egy szerveren egy fájlban meglesz minden log a valódi forrás ipkkel. Tehát a backend szervereken nem is kell logolni.(ipt.)

\o\ |o| /o/