Apache代理Tomcat實現session共享構建網上商城系統

1、環境介紹html

2、安裝配置後端服務器前端

3、安裝配置前端服務器java

4、配置Tomcat服務器實現session共享mysql

5、構建網上商城系統linux


1、環境介紹
web

195513159.gif

系統版本:CentOS 6.4_x86_64算法

Mysql版本:mysql-5.1.66-2.el6_3.x86_64sql

Apache版本:httpd-2.2.15-26.el6數據庫

Tomcat版本:apache-tomcat-7.0.33 點此下載apache

Jdk版本: jdk-7u40-linux-x64 點此下載

Tomcat-commectors版本:tomcat-connectors-1.2.37 點此下載

網上商城系統:shopxx-3.0Beta 點此下載

環境介紹:

註釋:後端服務器網卡使用"Host-only";前端Apache服務器"eth1"網卡爲"Host-only","eth0"網卡爲"Bridged";然後端服務器的網關指向Apache的服務器的"eth1"網卡地址

當用戶經過 "www.allen.com" 域名訪問時,首先由前端Apache服務器響應並把動態頁面根據某種調度算法將請求轉發之後端Tomcat服務器上,由Tomcat服務器響應Apache服務器,再由Apache服務器響應客戶端;然後端Tomcat服務器是基於Tomcat自帶的基於內存複製的session共享集羣

注:Tomcat的詳細配置及介紹請看前兩篇寫的博客,這裏主要介紹tomcat如何實現的session共享


2、安裝配置後端服務器

一、安裝Tomcat服務器,安裝方法相同,這裏只介紹一次

------安裝JDK
# rpm -ivh jdk-7u40-linux-x64.rpm
# 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    #查看JDK是否安裝成功
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
------------------------------------------------------------------------
------安裝Tomcat
# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/
# cd /usr/local/
# ln -s apache-tomcat-7.0.42 tomcat
# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:/$PATH
# catalina.sh version     #查看Tomcat是否安裝成功
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.42
Server built:   Jul 2 2013 08:57:41
Server number:  7.0.42.0
OS Name:        Linux
OS Version:     2.6.32-358.el6.x86_64
Architecture:   amd64
JVM Version:    1.7.0_40-b43
JVM Vendor:     Oracle Corporation
----------------------------------------------------------------------
# catalina.sh start    #啓動Tomcat進程
# jps                  #查看啓動的JVM虛擬機與Tomcat
2925 Bootstrap
2943 Jps
# ss -tanlp|grep 80    #查看監聽的端口
LISTEN     0      100                      :::8080                    :::*      users:(("java",2925,40))
LISTEN     0      1          ::ffff:127.0.0.1:8005                    :::*      users:(("java",2925,46))
LISTEN     0      100                      :::8009                    :::*      users:(("java",2925,41))

二、安裝Mysql服務器,並受權一個用戶便於後面安裝網上商城系統使用

[root@mysql ~]# yum -y install mysql-server
[root@mysql ~]# service mysqld start
[root@mysql ~]# mysql
mysql> grant all on *.* to 'shopuser'@'192.168.1.%' identified by 'shoppass';
mysql> flush privileges;
註釋:受權一個用戶,用於商城系統鏈接數據庫使用,這裏受權了全部權限方便作實驗,但在生產環境中千萬不要受權全部權限;而後刷新使其生效

3、安裝配置前端服務器

一、安裝Apache服務

[root@apache ~]# yum -y install httpd
[root@apache ~]# service httpd start
[root@apache ~]# ss -tanl | grep 80
LISTEN     0      128            :::80                 :::*

二、訪問測試服務是否正常

132951843.gif

三、配置基於"mod_proxy"模塊的Apache代理(使用rpm包安裝默認已經開啓了此模塊)

[root@apache ~]# vim /etc/httpd/conf.d/mod_proxy.conf
ProxyVia On
ProxyRequests Off
ProxyPreserveHost Off
<Proxy balancer://allen>
BalancerMember  http://192.168.1.1:8080 loadfactor=1
BalancerMember  http://192.168.1.2:8080 loadfactor=1
ProxySet  lbmethod=bytraffic
</Proxy>
<Proxy *>
  Order allow,deny
  Allow from all
</Proxy>
ProxyPass / balancer://allen/
ProxyPa***everse / balancer://allen/
<Location />
  Order allow,deny
  Allow from all
</Location>
----------------------------------------------------------------------
註釋:BalancerMember  指定後端服務器IP及鏈接協議、權重等

四、開啓Tomcat的管理功能並訪問測試;兩臺Tomcat服務器配置相同

------添加以下內容
# vim /usr/local/tomcat/conf/tomcat-users.xml
  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcat" roles="admin-gui.manager-gui"/>
------------------------------------------------------------------------
# catalina.sh stop    #從新啓動使其生效
# catalina.sh start

五、使用"www.allen.com" 域名訪問測試是否能登陸到Tomcat後端管理頁面

######Windows客戶端在hosts文件中添加以下記錄
C:\Windows\System32\drivers\etc\hosts
172.16.14.1    www.allen.com

141106697.gif

141111977.gif


4、配置Tomcat服務器實現session共享

一、修改Tomcat1服務器的配置文件

[root@Tomcat1 ~]# cd /usr/local/tomcat/conf/
[root@Tomcat1 conf]# cp server.xml server.xml.bak
----------------------------------------------------------------------
[root@Tomcat1 conf]# vim server.xml
    <Engine name="Catalina" defaultHost="www.allen.com"> #修改默認訪問主機
      <Host name="www.allen.com"  appBase="/web/allen"   #在Engine標籤中添加一個虛擬主機
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="allen_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        <Context path="" docBase="/web/allen" />
      </Host>
----------------------------------------------------------------------
[root@Tomcat1 ~]# mkdir -p /web/allen            #建立網站存放目錄
[root@Tomcat1 conf]# vim /web/allen/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>
----------------------------------------------------------------------
[root@Tomcat1 ~]# catalina.sh stop    #重啓使配置生效
[root@Tomcat1 ~]# catalina.sh start

二、修改Tomcat2服務器的配置文件

[root@Tomcat2 ~]# cd /usr/local/tomcat/conf/
[root@Tomcat2 conf]# cp server.xml server.xml.bak
----------------------------------------------------------------------
[root@Tomcat2 conf]# vim server.xml
    <Engine name="Catalina" defaultHost="www.allen.com"> #修改默認訪問主機
      <Host name="www.allen.com"  appBase="/web/allen"   #在Engine標籤中添加一個虛擬主機
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="allen_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        <Context path="" docBase="/web/allen" />
      </Host>
----------------------------------------------------------------------
[root@Tomcat2 ~]# mkdir -p /web/allen            #建立網站存放目錄
[root@Tomcat2 conf]# vim /web/allen/index.jsp    #建立測試頁面
<%@ 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@Tomcat2 ~]# catalina.sh stop    #重啓使配置生效
[root@Tomcat2 ~]# catalina.sh start

三、訪問前端代理服務器測試是否實現負載均衡效果

200636662.gif

200638787.gif

四、配置Tomcat服務器實現session共享

######編輯Tomcat1服務器
[root@Tomcat1 ~]# nano /usr/local/tomcat/conf/server.xml  #使用"nano"文本編輯工具打開主配置文件
<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.1.1"    #主機IP地址,也可使用auto
                      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>
註釋:以上內容在「<Engine>」標籤中添加,對全部主機生效;也能夠添加在「<Host>」標籤中,對當前主機生效;用"nano"編輯工具的緣由是:複製這些集羣配置粘貼至文本文件時有格式,若是使用"vim"打開,粘貼到文本中比較亂,修改完成後,按<Crtl+o>組合鍵而後再按<Crtl+x>組合鍵保存,再使用"vim"編輯器編輯其內容就沒有問題了
----------------------------------------------------------------------
[root@Tomcat1 ~]# mkdir /web/allen/WEB-INF    #建立"WEB-INF"目錄
[root@Tomcat1 ~]# cp /usr/local/tomcat/conf/web.xml /web/allen/WEB-INF/    #爲此網站提供一個"web.xml"文件
[root@Tomcat1 ~]# vim /web/allen/WEB-INF/web.xml
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">
<distributable/>                      #添加此行內容
</web-app>
----------------------------------------------------------------------
[root@Tomcat1 ~]# catalina.sh stop    #重啓使用配置生效
[root@Tomcat1 ~]# catalina.sh start
========================================================================
######修改Tomcat2服務器
[root@Tomcat1 ~]# scp /usr/local/tomcat/conf/server.xml 192.168.1.2:/usr/local/tomcat/conf/
[root@Tomcat1 ~]# scp -r /web/allen/WEB-INF 192.168.1.2:/web/allen/
註釋:將Tomcat1服務器的主配置文件與網站目錄下的"WEB-INF"目錄及目錄下的文件複製到Tomcat2服務器;而後只須要修改主配置中集羣配置代碼中的IP地址爲當前主機的IP地址便可:以下
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="192.168.1.2"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>
----------------------------------------------------------------------
[root@Tomcat2 ~]# catalina.sh stop    #重啓服務使配置生效
[root@Tomcat2 ~]# catalina.sh start

五、驗證是否實現session共享

204542184.gif

204545785.gif

由上圖可見,訪問到不一樣的後臺主機而"session_id"是相同的,已經成功實現"session"共享

六、能夠查看Tomcat日誌驗證集羣節點是否正常

# tail /usr/local/tomcat/logs/catalina.2013-09-24.log
INFO: Received member disappeared:org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 1, 2}:4000,{192, 168, 1, 2},4000, alive=377686, securePort=-1, UDP Port=-1, id={73 -112 -108 -8 97 9 66 63 -110 -63 -81 115 61 -92 90 78 }, payload={}, command={66 65 66 89 45 65 76 69 88 ...(9)}, domain={}, ]
註釋:由上可知,有一個地址"192.168.1.2"已加入到集羣中

5、構建網上商城系統

一、需調整java虛擬機運行的內存大小,不然安裝網上商城系統時會提示內存較小

# vim /usr/local/tomcat/bin/catalina.sh
#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"  #找到此行在下面添加以下內容
JAVA_OPTS="$JAVA_OPTS -Xmx300M"
註釋:修改java虛擬機的內存須要在啓動腳本里修改; -Xmx:java虛擬機使用最大內存 -Xms:java虛擬機初始值的內存大小  -Xmn:java虛擬機的最小使用內存;M:指的是MB,不指定則爲KB

二、在Tomcat1服務器上安裝網上商城系統

[root@Tomcat1 ~]# unzip shopxx-3.0Beta.zip    #解壓縮商城系統
[root@Tomcat1 ~]# rm -rf /web/allen/*         #刪除原來網站目錄文件或新添加一個虛擬主機;
[root@Tomcat1 ~]# cp -rp shopxx-v3.0-Beta/shopxx-3.0Beta /web/allen/shop    #將商城系統複製到網站目錄下
[root@Tomcat1 ~]# vim /web/allen/shop/WEB-INF/web.xml
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<distributable/>    #添加此內容
註釋:修改網站目錄下"web.xml"文件,在"<web-app>"標籤下添加內容
------------------------------------------------------------------------
<distributable/>
[root@Tomcat1 ~]# catalina.sh stop            #重啓Tomcat服務
[root@Tomcat1 ~]# catalina.sh start

三、在前端Apache服務器上安裝瀏覽器軟件

[root@apache ~]# yum -y install firefox
註釋:若是後端服務器直接能夠跟本地通訊,這一步能夠省略,安裝的時候不能通過代理來安裝

四、安裝網上商城系統

[root@apache ~]# firefox &    #在前端服務器執行此命令會打開一個圖形化瀏覽器窗口

000114913.gif

勾選贊成使用協議,點擊下一步

000738767.gif

點擊下一步,會有一個警告提示信息,能夠點OK繼續安裝;而後填寫數據庫信息

001119125.gif

點當即安裝,會自動建立數據庫安裝並初始化數據

001428245.gif

五、而後點擊完成安裝,會提示讓重啓WEB服務,上圖中還提示安裝完成後刪除install目錄

[root@Tomcat1 ~]# mv /web/allen/shop/install /web/allen/shop/install.bak
[root@Tomcat1 ~]# catalina.sh stop
[root@Tomcat1 ~]# catalina.sh start
註釋:這裏沒有刪除Install目錄只是作了重命名,而後重啓服務

六、將Tomcat1服務器的的WEB程序與修改過的"catalina.sh"腳本複製到Tomcat2服務器相對應的路徑下

[root@Tomcat2 ~]# rm -rf /web/allen/*   #刪除Tomcat2服務器上網站目錄的測試文件
[root@Tomcat1 ~]# scp -rp /web/allen/shop 192.168.1.2:/web/allen/
[root@Tomcat1 ~]# scp /usr/local/tomcat/bin/catalina.sh 192.168.1.2:/usr/local/tomcat/bin/
------------------------------------------------------------------------
[root@Tomcat2 ~]# catalina.sh stop      #重啓Tomcat2服務器上的Tomcat服務
[root@Tomcat2 ~]# catalina.sh start

七、使用本地瀏覽器訪問 "www.allen.com" 域名驗證網上商城系統

004146803.gif

八、能夠在商城系統註冊一個賬號,並登陸到系統,好比購買一些衣服等,查看購物車中是否保存已加入到購物車中的衣服;若是有說明"session"信息已經成功同步到各節點並可以追蹤用戶的狀態信息


到此,Tomcat基於內存複製的session共享集羣已完成,也能夠成功實現一個網上商城系統的正常運行,這裏就不作太多介紹了,固然若是博友們有興趣能夠登陸到後臺管理界面看看,注意:使用此商城系統時只能用於演示,不能用於商業,使用時請認識閱讀受權協議...

相關文章
相關標籤/搜索