Installing Multiple Instances on Tomcat on the same server

Tomcat is a pure JAVA HTTP server to host java applications. While testing these applications, we need multiple instances of Tomcat. We can achieve this as a scale out of Virtual Machines or deploy multiple instances of Tomcat on the same server.

 In this article, I want to go through the steps of creating multiple Tomcat instances on the same box. The instances can be the same version or multiple versions, for example, tomcat 6 and 7 running in harmony.

First, we need to get the JDK from oracle and the .tar from apache.

Next, we need to install the JDK on the system,

Installing JDK

Note: As of this writing the most up-to-date version of the JDK is version 7u7, and that is what im using for this article. Mind you it is the same process for previous versions.

Lets make the directory /usr/java and go to it:

mkdir -p /usr/java/
cd /usr/java

Lets make the rpm file that we downloaded into an executable file. I placed my downloaded files in a folder called /temporary:

chmod 700 /temporary/jdk-7u7-linux-x64.rpm

Install it with rpm -i :

rpm -i /temporary/jdk-7u7-linux-x64.rpm

The JDK is now installed, lets install tomcat!

Tomcat

Tomcat is actually very simple install. It is a matter of extracting the files in a location, modifying a few scripts, and running the startup scripts. For those who are not 100% familiar with how tomcat works, it sets up using the environment variables of the user that is executing the startup script. 

First things first, what we would like to do, is create a new user called tomcat and make it impossible for it to logon.

groupadd tomcat
useradd -g tomcat -s /usr/sbin/nologin -m -d /home/tomcat tomcat

Now lets extract the files. Remember, our files are in the folder /temporary

tar -xf apache-tomcat-7.0.32.tar.gz

Copy them to the /opt folder

cp /temporary/apache-tomcat-7.0.32 /opt/tomcat7

For every instance, we need to copy the folder over. For this exercise, we will create 2 instances:

cp -rf /opt/tomcat7 /opt/tomcat7-1
cp -rf /opt/tomcat7 /opt/tomcat7-2

Change the owner of the folders to the group tomcat and the user tomcat:

chown -R tomcat:tomcat tomcat7-1
chown -R tomcat:tomcat tomcat7-2

Now we need to modify the startup and shutdown scripts. In order to do so, lets go into the bin folder of each instance.

cd /opt/tomcat7-1/bin

In this folder, is the startup.sh and shutdown.sh script. We need to modify these scripts to include the right environmental parameters. Add these commands to the startup.sh script:

export JAVA_HOME=/usr/java/jdk1.7.0_07
export PATH=$JAVA_HOME/bin:$PATH
export BASEDIR=/opt/tomcat7-1
export CATALINA_BASE=/opt/tomcat7-1
export CATALINA_HOME=/opt/tomcat7-1

It should look like this:

How your script should look with the script modifications.

How your script should look with the script modifications.

Once done, do the same for the shutdown script (shutdown.sh).

Next, in the conf folder, we need to modify the server.xml file to modify the server ports used for tomcat. This is how we do it:

There are two ports needed: (1) the actual http port and (2) the shutdown port. For every instance we will create, these ports need to be different (Later we will see how to use the same ports with another method).

For our first instance, we can leave the defaults, 8080 and 8005. For the next instance, we will change the ports. (I like to add a 100 to the default which means 8180 and 8105 for the second port)

Configuring the shutdown port from 8005 to 8105 in server.xml

Configuring the shutdown port from 8005 to 8105 in server.xml

Configuring the http port from 8080 to 8180 in server.xml

Configuring the http port from 8080 to 8180 in server.xml

Now to run the instance of Tomcat, lets execute the script as the user tomcat:

su -p -s /bin/sh tomcat startup.sh

Lets check out our separate tomcat instances:

http://ipaddress-of-server:8080

Tomcat7-1 Operational

Tomcat7-1 Operational

http://ipaddress-of-server:8180

Tomcat7-2 Operational

Tomcat7-2 Operational

Success, now we are up and operational!

Next Steps

In order to get into the manager, we need to configure the user accounts for it. We need to modify the file tomcat-users.xml in the conf folder:

  <role rolename="manager-gui"/>

  <user username="admin" password="tomcat" roles="manager-gui"/>

Here we added the role "manager-gui" and applied it to the user "admin" with the password "tomcat".

HAProxy

I mentioned earlier that there is a way to have all your instances of Tomcat to respond on the same http port. We can achieve this using a server called HAProxy. HAProxy is an open source load balancer that you can use to redirect http requests to web servers that are using different ports. For a full breakdown of the configuration, please read my post on HAProxy here.