Tomcat Knowledge

Program Language(Difference: performance and development cycle)
System level:    C / C++ / go 
Application level(need VM):    C# / Java / Python / Perl / Ruby
Dynamic Website:    Java (servlet, jsp) / Python (Django, Flask) / Perl (module) / Ruby (ror) / PHP

webapp server
jsp --> tomcat, jboss, jetty
php --> php-fpm
python --> Django

JDK: Java Development Kit
JVM: Java Virtual Machine

Installation

Java Installation
1. install jdk: rpm -ivh jdk...rpm
2. check jdk: /usr/java
which java version is using: latest link to which one
3. configure the environment parameter
#vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
#. /etc/profile.d/java.sh
#java -version

Tomcat Installation
1. uncompress tomcat package:
#tar xvf apache-tomcat... -C /usr/local/apache-tomcat-7.0.55
#ln -sv apache-tomcat-7.0.55 tomcat
2. configure the environment parameter
#vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA/bin:$PATH
#. /etc/profile.d/tomcat.sh
3. change configure
#vim /usr/local/tomcat/conf/server.xml
change from
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectport="8443" />
to
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" />
4. start the tomcat
#catalina start

5. add virtual host
A. tomcat server
#vim /usr/local/tomcat/conf/server.xml
<Host name="www.lianshu.com" appBase="/app" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="test" reloadable="true" />
</Host> 
#mkdir -p /app/test
#cd /app/test
#vim index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>JSP test Page</title>
</head>
<body>
<% out.println("Hello,world"); %>
</body>
</html>
#catalina stop
#catalina start
B. Client 
Change localhost host file

6. add another virtual host
A. tomcat
#unzip shop...
#mv shop... /app
#ln -sv shop... shop
#vim /usr/local/tomcat/conf/server.xml
i. Add "URIEncoding=UTF-8" into Connector
ii. Add
<Host name="www.lianshu.com" appBase="/app" unpackWARs="true" autoDeploy="true">
    <Context path="/test" docBase="test" reloadable="true" />
    <Context path="" docBase="shop" reloadable="true" />
</Host> 
#catalina stop
#catalina start
B. mysql
mysql>create database shop;
mysql>grant all on shop.* to shop@'12.11.0.101' identified by "123456";
mysql>flush privileges;
#catalina stop
#catalina start

Tomcat Config File (server.xml)
1. Top component: Server (tomcat instance)
2. Service component: Service (link connector with engine)
3. Container component: Engine (web container) / Host / Context
4. Connector component: Connector (Monitor IP address and Port)

<Server...
    <Service...
        <Connector... />
        <Engine...
            <Host...
                <Context....
                </Context>
            </Host>
        </Engine>
    </Service>
</Server>

Tomcat Error 1: java.lang.outofmemoryerror permgen space
Solution:  Test environment 1GB memory
A. Windows: add following into <Tomcat installation path>\bin\catalina.bat
set JAVA_OPTS="-Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"
B. Linux: add following into <Tomcat installation path>/bin/catalina.sh
export JAVA_OPTS="-Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"

Tomcat Load Balance
LAMT: Linux + Apache + Mysql + Tomcat
Protocol: HTTP / AJP

Test: 1 Apache + 2 Tomcat
Tomcat A
1. Stop firewall and selinux
2. Install Tomcat
A. Install JDK
B. Install Tomcat
C. Create folder of application: #mkdir -p /app/web
D. Create test page: #vim index.jsp
<%@ page language="java" %>
<html>
    <head><title>TomcatA</title></head>    <body>
    <h1><font color="red">TomcatA.example.com</font></h1>
    <table align="centre" border="1">
        <tr>
            <td>Session ID</td>
            <% session.setAttribute("example.com","example.com"); %>
            <td><%= session.getId() %></td>
        </tr>
        <tr>
            <td>Created on</td>
            <td><%= session.getCreationTime() %></td>
        </tr>
    </table>
</body>
</html>

E. Change Configuration: 
#vim /usr/local/tomcat/conf/server.xml
Add following context
<Host name="www.example.com" appBase="/app" unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="web" reloadable="true" />
</Host>

Change from
<Engine name "catalina" defaultHost "localhost">
to
<Engine name "catalina" defaultHost "www.example.com">

F. Start Tomcat: catalina start

Tomcat B 
Same as Tomcat A. Only change the context of the test page:
<%@ page language="java" %>
<html>
    <head><title>TomcatB</title></head>    <body>
    <h1><font color="red">TomcatB.example.com</font></h1>
    <table align="centre" border="1">
        <tr>
            <td>Session ID</td>
            <% session.setAttribute("example.com","example.com"); %>
            <td><%= session.getId() %></td>
        </tr>
        <tr>
            <td>Created on</td>
            <td><%= session.getCreationTime() %></td>
        </tr>
    </table>
</body>
</html>

Apache 
1. Stop Firewall and selinux
2. Yum Install httpd
3. Check module: httpd -M (balance / http / ajp)
4. Change Configuration 
i. http protocol
#vim /etc/httpd/conf.d/mod_http.conf
NameVirtualHost *:80
    <Proxy balancer://tcsrvs>
        BalancerMember  http://172.16.100.7:8080 loadfactor=1
BalancerMember  http://172.16.100.8:8080 loadfactor=1
    </Proxy>

    <VirtualHost *:80>
        ServerName www.lianshu.com
        ProxyVia On
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
        ProxyPass /status !
        ProxyPass / balancer://tcsrvs/ 
        ProxyPassReverse / balancer://tcsrvs/ 
        <Location />
            Order deny,allow
            Allow from all
        </Location>
    </VirtualHost>


ii ajp protocol
#vim /etc/httpd/conf.d/mod_ajp.conf
NameVirtualHost *:80
    <Proxy balancer://tcsrvs>
        BalancerMember  ajp://172.16.100.7:8009 loadfactor=1
BalancerMember  ajp://172.16.100.8:8009 loadfactor=1
    </Proxy>

    <VirtualHost *:80>
        ServerName www.lianshu.com
        ProxyVia On
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
        ProxyPass /status !
        ProxyPass / balancer://tcsrvs/ 
        ProxyPassReverse / balancer://tcsrvs/ 
        <Location />
            Order deny,allow
            Allow from all
        </Location>
    </VirtualHost>


#mv /etc/httpd/conf.d/mod_http.conf /etc/httpd/conf.d/mod_http.conf.bak

5. Start httpd service
6. Set cookie bind
i. Change httpd config
from
ProxyPass /balancer://tcsrvs/
ProxyPassReverse / balancer://tcsrvs/ 
to
ProxyPass / balancer://tcsrvs/ stickysession=JSESSIONID
ProxyPassReverse / balancer://tcsrvs/ stickysession=JSESSIONID

ii Change tomcat config
Tomcat A 
#vim /usr/local/tomcat/conf/server.xml
from
<Engine name="catalina" defaultHost="www.example.com">
to
<Engine name="catalina" defaultHost="www.example.com" jvmRoute="tomcatA">
Tomcat B
#vim /usr/local/tomcat/conf/server.xml
from
<Engine name="catalina" defaultHost="www.example.com">
to 
<Engine name="catalina" defaultHost="www.exmaple.com" jvmRoute="tomcatB">

Attention: if you do not want to proxy using following example
ProxyPass /status !

Comments

Popular posts from this blog

Nginx Proxy & Load Balance & LNMP

Snort+barnyard2+Snorby CentOS 6.5_64 Installation

ORACLE Error