1. 需求描述
現在需要配置一個LAMT(Linux+Apache+Mysql+Tomcat)的webapp服務器
同時由於需要兩臺Tomcat,需要對會話Session進行處理,故在此採用memcached部署Session集羣服務器,實驗拓撲如下.
由於條件有限,故可能多個服務可能部署在同一臺服務器,敬請諒解
2. 首先安裝Tomcat,並部署一個測試頁面
首先安裝Java,再安裝Tomcat,並導出相應環境變量
在Tomcat的webapps目錄下新建一個test目錄,在test目錄中分別建立一個index.jsp的文件,內容如下
Lab2
<%@ page language="java" %> <html> <head><title>lab2</title></head> <body> <h1><font color="red">lab2.stu21.com</font></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>
lab3:
<%@ page language="java" %> <html> <head><title>lab3</title></head> <body> <h1><font color="blue">lab3.stu21.com</font></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>
此時分別訪問lab2和lab3的8080端口,效果如下,並且Session ID一直在變動
3. msm(memcached-session-manager)配置
1.首先需要將如下jar包放入tomcat安裝目錄下的lib目錄下
javolution-5.5.1.jar memcached-session-manager-1.8.2.jar memcached-session-manager-tc7-1.8.2.jar(此處的tc7爲tomcat版本,要保證於tomcat版本的一致) msm-javolution-serializer-1.8.2.jar spymemcached-2.10.2.jar
2.配置tomcat配置文件server.xml,在test的context中加入如下內容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.21.1:11211" #此處爲memcached服務器地址 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" #不爲圖片等靜態內容添加緩存 transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" />
3.在memcached服務器安裝memcached服務器並啓動,接着重啓tomcat服務,此時訪問tomcat,效果如下
在原來的Session ID後增加了一個”-1”的字符,證明msm配置已經成功\
4. 在httpd上配置負載均衡,配置如下
ProxyVia Off ProxyRequests Off ProxyPass /jcenter balancer://jcenter/ ProxyPass /test balancer://test/ ProxyPa***everse /test balancer://test/ ProxyPa***everse /jcenter balancer://jcenter/ <proxy balancer://test> BalancerMember ajp://172.16.21.102:8009/test/ loadfactor=10 BalancerMember ajp://172.16.21.103:8009/test/ loadfactor=10 </proxy> <proxy balancer://jcenter> BalancerMember ajp://172.16.21.102:8009/jcenter/ loadfactor=10 BalancerMember ajp://172.16.21.103:8009/jcenter/ loadfactor=10 </proxy>
此時,我們可以通過172.16.21.1來訪問後端的tomcat了,並且session不會發生改變,效果如下
每次刷新響應的Tomcat不同,但是Session ID不會改變,此時,我們就可以部署JavaCenter了
5. JavaCenter部署
訪問Lab2,安裝Mysql並授權jcenter用戶從172.16.21網段及lab.stu21.com,lab3.stu21.com的完全訪問jcenter數據庫的權限,將安裝包解壓到webapps目錄下,重命名爲jcenter,便可以進行訪問了,訪問172.16.21.102:8080/jcenter/install便可以進行安裝,按照提示安裝完成.
將jcenter目錄通過nfs進行網絡共享,允許172.16.21.103進行訪問,在lab3上將其掛在到於lab2相同的目錄下,此時亦可以進行正常訪問,但是要注意數據庫的IP,一定要指向172.16.21.2,否則在lab3上可能無法正產訪問.
先在我們需要將test下關於msm的配置複製到jcenter下,效果如下
<Context path="/jcenter" docBase="jcenter" > <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.21.1:11211" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" /> </Context>
現在我們重啓服務器,便可以從172.16.21.1進行訪問了.現在無論我們被定向到哪個服務器,都不會存在session丟失,也就不存在登錄失效等問題了.