Tomcat是一個開源的Java EE服務器,想弄明白其中原理還有很長路要走,但是對於有Apache,Nginx經驗的我們來說部署它還是沒有問題的,下面我們來一步步的構建這些基本的功能吧。
實驗環境:rhel 5.8,SElinux已經關閉
一.構建一個基本的Tomcat服務器
不需要額外服務器配合,自己可以直接響應請求。
規劃:
172.16.1.22 .cat.laoguang.me
1.1 下載安裝jdk
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html 選擇適合你的平臺
rpm -ivh jdk-7u9-linux-i586.rpm ##默認安裝在/usr/java中
1.2 聲明JAVA_HOME變量,併爲了使用方便將生成的命令加入PATH中
vi /etc/profile.d/java.sh
JAVA_HOME=/usr/java/latest
PATH=$PATH:/usr/java/lastest/bin
export JAVA_HOME PATH
source /etc/profile.d/java.sh ##加載剛纔的配置
java -version ##顯示版本號代表成功
1.3 下載安裝tomcat
tar xvf apache-tomcat-7.0.33.tar.gz -C /usr/local/
cd /usr/local/
ln -sv apache-tomcat-7.0.33/ tomcat ##創建軟鏈接
1.4 聲明CATALINA_HOME環境變量,爲方便使用生成的命令加入到PATH中
vi /etc/profile.d/tomcat.sh
CATALINA_HOME=/usr/local/tomcat/
PATH=$PATH:/usr/local/tomcat/bin
export CATALINA_HOME PATH
source /etc/profile.d/tomcat.sh ##加載剛纔配置
測試是否生效
catalina.sh version ##如果顯示版本號則成功
1.5 查看tomcat的下的文件與目錄
bin ##命令目錄
conf ##配置文件目錄
lib ##類庫
logs ##日誌
webapps ##事例網站所在目錄
work ##編譯時用到的工作目錄
配置文件最需要注意的有:
server.xml ##tomcat 主配置文件
tomcat-users.xml ##認證文件,過會會講到
web.xml ##每個站點部署都需用到web.xml,如果站點有用站點的,沒有則用這個默認的
1.6 查看示例站點下的文件與目錄
cd /usr/local/tomcat
ls webapps/examples/
index.html jsp servlets WEB-INF websocket
其它是自定義的,唯有WEB-INF是私有資源的目錄,部署時用到的目錄,通常是不允許他人訪問的,查看下面的目錄文件
ls webapps/examples/WEB-INF/
classes jsp jsp2 lib tags web.xml
需要請注意的有:
classes ##包含所有服務器端類及當前應用程序相關的其它第三方類等
lib ##包含JSP所用到的JAR文件;
web.xml ##包含當前webapp的deploy描述符,定義時部署時用到的私有資源
1.7 啓動comcat,查看默認站點
catalina.sh configtest ##配置文件檢測有沒有語法錯誤
catalina.sh start ##啓動
1.8 訪問測試,默認監聽的是8080,這個是在server.xml中定義的
http://172.16.1.22:8080/
如果能看到那隻公貓,就成功了
1.9 添加認證用戶,使用頁面中的Server Status ,Manager Apps與Host Manager這些管理工具
vi /usr/local/tomcat/conf/tomcat-users.xml 添加如下
<rolerolename="manager-gui"/> ##這個組是tomcat規定可以訪問manager的組
<rolerolename="admin-gui"/> ##這個是訪問Host Manager的組
<userusername="tomcat"password="tomcat"roles="manager-gui,admin-gui"/> ##你懂得
點擊Server Status ,Manager Apps與Host Manager 輸入賬號tomcat密碼tomcat查看後臺的管理信息,具體表示找google吧,其中Manager中有個session,這個裏面存的是個個站點的session id,一會兒講session複製內容會用到。
二.自定義一個主機,如www.laoguang.me
2.1 建立一目錄,用來存放文檔
mkdir -pv /web/apps/WEB-INF
2.2 建立一個測試頁面
vi /web/apps/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>JSP test page.</title>
</head>
<body>
<% out.println("Hello,world!"); %>
</body>
</html>
2.3 編輯tomcat的配置文件 /usr/local/tomcat/conf/server.xml 定義虛擬主機,在默認Host上添加如下(不要添加到另外的host中哦)
<Hostname="www.laoguang.me"appBase="/web/apps"
unpackWARs="true"autoDeploy="true">
<Contextpath=""docBase="/web/apps"reloadable="true"/>
</Host>
2.4 下面簡單說說server.xml中一些標籤的意思,注意:server.xml區分大小寫的
<Serverport="8005"shutdown="SHUTDOWN"> ##最大的容器server,端口號8005可用來管理Server
<Servicename="Catalina"> ##service開始定義,名字Catalina
<Connectorport="8080"protocol="HTTP/1.1"/> ##http連接器,看到了吧端口號8080
<Connectorport="8009"protocol="AJP/1.3"redirectPort="8443"/> ##ajp連接器,端口號8009
<Enginename="Catalina"defaultHost="localhost"> ##定義引擎,與默認主機
<RealmclassName="org.apache.catalina.realm.LockOutRealm"> ##關於認證的類
<Hostname=""appBase=""unpackWARs=""autoDeploy=""></Host>
##定義一個主機appBase主機的目錄,相當於apache的DocumentRoot,upackWARs自動解壓WAR包,autoDeploy自動部署
<Contextpath=""docBase=""/>
##Context 上下文,相當於apache的Aliase,path=""後面跟的是URI,docBase訪問path的URI即訪問的目錄
<ValveclassName="org.apache.catalina.valves.AccessLogValve"/> ##過濾器
2.5 測試
catalina.sh stop ##先關閉catalina
catalina.sh configtest ##查看有沒有語法錯誤
catalina.sh start ##啓動tomcat會自動部署
更改window的hosts文件,添加解析
172.16.1.22 www.laoguang.me
訪問www.laoguang.me:8080測試,如果顯示hello world!就成功了
三.部署JspRun測試
或許一個簡單的測試頁面不能滿足你的胃口,那我們部署個論壇吧
3.1 下載安裝 JspRun
下載地址:http://www.jsprun.com/downloads/JspRun/6.0.0/JspRun!_6.0.0_GBK.zip
unzip JspRun\!_6.0.0_GBK.zip
mv upload/ /web/jsprun
3.2 編輯/usr/local/tomcat/conf/tomcat-users.xml 再添加一虛擬主機
<Hostname="jsprun.laoguang.me"appBase="/web/jsprun"
unpackWARs="true"autoDeploy="true">
<Contextpath=""docBase="/web/jsprun"/>
</Host>
3.3 編輯windows的hosts,添加解析
172.16.1.22 jsprun.laoguang.me
3.4 安裝Mysql,因爲該jsprun需要,爲了簡單yum 安裝吧
yum -y install mysql-server
service mysqld start
3.5 爲jsprun建立賬號
mysql
mysql> create database jsprun;
mysql> grant all on jsprun.* to 'jsprun'@'localhost' identified by 'redhat';
mysql> flush privileges;
3.6 編緝jsprun的配置文件,修改mysql以下信息
dbhost = localhost
dbport=3306
dbuser = jsprun
dbpw = redhat
dbname = jsprun
3.7 訪問http://jsprun.laoguang.me:8080/install.jsp 安裝
根據提示安裝即可
四.apache做前端代理,基於mod_proxy模塊與Tomcat連接
4.1 編譯安裝apache
過程見http://laoguang.blog.51cto.com/6013350/1039208
唯一的區別是在編譯時額外加上
--enable-proxy --enable-proxy-http --enable-proxy-ajp
--enable-proxy ##啓用代理
--enable-proxy-http ##啓用http代理模塊
--enable-proxy-ajp ##啓用ajp代理模塊
4.2 編緝/etc/httpd/httpd.conf
vi /etc/httpd/httpd.conf
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so ##啓用該模塊
#DocumentRoot "/usr/local/apache/htdocs" ##註釋掉,我們啓用虛擬主機
Include /etc/httpd/extra/httpd-vhosts.conf ##我們用虛擬主機
4.3 編緝/etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerName jsprun.laoguang.me
ProxyVia Off ##不讓代理在http首部中顯示
ProxyRequests Off ##關閉正向代理
ProxyPass / http://jsprun.laoguang.me:8080/ ##訪問/則代理到jsprun中
ProxyPa***everse / http://jsprun.laoguang.me:8080/ ##不讓tomcat直接響應客端
<Proxy *>
Require all granted
</Proxy>
<Location/>
Require all granted
</Location>
ErrorLog "logs/laoguang-error_log"
CustomLog "logs/laoguang-access_log" common
</VirtualHost>
4.4 修改linux的/etc/hosts爲jsprun.laoguang.me解析
vi /etc/hosts
172.16.1.22 jsprun.laoguang.me jsprun
4.5 訪問http://jsprun.laoguang.me測試
4.6 基於ajp協議與tomcat連接,與http的基本相同,只修改協議與端口即可,其它的一樣
ProxyPass / ajp://jsprun.laoguang.me:8009/
ProxyPa***everse / ajp://jsprun.laoguang.me:8009/
五.apache做前端代理,基於mod_jk模塊與Tomcat連接
4.1 編譯安裝mod_jk模塊,下載地址:http://mirrors.tuna.tsinghua.edu.cn/apache//tomcat/tomcat-connectors/jk/
tar xvf tomcat-connectors-1.2.37-src.tar.gz
cd tomcat-connectors-1.2.37-src
cd native/
./configure --with-apxs=/usr/local/apache/bin/apxs
make && make install
4.2 apache要使用mod_jk連接器,需要在啓動時加載此連接器模塊。爲了便於管理與mod_jk模塊相關的配置,這裏使用一個專門的配置文件/etc/httpd/extra/httpd-jk.conf來保存相關指令及其設置。其內容如下:
vi /etc/httpd/extra/httpd-jk.conf
# Load the mod_jk
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/extra/workers.properties
JkLogFile logs/mod_jk.log
#JkLogLevel debug
JkMount /* laoguang
JkMount /status/ status
4.3 建立mod_jk需要的配置文件
vi /etc/httpd/extra/workers.properties
worker.list=laoguang,status
worker.laoguang.port=8009
worker.laoguang.host=172.16.1.22
worker.laoguang.type=ajp13
worker.laoguang.lbfactor=1
worker.status.type = status
4.4 在/etc/httpd/httpd.conf中把/etc/httpd/extra/httpd-jk.conf 包含進來,並註釋掉虛擬主機,與其中的代理會衝突的哦
vi /etc/httpd/httpd.conf
#Include /etc/httpd/extra/httpd-vhosts.conf
Include /etc/httpd/extra/httpd-jk.conf
##重啓httpd
service httpd restart
4.5 訪問http://jsprun.laoguang.me/測試,能否能看到jsprun
五.基於mod_proxy構建負載均衡
爲了實現負載均衡,我們增加一臺服務器
172.16.1.21 tom.laoguang.me
5.1 安裝jdk與上相同
5.2 安裝tomcat與上相同
5.3.1 增加一虛擬主機,並添加engine的jvmRoute
mkdir -pv /web/balance/WEB-INF
vi /usr/local/tomcat/conf/server.xml
<Enginename="Catalina"defaultHost="localhost"jvmRoute="TomcatA"> ##找到Engine添加
<Hostname="balance.laoguang.me"appBase="/web/balance"
unpackWARs="true"autoDeploy="true">
<Contextpath=""docBase="/web/balance"/>
</Host>
5.3.2 添加一測試頁面
vi /web/balance/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><fontcolor="red">TomcatA </font></h1>
<tablealign="centre"border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
5.3.2 重啓catalina 聲明:修改tomcat配置文件後需重啓以後不再說明了
catalina stop
catalina start
5.3.2 添加windows的hosts解析
172.16.1.21 balance.laoguang.me
5.3.3 訪問http://balance.laoguang.me:8080/ 查看是否成功
5.4.1 同樣在原來cat服務器上也增加同樣的虛擬主機,方法同上,engine的jvmroute改爲TomcatB,爲了方便查看修改index.jsp顯示的顏色
vi /usr/local/tomcat/conf/server.xml
<Enginename="Catalina"defaultHost="localhost"jvmRoute="TomcatB"> ##找到Engine添加
vi /web/balance/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><fontcolor="green">TomcatB </font></h1>
<tablealign="centre"border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
5.4.2 重啓catalina
5.4.3 修改剛添加的windows的hosts測試這個主機
172.16.1.22 balance.laoguang.me
5.4.4 訪問http://balance.laoguang.me:8080/測試
5.5.下面來配置前端apache來實現後端負載均衡
apache是在cat上安裝的,注意的是基於mod_proxy的負載均衡必須在中心主機中配置
5.5.1 編緝apache配置文件/etc/httpd/httpd.conf
vi /etc/httpd/httpd.conf
#Include /etc/httpd/extra/httpd-jk.conf ##註釋掉原來的jk
ServerName balance.laoguang.com:80
#DocumentRoot "/usr/local/apache/htdocs" ##不註釋也可以,在下面添加
ProxyRequests Off
<Proxy balancer://lbcluster>
BalancerMember ajp://172.16.1.21:8009 loadfactor=10route=TomcatA
BalancerMember ajp://172.16.1.22:8009 loadfactor=10route=TomcatB
</Proxy>
ProxyPass / balancer://lbcluster/
ProxyPa***everse / balancer://lbcluster/
5.5.2 重啓httpd訪問http://balance.laoguang.me/測試,如果頁面能切換代表ok
5.6 當然也可以用http協議與tomcat連接,更改協議與端口即可
BalancerMember http://172.16.1.21:8080 loadfactor=10route=TomcatA
BalancerMember httpp://172.16.1.22:8080 loadfactor=10route=TomcatB
六.基於mod_jk實現負載均衡
6.1 註釋剛纔添加的基於proxy_mod的配置,啓用已添加的mod_jk配置
#ProxyRequests Off
#<Proxy balancer://lbcluster>
# BalancerMember ajp://172.16.1.21:8009 loadfactor=10route=TomcatA
# BalancerMember ajp://172.16.1.22:8009 loadfactor=10route=TomcatB
#</Proxy>
#ProxyPass / balancer://lbcluster/
#ProxyPa***everse / balancer://lbcluster/
Include /etc/httpd/extra/httpd-jk.conf
6.2 修改 /etc/httpd/extra/httpd-jk.conf
vi /etc/httpd/extra/httpd-jk.conf
# Load the mod_jk
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/extra/workers.properties
JkLogFile logs/mod_jk.log
#JkLogLevel debug
JkMount /* cluster1
JkMount /status/ status
6.3 修改/etc/httpd/workers.properties
worker.list = cluster1,status
worker.TomcatA.type = ajp13
worker.TomcatA.host = 172.16.1.21
worker.TomcatA.port = 8009
worker.TomcatA.lbfactor = 5
worker.TomcatB.type = ajp13
worker.TomcatB.host = 172.16.1.22
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 5
worker.cluster1.type = lb
worker.cluster1.sticky_session = 0 ##如果爲1會綁定session
worker.cluster1.balance_workers = TomcatA, TomcatB
worker.status.type = status
6.4 測試訪問 http://balance.laoguang.me/
7.1 修改172.16.1.21的server.xml,在engine下添加如下
vi /usr/local/tomcat/conf/server.xml
<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<ManagerclassName="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">
<MembershipclassName="org.apache.catalina.tribes.membership.McastService"
address="227.50.10.1"bind="172.16.1.21"port="45564"
frequency="500"dropTime="3000"/>
<ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="172.16.1.21"port="4000"autoBind="100"
selectorTimeout="5000"maxThreads="6"/>
<SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
<ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"watchEnabled="false"/>
<ClusterListenerclassName="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
7.2 修改balance虛擬主機的部署文件web.xml
我們建立的balance時沒有建立web.xml,我們繼承的是/usr/local/tomcat/conf/web.xml的,我們現在需要修改部署文件,所以拷貝到/web/balance/WEB-INF中修改,在<web-app> </web-app>中添加 <distributable/>,部份如下
cp /usr/local/tomcat/conf/web.xml /web/apps/WEB-INF/
vi /web/apps/WEB-INF/web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<distributable/>
</web-app>
7.3 修改172.16.1.22 的server.xml 基本與172.16.1.21的相同,只修改多播ip與接收ip即可,爲了不浪費51blog的存儲空間,就不完全顯示了
<MembershipclassName="org.apache.catalina.tribes.membership.McastService"
address="227.50.10.1"bind="172.16.1.22"port="45564"
frequency="500"dropTime="3000"/>
<ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="172.16.1.22"port="4000"autoBind="100"
selectorTimeout="5000"maxThreads="6"/>
7.4 對balance虛擬主機部署文件修改與172.16.1.21相同
7.5 測試訪問 http://balance.laoguang.me/ 查看session id變化情況
到此構建結束,過程並不難,但要熟練使用tomcat必須得去了解java啊,還有好長的路要走,不要以爲會構建了tomcat就覺的會tomcat了,其實還不到10%,所以加油,寫給你們,也寫給自己。