Para correr multiples instancias de Tomcat en el mismo servidor.
Tengo un Tomcat instalado en un RHEL5 en /opt/apache-tomcat-5.5.23 con una liga simbólica de /opt/tomcat5
Dentro de esta instalación en /opt/tomcat5/conf/server.xml tengo configurados varias aplicaciones. Teniendo varias desventajas.
- Si una aplicación consume muchos recursos, todas las demás bajan de rendimiento.
- Si una aplicación congela el JVM, las demás dejan de funcionar también.
No es práctico tener una instancia para cada aplicación, sobre todo cuando estas son pequeñas soluciones.
Ahora estoy desarrollando para Tomcat 6 y no quise migrar todas la aplicaciones ya configuradas y probadas en Tomcat 5.5.
Cree un directorio nuevo /var/tomcat y extraje el último Tomcat 6 en /var/tomcat/apache-tomcat-6.0.16
Cree otro directorio, exclusivo para mi instancia lo llamé serverB (pensando en que luego habrá un serverA y un serverC) y cree el siguiente árbol.
|-- conf
| |-- server.xml
| |-- tomcat-users.xml
| `-- web.xml
|-- logs
| `-- catalina.out
|-- temp
|-- webapps
`-- work
Ahora viene lo bueno.
Para correr la instancia y que no choque con la que ya está corriendo, hay que cambiar algunos puertos.
<Service name="Catalina">
<Connector port="8082" URIEncoding="UTF-8" />
<!-- Define an AJP 1.3 Connector on port 8020 -->
<Connector port="8020" enableLookups="false" redirectPort="9972" protocol="AJP/1.3"
URIEncoding="UTF-8" />
Creamos un script de arranque,
run
#!/bin/sh -e
JAVA_HOME="/usr/lib/jvm/java-1.5.0-sun-1.5.0.11"
JAVA_OPTS="-Xmx800m -Xms800m"
#CATALINA_HOME=/opt/tomcat5
CATALINA_HOME=/var/tomcat/apache-tomcat-6.0.16
CATALINA_BASE=/var/tomcat/serverB
export JAVA_HOME JAVA_OPTS CATALINA_HOME CATALINA_BASE
# -p preserves the environment (for $JAVA_HOME etc.)
# -s is required because tomcat's login shell is /bin/false
su -p -s /bin/sh tomcat -c "$CATALINA_HOME/bin/catalina.sh start"
y un script de parada
stop
#!/bin/sh -e
JAVA_HOME="/usr/lib/jvm/java-1.5.0-sun-1.5.0.11"
JAVA_OPTS="-Xmx800m -Xms800m"
CATALINA_HOME=/var/tomcat/apache-tomcat-6.0.16
CATALINA_BASE=/var/tomcat/serverB
export JAVA_HOME JAVA_OPTS CATALINA_HOME CATALINA_BASE
su -p tomcat -c "$CATALINA_HOME/bin/catalina.sh stop"
Ahora tenemos otro Tomcat corriendo en el mismo servidor con puertos diferentes. Creamos un workerb en /etc/httpd/conf/worker.properties apuntando al puerto 8020.
worker.workerb.port=8020
worker.workerb.host=localhost
worker.workerb.type=ajp13
worker.workerb.lbfactor=1
y listo!