本節我將帶大家認識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端口訪問。
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 (機器內存有限,所以就沒有用獨立的主機了)
實驗拓撲圖:
前端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/
進去看下,確保複製成功
好了下面就開始修改配置文件/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/
好了下面我們就可以開始測試了
OK,sessionID沒變,會話成功保持。
那麼本節的內容就講到這裏,老規矩,有什麼不好地方歡迎大家的批評指正,謝謝!