LAMT+memcached實現session綁定

    現今,互聯網上,好多的公司爲了網站的健壯性,都用了java做了框架,網頁也都是JSP的,他們的服務器都採用了tomcat的架構,爲了瞭解這種架構,下面我做了一個實驗。   

    利用httpd在前端做代理,後端兩個tomcat提供服務,我們還採用了NFS網絡共享存儲,MySQL服務器,爲網站的數據一致性提供保障。


系統:CentOS 6.5

地址說明:172.16.30.1是我們的惟一公網地址,192.168.160.0網段爲內網地址


搭建我們的tomcat服務器

當我們的tomcat運行在Linux平臺上時,它需要java的虛擬機JVM,這裏,jdk就提供了java虛擬機

 

在我們的前面兩個節點上都安裝JVM環境

[root@node1 ~]# rpm -ivh jdk-7u9-linux-x64.rpm
[root@node1 ~]# vim /etc/profile.d/jdk.sh     #將java程序加入到環境變量中
JAVA_HOME=/usr/java/latest
PATH=$JAVA_HOME/bin:$PATH
export  JAVA_HOME PATH
[root@node1 ~]# source /etc/profile.d/jdk.sh

在兩個節點上安裝tomcat服務

[root@node1 ~]# tar -zxf apache-tomcat-7.0.55.tar.gz -C /usr/local/
[root@node1 local]# ln -sv apache-tomcat-7.0.55  tomcat
[root@node2 local]# vim /etc/profile.d/tomcat.sh     #將tomcat的腳本文件加入到環境變量中去
export  CATALINA_HOME=/usr/local/tomcat
export  PATH=$CATALINA_HOME/bin:$PATH
[root@node2 local]# source /etc/profile.d/tomcat.sh

爲tomcat提供啓動腳本

[root@node1 local]# vim /etc/rc.d/init.d/tomcat
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS='-Xms64m -Xmx128m'
JAVA_HOME=/usr/java/latest
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME
case $1 in
start)
  exec $CATALINA_HOME/bin/catalina.sh start ;;
stop)
  exec $CATALINA_HOME/bin/catalina.sh stop;;
restart)
  $CATALINA_HOME/bin/catalina.sh stop
  sleep 2
  exec $CATALINA_HOME/bin/catalina.sh start ;;
*)
  echo "Usage: `basename $0` {start|stop|restart}"
  exit 1
  ;;
esac
[root@node1 local]# chmod +x /etc/rc.d/init.d/tomcat     #添加執行權限
[root@node1 local]# chkconfig –add tomcat

在tomcat的工作目錄下創建test目錄,並且提供主頁和相關目錄

創建目錄(兩個節點都創建)

[root@node1 ~]# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}

分別爲兩個節點提供主頁

node1:

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

node2:

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

此時,啓動tomcat服務,分別在瀏覽器中訪問這兩臺主機

[root@node1 ~]# service tomcat start


此時,我們在前端使用httpd服務器分別調度到這兩臺tomcat服務器

確保我們的httpd已經有proxy這個模塊了

[root@localhost ~]# httpd -t -M | grep proxy     #確保有以下幾個模塊
proxy_module (shared)
proxy_balancer_module (shared)
proxy_http_module (shared)
proxy_ajp_module (shared)

添加配置文件,內容如下

[root@localhost ~]# vim /etc/httpd/conf.d/mod_proxy.conf
<Proxy balancer://lb1>
    BalancerMember ajp://192.168.160.129:8009 route=node1     #這裏的route指定的名稱在tomcat中指定
    BalancerMember ajp://192.168.160.130:8009 route=node2     #這裏使用ajp的協議
    ProxySet lbmethod=byrequests
</Proxy>
ProxyPass /  balancer://lb1/
ProxyPa***everse /  balancer://lb1/

重啓我們的httpd服務,在瀏覽器中訪問

[root@localhost ~]# service httpd restart


爲了使我們的後端tomcat服務器,不能被用戶直接訪問,我們應該將8080端口關閉,在兩個tomcat節點上進行

[root@node1 ~]# vim /usr/local/tomcat/conf/server.xml 
    <!– Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /–>     #將此段註釋掉,調試時,可以打開

並且添加此選項:


httpd會將請求調度到後端的不同的tomcat服務器上,但是,如果,我們的是購物網站,如何實現session綁定呢?

 

最好的方法就是session的服務器,我們在我們的兩個tomcat服務器上安裝memcached服務

[root@node2 ~]# yum install -y memcached

並將memcached啓動

[root@node1 ~]# service memcached start

爲tomcat提供下列的類文件(下列操作在兩個tomcat節點上進行)

javolution-5.5.1.jar
memcached-session-manager-1.8.2.jar
memcached-session-manager-tc7-1.8.2.jar
msm-javolution-serializer-1.8.2.jar
spymemcached-2.10.2.jar

 

將上面的這些文件拷貝到tomcat的lib目錄中

[root@node1 msm]# cp *.jar /usr/local/tomcat/lib/

然後,分別更改兩個節點的配置文件

添加如下選項:

<Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.160.129:11211,n2:192.168.160.130:11211"
    failoverNodes="n2"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
   />
</Context>

重啓我們的tomcat服務,然後,再次訪問查看session信息

[root@node1 ~]# service tomcat restart

此時,session信息是完全一致的

 

搭建NFS服務器,並啓動服務

[root@node4 ~]# mkdir -pv /web/jcenter
[root@node4 ~]# vim /etc/exports 
/web/jcenter    192.168.160.0/16(rw,no_root_squash)
[root@node4 ~]# service nfs start

提供jcenter程序包

[root@node4 ~]# tar xf JavaCenter_Home_2.0_GBK.tar.bz2 -C /web/jcenter/
[root@node4 jcenter]# cd JavaCenter_Home_2.0_GBK/
[root@node4 JavaCenter_Home_2.0_GBK]# mv * ./..
[root@node4 JavaCenter_Home_2.0_GBK]# cd ..
[root@node4 jcenter]# rm -rf JavaCenter_Home_2.0_GBK/
[root@node4 jcenter]# chmod -R 755 attachment/

然後,指定數據庫的用戶名和密碼等信息

[root@node4 jcenter]# vim config.properties
dbHost = 192.168.160.131
dbPort = 3306
dbUser = jcenter
dbPw = jcenter
dbName = jcenter

搭建MySQL數據庫,新建用戶,並賦予權限

[root@node3 ~]# yum install -y mysql-server
[root@node3 ~]# service mysqld start

創建jcenter數據庫

mysql> create database jcenter;
mysql> grant all on jcenter.* to jcenter@'192.168.160.%' identified by 'jcenter';
mysql>flush privileges;

回到我們的tomcat服務器,新建實例jcenter,在兩個節點上都操作

[root@node1 ~]# mkdir -pv /usr/local/tomcat/webapps/jcenter
[root@node1 ~]# mount -t nfs 192.168.160.132:/web/jcenter /usr/local/tomcat/webapps/jcenter/

然後,再次更改tomcat的配置文件,兩個節點都做修改

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

   #可以將原來的test改爲jcenter


重啓tomcat服務

[root@node2 tomcat]# service tomcat restart

到瀏覽器中訪問jcenter/install



    此時,我們的tomcat上的jcenter是能夠正常工作的,無論怎麼刷新,session信息都被綁定了,訪問都不會被重新定向的,搭建session服務器,是保持用戶session信息的一種非常好的方式


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