w2ewe 发表于 2014-10-20 10:51:37

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环境

1
2
3
4
5
6
# rpm -ivh jdk-7u9-linux-x64.rpm
# vim /etc/profile.d/jdk.sh   #将java程序加入到环境变量中
JAVA_HOME=/usr/java/latest
PATH=$JAVA_HOME/bin:$PATH
exportJAVA_HOME PATH
# source /etc/profile.d/jdk.sh




在两个节点上安装tomcat服务

1
2
3
4
5
6
# tar -zxf apache-tomcat-7.0.55.tar.gz -C /usr/local/
# ln -sv apache-tomcat-7.0.55tomcat
# vim /etc/profile.d/tomcat.sh   #将tomcat的脚本文件加入到环境变量中去
exportCATALINA_HOME=/usr/local/tomcat
exportPATH=$CATALINA_HOME/bin:$PATH
# source /etc/profile.d/tomcat.sh




为tomcat提供启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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
# chmod +x /etc/rc.d/init.d/tomcat   #添加执行权限
# chkconfig –add tomcat




在tomcat的工作目录下创建test目录,并且提供主页和相关目录
创建目录(两个节点都创建)

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




分别为两个节点提供主页
node1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" %>

node1

    node1.365lsy.com
   


    <% session.setAttribute("365lsy.com","365lsy.com"); %>







Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>







node2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" %>

node2

    node2.365lsy.com
   


    <% session.setAttribute("365lsy.com","365lsy.com"); %>







Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>







此时,启动tomcat服务,分别在浏览器中访问这两台主机

1
# service tomcat start






此时,我们在前端使用httpd服务器分别调度到这两台tomcat服务器
确保我们的httpd已经有proxy这个模块了

1
2
3
4
5
# httpd -t -M | grep proxy   #确保有以下几个模块
proxy_module (shared)
proxy_balancer_module (shared)
proxy_http_module (shared)
proxy_ajp_module (shared)




添加配置文件,内容如下

1
2
3
4
5
6
7
8
# vim /etc/httpd/conf.d/mod_proxy.conf

    BalancerMember ajp://192.168.160.129:8009 route=node1   #这里的route指定的名称在tomcat中指定
    BalancerMember ajp://192.168.160.130:8009 route=node2   #这里使用ajp的协议
    ProxySet lbmethod=byrequests

ProxyPass /balancer://lb1/
ProxyPassReverse /balancer://lb1/




重启我们的httpd服务,在浏览器中访问

1
# service httpd restart






为了使我们的后端tomcat服务器,不能被用户直接访问,我们应该将8080端口关闭,在两个tomcat节点上进行

1
2
3
4
# vim /usr/local/tomcat/conf/server.xml
                   connectionTimeout="20000"
               redirectPort="8443" /–>   #将此段注释掉,调试时,可以打开




并且添加此选项:

1






httpd会将请求调度到后端的不同的tomcat服务器上,但是,如果,我们的是购物网站,如何实现session绑定呢?

最好的方法就是session的服务器,我们在我们的两个tomcat服务器上安装memcached服务

1
# yum install -y memcached




并将memcached启动

1
# 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目录中

1
# cp *.jar /usr/local/tomcat/lib/




然后,分别更改两个节点的配置文件
添加如下选项:

1
2
3
4
5
6
7
8

<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"
   />





重启我们的tomcat服务,然后,再次访问查看session信息

1
# service tomcat restart





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

搭建NFS服务器,并启动服务

1
2
3
4
# mkdir -pv /web/jcenter
# vim /etc/exports
/web/jcenter    192.168.160.0/16(rw,no_root_squash)
# service nfs start




提供jcenter程序包

1
2
3
4
5
6
# tar xf JavaCenter_Home_2.0_GBK.tar.bz2 -C /web/jcenter/
# cd JavaCenter_Home_2.0_GBK/
# mv * ./..
# cd ..
# rm -rf JavaCenter_Home_2.0_GBK/
# chmod -R 755 attachment/




然后,指定数据库的用户名和密码等信息

1
2
3
4
5
6
# vim config.properties
dbHost = 192.168.160.131
dbPort = 3306
dbUser = jcenter
dbPw = jcenter
dbName = jcenter




搭建MySQL数据库,新建用户,并赋予权限

1
2
# yum install -y mysql-server
# service mysqld start




创建jcenter数据库

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




回到我们的tomcat服务器,新建实例jcenter,在两个节点上都操作

1
2
# mkdir -pv /usr/local/tomcat/webapps/jcenter
# mount -t nfs 192.168.160.132:/web/jcenter /usr/local/tomcat/webapps/jcenter/




然后,再次更改tomcat的配置文件,两个节点都做修改

1





   #可以将原来的test改为jcenter

重启tomcat服务

1
# service tomcat restart




到浏览器中访问jcenter/install



    此时,我们的tomcat上的jcenter是能够正常工作的,无论怎么刷新,session信息都被绑定了,访问都不会被重新定向的,搭建session服务器,是保持用户session信息的一种非常好的方式

页: [1]
查看完整版本: LAMT+memcached实现session绑定