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.
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!

3 comentarios:
Y si quiero actualizar las clases del catalina home, tengo q bajarlo y subirlo.
Pero en el 8082 seguira atendiendo el catalina base sin interrupciones. Cierto ???
cuales serian las instrucciones para eso (bajar y subir cada tomcat independiente).?
Cada script de arranque y parada definen la variable de ambiente CATALINA_BASE, de ella toma el conf/server.xml del árbol de la instancia que estás operando.
Como buena práctica, ten una copia de los scripts de arranque y parada en cada árbol de tus instancias de Tomcat.
No consigo hacerlo funcionar...
En mi instalación el archivo catalina.sh no existe.
Publicar un comentario en la entrada