httpd+tomcat+memcached實現session保持

本節我將帶大家認識tomcat以及如何基於memcached實現tomcat的會話保持。好了廢話不多說,下面我們就開始了。

tomcat的介紹

Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。實際上Tomcat 是Apache 服務器的擴展,但它是獨立運行的,所以當你運行tomcat 時,它實際上作爲一個與Apache 獨立的進程單獨運行的。通常在我們的應用過程中,我們讓Apache 來處理HTML頁面請求,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Apache服務器。

tomcat的安裝

首先我們要做到是部署Java環境,只有安裝JDK即可。

這裏我已經有下好的JDK了

我使用的是jdk-7u9-linux-x64.rpm這個版本

直接安裝即可。

[root@TomcatA ~]# rpm -ivh jdk-7u9-linux-x64.rpm

tomcat的話我這裏也是下載好了。直接解壓就可以用了apache-tomcat-7.0.55.tar.gz

[root@TomcatA ~]# tar xf apache-tomcat-7.0.55.tar.gz -C /usr/local/             我們把它放在/usr/local/ 

一般我們都做個鏈接

[root@TomcatA local]# ln -sv apache-tomcat-7.0.55/ tomcat

下面修改下環境變量

[root@TomcatA local]# cat /etc/profile.d/java.sh                      這個是Java的變量

JAVA_HOME=/usr/java/latest  
PATH=$JAVA_HOME/bin:$PATH    
export JAVA_HOME PATH

[root@TomcatA local]# cat /etc/profile.d/tomcat.sh                  這個是tomcat的

export CATALINA_HOME=/usr/local/tomcat  
export PATH=$CATALINA_HOME/bin:$PATH

好了下面就可以使用Catalina.sh 來啓動了                                      Catalina.sh是服務啓動腳本

[root@TomcatA local]# catalina.sh start  
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    
Tomcat started.

這樣tomcat就啓動了。

[root@TomcatA local]# netstat -tnlp  
Active Internet connections (only servers)    
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1473/rpcbind       
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1726/sshd          
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1578/cupsd         
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1823/master        
tcp        0      0 0.0.0.0:46718               0.0.0.0:*                   LISTEN      1549/rpc.statd     
tcp        0      0 :::36716                    :::*                        LISTEN      1549/rpc.statd     
tcp        0      0 :::111                      :::*                        LISTEN      1473/rpcbind       
tcp        0      0 :::8080                     :::*                        LISTEN      2147/java          
tcp        0      0 :::22                       :::*                        LISTEN      1726/sshd          
tcp        0      0 ::1:631                     :::*                        LISTEN      1578/cupsd         
tcp        0      0 ::1:25                      :::*                        LISTEN      1823/master        
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      2147/java          
tcp        0      0 :::8009                     :::*                        LISTEN      2147/java 

通過上面的結果我們可以看出該服務啓動了3個端口:8080   8009    8005

下面我們就可以直接通過瀏覽器看下了。通過8080端口訪問。

image

OK,tomcat服務以及可以啓用了。

 

那麼下面我們就來看看如何構建Apache+tomcat+memcached架構

實驗:  
前端Apache:192.168.1.200

tomcat節點:192.168.1.201(TomcatA),192.168.1.202(TomcatB)  
memcached節點(一主一備實現高可用):192.168.1.201, 192.168.1.202    (機器內存有限,所以就沒有用獨立的主機了)    
實驗拓撲圖:

image 

前端Apache服務器配置

我們這裏用到的是Apache的代理模塊,由於centos6.5中內核支持該代理模塊,因此我們只需要直接yum安裝httpd然後再配置文件中加入以下文件即可:

[root@bogon ~]# vim /etc/httpd/conf.d/mod_proxy.conf    
<Proxy balancer://lbcluster1>    
BalancerMember http://192.168.1.202:8080 loadfactor=1
BalancerMember http://192.168.1.201:8080 loadfactor=1    
ProxySet lbmethod=byrequests    
</Proxy>

ProxyVia Off  
ProxyRequests Off  
ProxyPass / balancer://lbcluster1/  
ProxyPa***everse / balancer://lbcluster1/

memcached服務器

緩存服務器直接在2個節點上yum安裝即可,非常簡單

yum install memcached

安裝好之後啓動服務

[root@localhost ~]# service memcached start  
Starting memcached:                                        [  OK  ]

可以看到11211端口打開

[root@localhost ~]# ss -tnl  
State       Recv-Q Send-Q                      Local Address:Port                        Peer Address:Port    
LISTEN      0      128                                    :::11211                                 :::*    
LISTEN      0      128                                     *:11211                                  *:*  

 

 

tomcat端配置

最關鍵的就是tomcat的配置了

實現會話保持我們用到的是memcached-session-manager,而他需要一下幾個類庫,我已經下載好了

這個是項目官方地址,可以到這裏進行下載http://code.google.com/p/memcached-session-manager/

[root@TomcatA msm]# ls  
javolution-5.5.1.jar               

memcached-session-manager-tc7-1.8.2.jar 

spymemcached-2.10.2.jar  

memcached-session-manager-1.8.2.jar 

msm-javolution-serializer-1.8.2.jar

將這幾個類庫放到tomcat的lib庫中,

[root@TomcatA msm]# cp * /usr/local/tomcat/lib/

進去看下,確保複製成功

image

好了下面就開始修改配置文件/usr/local/tomcat/conf/server.xml

分別在兩個tomcat上的host上定義一個用於測試的context容器,並在其中創建一個會話管理器,如下所示:

 <Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">   

              <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"    

           memcachedNodes="n1:192.168.1.201:11211,n2:192.168.1.202:11211"          #這裏分別指向2臺memcached服務器    

                failoverNodes="n1"    

                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"    

                transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"    

              />    

             </Context>

 

提供測試相應的文件夾及測試文件:

tomcatA:      
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}

mkdir: created directory `/usr/local/tomcat/webapps/test'  
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF'    
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF/classes'    
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF/lib'


# vim /usr/local/tomcat/webapps/test/index.jsp    
<%@ page language="java" %>    
<html>    
  <head><title>TomcatA</title></head>    
  <body>    
    <h1><font color="red">TomcatA.magedu.com</h1>    
    <table align="centre" border="1">    
      <tr>    
        <td>Session ID</td>    
    <% session.setAttribute("magedu.com","magedu.com"); %>    
        <td><%= session.getId() %></td>    
      </tr>    
      <tr>    
        <td>Created on</td>    
        <td><%= session.getCreationTime() %></td>    
     </tr>    
    </table>    
  </body>    
</html>

 

複製web.xml文件

# cp /usr/local/tomcat/conf/web.xml /usr/local/tomcat/webapps/test/WEB-INF/

 

tomcatB:      
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}

mkdir: created directory `/usr/local/tomcat/webapps/test'  
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF'  
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF/classes'  
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF/lib'

# vim /usr/local/tomcat/webapps/test/index.jsp  
<%@ page language="java" %>    
<html>    
  <head><title>TomcatB</title></head>    
  <body>    
    <h1><font color="blue">TomcatB.magedu.com</h1>    
    <table align="centre" border="1">    
      <tr>    
        <td>Session ID</td>    
    <% session.setAttribute("magedu.com","magedu.com"); %>    
        <td><%= session.getId() %></td>    
      </tr>    
      <tr>    
        <td>Created on</td>    
        <td><%= session.getCreationTime() %></td>    
     </tr>    
    </table>    
  </body>    
</html>

複製web.xml文件

# cp /usr/local/tomcat/conf/web.xml /usr/local/tomcat/webapps/test/WEB-INF/

 

 

 

好了下面我們就可以開始測試了

 

wKiom1QoIgaRtLaDAAEMXKvryac127.jpg

wKioL1QoIi-AVROCAAEYsE_VpHo417.jpg

OK,sessionID沒變,會話成功保持。

那麼本節的內容就講到這裏,老規矩,有什麼不好地方歡迎大家的批評指正,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章