?Tomcat是一個開源的Java EE服務(wù)器,想弄明白其中原理還有很長路要走,但是對于有Apache,Nginx經(jīng)驗的我們來說部署它還是沒有問題的,下面我們來一步步的構(gòu)建這些基本的功能吧。
實驗環(huán)境:rhel 5.8,SElinux已經(jīng)關(guān)閉
一.構(gòu)建一個基本的Tomcat服務(wù)器
不需要額外服務(wù)器配合,自己可以直接響應(yīng)請求。
規(guī)劃:?
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
下載地址:http://tomcat.apache.org
tar?xvf?apache-tomcat-7.0.33.tar.gz?-C?/usr/local/?cd?/usr/local/?ln?-sv?apache-tomcat-7.0.33/?tomcat??##創(chuàng)建軟鏈接? 1.4 聲明CATALINA_HOME環(huán)境變量,為方便使用生成的命令加入到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???##事例網(wǎng)站所在目錄?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???##包含所有服務(wù)器端類及當前應(yīng)用程序相關(guān)的其它第三方類等?lib???????##包含JSP所用到的JAR文件;?web.xml???##包含當前webapp的deploy描述符,定義時部署時用到的私有資源? 1.7 啟動comcat,查看默認站點
catalina.sh?configtest????##配置文件檢測有沒有語法錯誤?catalina.sh?start?????????##啟動? 1.8 訪問測試,默認監(jiān)聽的是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?添加如下??<role?rolename="manager-gui"/>? ##這個組是tomcat規(guī)定可以訪問manager的組<role?rolename="admin-gui"/>? ##這個是訪問Host Manager的組<user?username="tomcat"?password="tomcat"?roles="manager-gui,admin-gui"/>? ##你懂得 點擊Server Status ,Manager Apps與Host Manager 輸入賬號tomcat密碼tomcat查看后臺的管理信息,具體表示找google吧,其中Manager中有個session,這個里面存的是個個站點的session id,一會兒講session復制內(nèi)容會用到。
二.自定義一個主機,如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中哦)
<Host?name="www.laoguang.me"??appBase="/web/apps"?????????????unpackWARs="true"?autoDeploy="true">?????<Context?path=""?docBase="/web/apps"?reloadable="true"?/>?</Host>? 2.4 下面簡單說說server.xml中一些標簽的意思,注意:server.xml區(qū)分大小寫的
<Server?port="8005"?shutdown="SHUTDOWN">????##最大的容器server,端口號8005可用來管理Server?<Service?name="Catalina">???##service開始定義,名字Catalina?<Connector?port="8080"?protocol="HTTP/1.1"?/>???##http連接器,看到了吧端口號8080?<Connector?port="8009"?protocol="AJP/1.3"?redirectPort="8443"?/>?##ajp連接器,端口號8009?<Engine?name="Catalina"?defaultHost="localhost">?##定義引擎,與默認主機?<Realm?className="org.apache.catalina.realm.LockOutRealm">?##關(guān)于認證的類?<Host?name=""?appBase=""?unpackWARs=""?autoDeploy=""></Host>?##定義一個主機appBase主機的目錄,相當于apache的DocumentRoot,upackWARs自動解壓WAR包,autoDeploy自動部署?<Context?path=""?docBase=""?/>??##Context?上下文,相當于apache的Aliase,path=""后面跟的是URI,docBase訪問path的URI即訪問的目錄?<Valve?className="org.apache.catalina.valves.AccessLogValve"?/>??##過濾器? 2.5 測試
catalina.sh?stop?##先關(guān)閉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 再添加一虛擬主機
<Host?name="jsprun.laoguang.me"??appBase="/web/jsprun"???????unpackWARs="true"?autoDeploy="true">???<Context?path=""?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 安裝
根據(jù)提示安裝即可
四.apache做前端代理,基于mod_proxy模塊與Tomcat連接
4.1 編譯安裝apache
過程見http://laoguang.blog.51cto.com/6013350/1039208
唯一的區(qū)別是在編譯時額外加上
--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?? ##關(guān)閉正向代理????ProxyPass?/?????http://jsprun.laoguang.me:8080/ ##訪問/則代理到j(luò)sprun中?????ProxyPa***everse?/??????http://jsprun.laoguang.me:8080/?##不讓tomcat直接響應(yīng)客端????<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協(xié)議與tomcat連接,與http的基本相同,只修改協(xié)議與端口即可,其它的一樣
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模塊相關(guān)的配置,這里使用一個專門的配置文件/etc/httpd/extra/httpd-jk.conf來保存相關(guān)指令及其設(shè)置。其內(nèi)容如下:
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/測試,能否能看到j(luò)sprun
五.基于mod_proxy構(gòu)建負載均衡
為了實現(xiàn)負載均衡,我們增加一臺服務(wù)器
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???????<Engine?name="Catalina"?defaultHost="localhost"?jvmRoute="TomcatA">??##找到Engine添加???????<Host?name="balance.laoguang.me"??appBase="/web/balance"?????????????unpackWARs="true"?autoDeploy="true">?????????<Context?path=""?docBase="/web/balance"?/>???????</Host>? 5.3.2 添加一測試頁面
vi?/web/balance/index.jsp??<%@?page?language="java"?%>?<html>???<head><title>TomcatA</title></head>???<body>?????<h1><font?color="red">TomcatA?</font></h1>?????<table?align="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服務(wù)器上也增加同樣的虛擬主機,方法同上,engine的jvmroute改為TomcatB,為了方便查看修改index.jsp顯示的顏色
vi?/usr/local/tomcat/conf/server.xml?<Engine?name="Catalina"?defaultHost="localhost"?jvmRoute="TomcatB">??##找到Engine添加??vi?/web/balance/index.jsp?<%@?page?language="java"?%>?<html>???<head><title>TomcatB</title></head>???<body>?????<h1><font?color="green">TomcatB?</font></h1>?????<table?align="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來實現(xiàn)后端負載均衡
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=10?route=TomcatA?????????BalancerMember?ajp://172.16.1.22:8009?loadfactor=10?route=TomcatB?</Proxy>?ProxyPass?/?balancer://lbcluster/??ProxyPa***everse?/?balancer://lbcluster/? 5.5.2 重啟httpd訪問http://balance.laoguang.me/測試,如果頁面能切換代表ok
5.6 當然也可以用http協(xié)議與tomcat連接,更改協(xié)議與端口即可
BalancerMember?http://172.16.1.21:8080?loadfactor=10?route=TomcatA?BalancerMember?httpp://172.16.1.22:8080?loadfactor=10?route=TomcatB? 六.基于mod_jk實現(xiàn)負載均衡
6.1 注釋剛才添加的基于proxy_mod的配置,啟用已添加的mod_jk配置
#ProxyRequests?Off?#<Proxy?balancer://lbcluster>?#???????BalancerMember?ajp://172.16.1.21:8009?loadfactor=10?route=TomcatA?#???????BalancerMember?ajp://172.16.1.22:8009?loadfactor=10?route=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/
七.構(gòu)建基于內(nèi)存session復制的tomcat集群 為了防止由于節(jié)點故障導致的session丟失,我們來構(gòu)建基于內(nèi)存session復制的集群,在剛才的的負載均衡中你或許已經(jīng)發(fā)現(xiàn)網(wǎng)頁顯示的session id一直是變動的,這個session id 就是通過jsp獲得的此次會話的id,我們發(fā)現(xiàn)會話id一直是變動的,TomcatA中一直是TomcatA的session id,下面我們來構(gòu)建吧。
7.1 修改172.16.1.21的server.xml,在engine下添加如下
vi?/usr/local/tomcat/conf/server.xml???<Cluster?className="org.apache.catalina.ha.tcp.SimpleTcpCluster"????????????????????channelSendOptions="8">??????<Manager?className="org.apache.catalina.ha.session.DeltaManager"?????????????????????expireSessionsOnShutdown="false"?????????????????????notifyListenersOnReplication="true"/>????????<Channel?className="org.apache.catalina.tribes.group.GroupChannel">???????????<Membership?className="org.apache.catalina.tribes.membership.McastService"????????????????????address="227.50.10.1"???bind="172.16.1.21"???port="45564"????????????????????frequency="500"??dropTime="3000"/>??????????????<Receiver?className="org.apache.catalina.tribes.transport.nio.NioReceiver"?????????????????????????????????address="172.16.1.21"???port="4000"??autoBind="100"?????????????????????????????????selectorTimeout="5000"???maxThreads="6"/>??????????????<Sender?className="org.apache.catalina.tribes.transport.ReplicationTransmitter">?????????????????<Transport?className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>??????????????</Sender>????????<Interceptor?className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>????????<Interceptor?className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>??????</Channel>??????<Valve?className="org.apache.catalina.ha.tcp.ReplicationValve"?????????????????????????filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>??????<Valve?className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>??????<Deployer?className="org.apache.catalina.ha.deploy.FarmWarDeployer"??????????????????????tempDir="/tmp/war-temp/"?deployDir="/tmp/war-deploy/"?????????????????????watchDir="/tmp/war-listen/"??watchEnabled="false"/>???????<ClusterListener?className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>???????<ClusterListener?className="org.apache.catalina.ha.session.ClusterSessionListener"/>?</Cluster>? 7.2 修改balance虛擬主機的部署文件web.xml
我們建立的balance時沒有建立web.xml,我們繼承的是/usr/local/tomcat/conf/web.xml的,我們現(xiàn)在需要修改部署文件,所以拷貝到/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的存儲空間,就不完全顯示了
<Membership?className="org.apache.catalina.tribes.membership.McastService"??????????address="227.50.10.1"???bind="172.16.1.22"???port="45564"??????????frequency="500"??dropTime="3000"/>????<Receiver?className="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變化情況
到此構(gòu)建結(jié)束,過程并不難,但要熟練使用tomcat必須得去了解java啊,還有好長的路要走,不要以為會構(gòu)建了tomcat就覺的會tomcat了,其實還不到10%,所以加油,寫給你們,也寫給自己。
轉(zhuǎn)載于:https://blog.51cto.com/laoguang/1086329
總結(jié)
以上是生活随笔為你收集整理的Tomcat一步步实现反向代理、负载均衡、内存复制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。