In questo documento vedremo come effettuare load balancing su tomcat utilizzando il nuovo mod_proxy_balancer di Apache HTTPD 2.2. Si da per scontato che il lettore abbia un minimo di familiarità con i prodotti Apache Httpd e Apache Tomcat, e con il concetto di clustering e, di conseguenza, di bilanciamento di carico. In ogni modo definiamo comunque dei termini che ci torneranno utili nella discussione seguente:
- Load balancing: le richieste degli utenti vengono processate da più server che si dividono il carico equamente.
- Server affinity (sticky session): Attraverso il sistema di “server affinity” le richieste di uno stesso utente vengono processate dallo stesso server.
- jsessionid: E’ un codice univoco che viene rilasciato dal Tomcat al browser dell’utente finale e che identifica univocamente la sessione dell’utente sull’applicazione deployata dal Tomcat.
- Worker name: E’ il nome che viene assegnato univocamente al Tomcat. Ogni Tomcat che compone il cluster ha un worker name differente.
Load Balancing con server affinity
Come detto Apache implementa server affinity attraverso la riscrittura del jsessionid inviato dal Tomcat al browser. Il Tomcat worker name viene aggiunto alla fine del jsessionid, prima che tale id venga inviato dal Tomcat al browser. Alla prossima richiesta che l’utente effettua con un determinato jsessionid, il Tomcat che la riceve legge il worker name e la richiesta viene delegata al Tomcat “proprietario” del worker name.
Ora andiamo alla configurazione. Ipotizziamo di avere una struttura simile a quella della figura qui sotto
nella quale un Apache accetta le richieste destinate ad una webapp in cluster all’interno di due istanze di Tomcat.
Il primo step è controllare di aver abilitato i seguenti moduli Apache:
- mod_proxy
- mod_proxy_balancer
- mod_proxy_ajp
- mod_proxy_connect
- mod_proxy_ftp
- mod_proxy_http
Quindi apriamo il file di configurazione httpd.conf e inseriamo questa parte di codice
ProxyPass /balancer-manager !
ProxyPass /apache-balancing balancer://scarletcluster/ stickysession=JSESSIONID
<Proxy balancer://mycluster>
BalancerMember ajp://tomcat1_server:tomcat1_ajp_port/apache-balancing route=worker_name1 loadfactor=50
BalancerMember ajp://tomcat2_server:tomcat2_ajp_port/apache-balancing route=worker_name2 loadfactor=50
</Proxy>
Abbiamo deciso di far dialogare Apache e Tomcat attraverso ajp, ma è possibile effettuare la medesima configurazione anche contattando tomcat via http. Ovviamente è necessario customizzare alcune parti:
- al posto di ”/apache-balancing” inserite il vostro context (che deve essere uguale a quello di Tomcat). Ovviamente può anche essere /.
- al posto di tomcat1_server e tomcat1_ajp_port inserite l’ip o il FQDN del server 1 e la porta AJP. Stessa cosa con tutti gli altri nodi (BalancerMember) che definite.
- al posto di worker_name1 inserite il worker name che volete identifichi univocamente il tomcat. Stessa cosa con tutti gli altri nodi che definite.
- il _loadfactor_ può essere un numero compreso fra 1 e 100.
Ora continuiamo la configurazione che interessa il file di configurazione dei Tomcat, server.xml aggiungendo il worker name, in questa maniera.
...
<Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”worker_name1″>
…
Stessa cosa facciamo col file server.xml del tomcat che corrisponde al worker_name2. Quindi abilitiamo sempre su ogni server.xml (se non fosse già abilitato) il Connector Ajp, decommentando queste righe
<Connector port="8009" redirectPort="8443" protocol="AJP/1.3" />
Dovrebbe bastare. Restartiamo i due Tomcat e l’Apache di frontend e proviamo a puntare l’indirizzo mod_proxato sull’Apache: dovremmo riuscire a navigare l’applicazione tranquillamente. Possiamo controllare la jsessionid attraverso Firefox o utilizzando l’add-on Firebug sempre per Firefox.






















Related Articles
2 users responded in this post
ma non andava bene il mod_jk??
ovviamente si…ma io preferisco mod_proxy. In fin dei conti il balancer è una novità importante lato-apache, e il mod_jk a volte mi ha dato strani comportamenti.
Cmq poi diventa una questione di come uno preferisce lavorare…ci credo poco alle verità assolute io!
Cmq ciao e grazie di aver postato…sei ufficialmente il primo…è un blog abbastanza nuovo…
Daniele
Leave A Reply
Please Note: Comment moderation maybe active so there is no need to resubmit your comments