Sto cercando un buon bilanciamento del carico da utilizzare con Tomcat. La nostra applicazione non memorizza nulla nel contesto della sessione, quindi non è importante reindirizzare allo stesso server per lo stesso utente. Mi piacerebbe semplicemente qualcosa che possa accodare richieste round-robin style o basate sul carico inidividuale di ogni server. Mi piacerebbe anche essere in grado di aggiungere server di applicazioni a quelli disponibili per gestire le richieste senza dover riavviare il bilanciamento del carico. Stiamo eseguendo l'applicazione su Linux se questo è importante.Soluzioni di bilanciamento del carico Tomcat
risposta
Se tutto ciò che serve è un bilanciatore di carico software su uso Linux Apache WEBSERVER2, Mod-Jk e Tomcat Clustering:
Al vostro web server:
1) Installare apache2 e modjk:
sudo apt-get install apache2 libapache2-mod-jk
sudo a2enmod jk
2) Creare un file "workers.properties" disponibile per apache2. In alcuni casi viene automaticamente creato nella directory/etc/apache2. Questo file tiene le lb config, i nomi dei nodi, IPS e le porte dei server Tomcat, cioè .:
worker.list=balancer,lbstats
#node1
worker.node1.type=ajp13
worker.node1.host=NODE-IP
worker.node1.port=NODE-AJP-PORT
worker.node1.lbfactor=10
#more nodes here ... (change name in between)
#lb config
worker.balancer.type=lb
#turn off sticky session
worker.balancer.sticky_session=0
#add all defined node names to this list:
worker.balancer.balance_workers=node1
#lb status information (optional)
worker.lbstats.type=status
3) Creare una sezione Mod-Jk nel file di apache2 di configurazione, se non è stato creato automaticamente.
JkWorkersFile /etc/apache2/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkShmFile /tmp/jk-runtime-status
JkLogLevel info
4) Montare l'applicazione per il bilanciamento del carico (file apache2 config):
JkMount /MyApp balancer
JkMount /MyApp/* balancer
JkMount /modjkstatus lbstats
AI server Tomcat:
5) Installare Tomcat utilizzando il pacchetto tarball (meglio allora la verison apt). Cambia server.xml:
- disabilitare i connettori http.
- abilitare il connettore AJP/1.3 e impostare la porta definita in workers.properties per questo nodo.
aggiungere jvmRoute con il nome del nodo destra all'elemento "Motore":
<Engine jvmRoute="node1" ...
aggiungere un elemento di "cluster" per semplice configurazione
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
6) distribuire l'applicazione a tutti i tomcats e aggiungi un elemento distribuibile al tuo web.xml.
<distributable/>
7) Assicurarsi che il server web in grado di accedere alle porte AJP sui server Tomcat e nessun altro può.
8) Avviare il server Web ei tomc uno dopo l'altro e controllare i registri (/var/log/apache2/mod_jk.log, anche).
9) Accesso vostra applicazione: http://mywebserver.com/MyApp
10) Controllare (e negare l'accesso alla) nella pagina di stato lb http://mywebserver.com/modjkstatus
Quanto è grande di un'applicazione stai parlando qui?Se sono solo due server a gestire il carico, è possibile farlo a livello di server Web. Se stai guardando più di 5 server potresti voler guardare a soluzioni commerciali. – Sean
Probabilmente 5+ server. –