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]