Tomcat完美實(shí)現(xiàn)在線商城應(yīng)用部署
Tomcat是一個(gè)小型的輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP程序的首選。對于一個(gè)初學(xué)者來說,可以這樣認(rèn)為,當(dāng)在一臺機(jī)器上配置好Apache 服務(wù)器,可利用它響應(yīng)對HTML 頁面的訪問請求。實(shí)際上Tomcat 部分是Apache 服務(wù)器的擴(kuò)展,但它是獨(dú)立運(yùn)行的,所以當(dāng)你運(yùn)行tomcat 時(shí),它實(shí)際上作為一個(gè)與Apache 獨(dú)立的進(jìn)程單獨(dú)運(yùn)行的。
Tomcat 很受廣大程序員的喜歡,因?yàn)樗\(yùn)行時(shí)占用的系統(tǒng)資源小,擴(kuò)展性好,支持負(fù)載平衡與郵件服務(wù)等開發(fā)應(yīng)用系統(tǒng)常用的功能;而且它還在不斷的改進(jìn)和完善中,任何一個(gè)感興趣的程序員都可以更改它或在其中加入新的功能。
環(huán)境介紹:
系統(tǒng)版本:CentOS 6.4_x86_64
mysql版本: mysql-server.x86_64 0:5.1.66-2.el6_3
Apache版本:httpd-2.2.15-26.el6
Tomcat版本:apache-tomcat-7.0.42
JDK版本: jdk-7u40-linux-x64
在線商城系統(tǒng):shopxx-3.0Beta(可下載)
拓?fù)湔故荆?/strong>
安裝配置過程:
1、配置IP地址
- ############前端服務(wù)器[root@node ~]#:#############
- ifconfig eth0 172.16.18.6
- ifconfig eth1 192.168.18.254/24
- ############Tomcat A[root@node1~]#:###############
- ifconfig eth0 192.168.18.1/24
- route add default gw 192.168.18.254
- ############Tomcat B[root@node2~]#:################
- ifconfig eth0 192.168.18.2/24
- route add default gw 192.168.18.254
2、安裝配置后端服務(wù)器
- ###########TomcatA服務(wù)器:##############
- ##########安裝JDK:##############
- [root@node1~]# rpm -ivh jdk-7u9-linux-x64.rpm
- [root@node1~]# vim /etc/profile.d/java.sh #編輯執(zhí)行腳本
- export JAVA_HOME=/usr/java/latest
- export PATH=$JAVA_HOME/bin:$PATH
- [root@node1~]# . /etc/profile.d/java.sh #讀取執(zhí)行腳本
- [root@node1~]# java -version #查看安裝信息
- javaversion "1.7.0_09" #版本信息
- Java(TM)SE Runtime Environment (build 1.7.0_09-b05) #運(yùn)行時(shí)環(huán)境的版本
- JavaHotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
- #########安裝Tomcat#############
- [root@node1~]# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/
- [root@node1~]# cd /usr/local/
- [root@node1local]# ln -sv apache-tomcat-7.0.42/ tomcat
- [root@node1tomcat]# vim /etc/profile.d/tomcat.sh #定義啟動環(huán)境變量
- exportCATALINA_HOME=/usr/local/tomcat
- exportPATH=$CATALINA_HOME/bin:$PATH
- [root@node1tomcat]# . /etc/profile.d/tomcat.sh #讀取腳本
- [root@node1~]# catalina.sh version #查看安裝信息
- UsingCATALINA_BASE: /usr/local/tomcat
- UsingCATALINA_HOME: /usr/local/tomcat
- UsingCATALINA_TMPDIR: /usr/local/tomcat/temp
- UsingJRE_HOME: /usr/java/latest
- UsingCLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
- Serverversion: Apache Tomcat/7.0.42
- Serverbuilt: Jul 2 2013 08:57:41
- Servernumber: 7.0.42.0
- OSName: Linux
- OSVersion: 2.6.32-358.el6.x86_64
- Architecture: amd64
- JVMVersion: 1.7.0_09-b05
- JVMVendor: Oracle Corporation
- #############啟動##################
- [root@node1~]# catalina.sh start
- ############查看啟動端口###########
- [root@node1~]# ss -tanl
- State Recv-Q Send-Q Local Address:Port Peer Address:Port
- LISTEN 0 128 :::111 :::*
- LISTEN 0 128 *:111 *:*
- LISTEN 0 100 :::8080 :::*
- LISTEN 0 128 :::49906 :::*
- LISTEN 0 128 *:56818 *:*
- LISTEN 0 128 :::22 :::*
- LISTEN 0 128 *:22 *:*
- LISTEN 0 128 127.0.0.1:631 *:*
- LISTEN 0 128 ::1:631 :::*
- LISTEN 0 100 ::1:25 :::*
- LISTEN 0 100 127.0.0.1:25 *:*
- LISTEN 0 128 127.0.0.1:6010 *:*
- LISTEN 0 128 ::1:6010 :::*
- LISTEN 0 128 127.0.0.1:6011 *:*
- LISTEN 0 128 ::1:6011 :::*
- LISTEN 0 128 127.0.0.1:6012 *:*
- LISTEN 0 128 ::1:6012 :::*
- LISTEN 0 1 ::ffff:127.0.0.1:8005 :::*
- LISTEN 0 100 :::8009 :::*
- ###解析:tomcat默認(rèn)監(jiān)聽在8080端口上,啟動監(jiān)聽端口為8005,8009####
- ##########Tomcat B服務(wù)器上同樣安裝,這里就不再重復(fù)演示了########
- ##########更改監(jiān)聽端口############
- [root@node1conf]# vim /usr/local/tomcat/conf/server.xml
- <Connector port="80"protocol="HTTP/1.1" #70行
- connectionTimeout="20000"
- redirectPort="8443"/>
- ##########重新啟動服務(wù)############
- [root@node1conf]# catalina.sh stop
- [root@node1conf]# catalina.sh start
- [root@node1conf]# scp server.xml 192.168.18.2:/usr/local/tomcat/conf/
- [root@node2local]# catalina.sh stop
- [root@node2local]# catalina.sh start
#p#
3、配置前端服務(wù)器實(shí)現(xiàn)負(fù)載均衡
- ##########安裝Apache###################
- [root@node~]# yum -y install httpd
- [root@node~]# service httpd start
- ##########配置基于mod_proxy代理,負(fù)載均衡########
- [root@node~]# cd /etc/httpd/conf.d/
- [root@nodeconf.d]# vim mod_proxy_tomcat.conf
- ProxyViaOn
- ProxyRequestsOff #關(guān)閉正向代理
- ProxyPreserveHostOff
- <Proxybalancer://hotcluster> #定義代理的后端服務(wù)器
- BalancerMember http://192.168.18.39:80 loadfactor=1 #指定后端服務(wù)器地址及端口
- BalancerMember http://192.168.18.36:80 loadfactor=1
- ProxySet lbmethod=byrequests
- </Proxy>
- <Location/zhao>
- SetHandler balancer-manager
- Proxypass !
- Order Deny,Allow
- Allow from all
- </Location>
- ProxyPass/ balancer://hotcluster/
- #stickysession=JSESSIONID|jsessionidnofailover=On
- ProxyPassReverse/ balancer://hotcluster/
- <Proxy*>
- Order Allow,Deny
- Allow From all
- </Proxy>
- <Location / >
- Order Allow,Deny
- Allow From all
- </Location>
- ############測試語法的正確性##############
- [root@nodeconf.d]# service httpd configtest
- ###########重啟服務(wù)#######################
- [root@nodeconf.d]# service httpd restart
4、查看鏈接狀況開啟tomcat管理功能:
- ##注意:由于兩臺后端服務(wù)器可能都會用到,所以兩邊都要創(chuàng)建用戶并且保持一致##
- #########更改用戶管理配置文件######
- [root@node1conf]# vim /usr/local/tomcat/conf/tomcat-users.xml
- ##內(nèi)容:##
- <rolerolenamerolerolename="manager-gui"/>
- <role rolename="admin-gui"/>
- <user username="tomcat"password="tomcat" roles="manager-gui,admin-gui"/>
- #########復(fù)制到Tomcat B###########
- [root@node1conf]# scp tomcat-users.xml 192.168.18.2:/usr/local/tomcat/conf/
- ##########重新啟動服務(wù)############
- [root@node1conf]# catalina.sh stop
- [root@node1conf]# catalina.sh start
- [root@node2local]# catalina.sh stop
- [root@node2local]# catalina.sh start
5、簡單部署主頁查看session值:
- ##########部署虛擬目錄和部署主頁#############
- ######### Tomcat A ###########
- [root@node1 tomcat]# mkdir webapps/testapp/WEB-INF/{lib,classes} -pv
- [root@node1 tomcat]# vim webapps/testapp/index.jsp
- ###內(nèi)容###
- <%@ 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>
- [root@node1 tomcat]# catalina.sh stop
- [root@node1 tomcat]# catalina.sh start
- ############ Tomcat B ###########
- [root@node2 tomcat]# mkdir webapps/testapp/WEB-INF/{lib,classes} -pv
- [root@node2 tomcat]# vim webapps/testapp/index.jsp
- ###內(nèi)容###
- <%@ page language="java" %>
- <html>
- <head><title>TomcatB</title></head>
- <body>
- <h1><font color="blue">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>
- [root@node2 webapps]# catalina.sh stop
- [root@node2 webapps]# catalina.sh start
#p#
6、基于內(nèi)存復(fù)制實(shí)現(xiàn)session共享集群:
- ############# Tomcat A ############
- [root@node1 ~]# cd /usr/local/tomcat/conf/
- [root@node1 conf]# nano server.xml #由于以下內(nèi)容有縮進(jìn)格式建議使用此編輯器
- ##添加在/host和/engine之間:##
- <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="228.0.0.4"
- port="45564"
- frequency="500"
- dropTime="3000"/>
- <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
- address="192.168.18.1" #自己的地址
- 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=""/>
- <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>
- #停止tomcat##
- [root@node1 ~]# catalina.sh stop
- [root@node1 conf]# cp web.xml ../webapps/testapp/WEB-INF/
- [root@node1 conf]# vim ../webapps/testapp/WEB-INF/web.xml
- 添加如下字段:
- <distributable /> #表示這個(gè)應(yīng)用程序的會話將實(shí)現(xiàn)分布式
- [root@node1 conf]# scp ../webapps/testapp/WEB-INF/web.xml 192.168.18.2:/usr/local/tomcat/webapps/testapp/WEB-INF/
- [root@node1 conf]# scp server.xml 192.168.18.2:/usr/local/tomcat/conf/
- [root@node1 conf]# catalina.sh start
- ############ Tomcat B ###########
- [root@node1 ~]# catalina.sh stop
- [root@node1 conf]# catalina.sh start
總結(jié):我們發(fā)現(xiàn)無論如何刷新,session id的信息都不會再改變。至此我們完成了使用mod_proxy實(shí)現(xiàn)負(fù)載均衡和利用tomcat集群實(shí)現(xiàn)session共享。下面我們來部署商店的應(yīng)用。
7、在線商店的應(yīng)用實(shí)現(xiàn)
- ############ Tomcat A ############
- [root@node1 ~]# unzip shopxx-a5-Beta.zip
- [root@node1 ~]# mv shopxx-v3.0-Beta/* /usr/local/tomcat/webapps/shopxx
- [root@node2 tomcat]# vim webapps/shopxx/WEB-INF/web.xml
- <distributable /> #添加此字段
- ############ Tomcat B ############
- [root@node2 ~]# unzip shopxx-a5-Beta.zip
- [root@node2 ~]# mv shopxx-v3.0-Beta/* /usr/local/tomcat/webapps/shopxx
- [root@node2 tomcat]# vim webapps/shopxx/WEB-INF/web.xml
- <distributable /> #添加此字段
#p#
注:安裝環(huán)境不符合基本環(huán)境需要增加內(nèi)存:方法如下
- ######## Tomcat A ########################
- [root@node1 ~]# cd /usr/local/tomcat/bin/
- [root@node1 bin]# vim catalina.sh
- JAVA_OPTS="$JAVA_OPTS -Xmx256M" //237行
- 注釋:修改java虛擬機(jī)的內(nèi)存需要在啟動腳本里修改; -Xmx:定義java虛擬機(jī)使用最大內(nèi)存。其中M:指的是MB,不指定則為KB
- ######### Tomcat B 服務(wù)器也需要更改#######
- #########重新啟動服務(wù)#####################
更改完之后下一步:無法進(jìn)入到安裝頁面會重新回到進(jìn)入頁面;
原因:因?yàn)榘惭b時(shí)后端可能會出現(xiàn)負(fù)載均衡轉(zhuǎn)移所以導(dǎo)致無法進(jìn)入安裝頁面,只能使用本地安裝
- ######切換至前端服務(wù)器#########
- [root@node ~]# yum -y install firefox
- [root@node ~]# firefox &
安裝商城應(yīng)用
安裝mysql服務(wù)器,并授權(quán)一個(gè)用戶用于登錄安裝服務(wù)
- ############ Tomcat A ############
- [root@node1 shopxx]# yum -y install mysql-server
- [root@node1 shopxx]# service mysqld start
- [root@node1 shopxx]# mysql
- mysql> grant all on *.* to 'shopuser'@'192.168.%.%' identified by 'shoppass';
- mysql> flush privileges;
- ############ Tomcat B ############
- [root@node2 shopxx]# yum -y install mysql-server
- [root@node2 shopxx]# service mysqld start
- [root@node2 shopxx]# mysql
- mysql> grant all on *.* to 'shopuser'@'192.168.%.%' identified by 'shoppass';
- mysql> flush privileges;
點(diǎn)擊完成安裝,重啟web服務(wù)刪除install目錄
- [root@node1 shopxx]# mv install install.bak
- [root@node1 shopxx]# catalina.sh stop
- [root@node1 shopxx]# catalina.sh start
將Tomcat A 上shopxx安裝文件復(fù)制到Tomcat B上
- [root@node1 webapps]# scp -rp shopxx/* 192.168.18.2:/usr/local/tomcat/webapps/shopxx/
- [root@node2 shopxx]# catalina.sh stop
- [root@node2 shopxx]# catalina.sh start
下面就可以可以在商城系統(tǒng)注冊一個(gè)帳號,并登錄到系統(tǒng),購買一些衣服等,查看購物車中是否保存已加入到購物車中的衣服等等。
至此,tomcat基于session共享集群實(shí)現(xiàn)在線商城應(yīng)用部署就完美實(shí)現(xiàn)了,注意此商城不可做商業(yè)用途。