Apache代理Tomcat实现session共享构建网上商城系统
一、环境介绍
二、安装配置后端服务器
三、安装配置前端服务器
四、配置Tomcat服务器实现session共享
五、构建网上商城系统
一、环境介绍

系统版本:CentOS 6.4_x86_64
Mysql版本:mysql-5.1.66-2.el6_3.x86_64
Apache版本:httpd-2.2.15-26.el6
Tomcat版本:apache-tomcat-7.0.33 点此下载
Jdk版本: jdk-7u40-linux-x64 点此下载
Tomcat-commectors版本:tomcat-connectors-1.2.37 点此下载
网上商城系统:shopxx-3.0Beta 点此下载
环境介绍:
注释:后端服务器网卡使用"Host-only";前端Apache服务器"eth1"网卡为"Host-only","eth0"网卡为"Bridged";而后端服务器的网关指向Apache的服务器的"eth1"网卡地址
当用户通过 "www.allen.com" 域名访问时,首先由前端Apache服务器响应并把动态页面根据某种调度算法将请求转发以后端Tomcat服务器上,由Tomcat服务器响应Apache服务器,再由Apache服务器响应客户端;而后端Tomcat服务器是基于Tomcat自带的基于内存复制的session共享集群
注:Tomcat的详细配置及介绍请看前两篇写的博客,这里主要介绍tomcat如何实现的session共享
二、安装配置后端服务器
1、安装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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
------安装JDK# rpm -ivh jdk-7u40-linux-x64.rpm# vim /etc/profile.d/java.shexport JAVA_HOME=/usr/java/latestexport PATH=$JAVA_HOME/bin:$PATH# . /etc/profile.d/java.sh# java -version #查看JDK是否安装成功java version "1.7.0_40"Java(TM) SE Runtime Environment (build 1.7.0_40-b43)Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)------------------------------------------------------------------------------安装Tomcat# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/# cd /usr/local/# ln -s apache-tomcat-7.0.42 tomcat# vim /etc/profile.d/tomcat.shexport CATALINA_HOME=/usr/local/tomcatexport PATH=$CATALINA_HOME/bin:/$PATH# catalina.sh version #查看Tomcat是否安装成功Using CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME: /usr/java/latestUsing CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jarServer version: Apache Tomcat/7.0.42Server built: Jul 2 2013 08:57:41Server number: 7.0.42.0OS Name: LinuxOS Version: 2.6.32-358.el6.x86_64Architecture: amd64JVM Version: 1.7.0_40-b43JVM Vendor: Oracle Corporation----------------------------------------------------------------------# catalina.sh start #启动Tomcat进程# jps #查看启动的JVM虚拟机与Tomcat2925 Bootstrap2943 Jps# ss -tanlp|grep 80 #查看监听的端口LISTEN 0 100 :::8080 :::* users:(("java",2925,40))LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",2925,46))LISTEN 0 100 :::8009 :::* users:(("java",2925,41)) |
2、安装Mysql服务器,并授权一个用户便于后面安装网上商城系统使用
|
1
2
3
4
5
6
|
[root@mysql ~]# yum -y install mysql-server[root@mysql ~]# service mysqld start[root@mysql ~]# mysqlmysql> grant all on *.* to 'shopuser'@'192.168.1.%' identified by 'shoppass';mysql> flush privileges;注释:授权一个用户,用于商城系统连接数据库使用,这里授权了所有权限方便做实验,但在生产环境中千万不要授权所有权限;然后刷新使其生效 |
三、安装配置前端服务器
1、安装Apache服务
|
1
2
3
4
|
[root@apache ~]# yum -y install httpd[root@apache ~]# service httpd start[root@apache ~]# ss -tanl | grep 80LISTEN 0 128 :::80 :::* |
2、访问测试服务是否正常

3、配置基于"mod_proxy"模块的Apache代理(使用rpm包安装默认已经开启了此模块)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[root@apache ~]# vim /etc/httpd/conf.d/mod_proxy.confProxyVia OnProxyRequests OffProxyPreserveHost Off<Proxy balancer://allen>BalancerMember http://192.168.1.1:8080 loadfactor=1BalancerMember http://192.168.1.2:8080 loadfactor=1ProxySet lbmethod=bytraffic</Proxy><Proxy *> Order allow,deny Allow from all</Proxy>ProxyPass / balancer://allen/ProxyPassReverse / balancer://allen/<Location /> Order allow,deny Allow from all</Location>----------------------------------------------------------------------注释:BalancerMember 指定后端服务器IP及连接协议、权重等 |
4、开启Tomcat的管理功能并访问测试;两台Tomcat服务器配置相同
|
1
2
3
4
5
6
7
8
|
------添加如下内容# vim /usr/local/tomcat/conf/tomcat-users.xml <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui.manager-gui"/>------------------------------------------------------------------------# catalina.sh stop #重新启动使其生效# catalina.sh start |
5、使用"www.allen.com" 域名访问测试是否能登录到Tomcat后端管理页面
|
1
2
3
|
######Windows客户端在hosts文件中添加如下记录C:\Windows\System32\drivers\etc\hosts172.16.14.1 www.allen.com |


四、配置Tomcat服务器实现session共享
1、修改Tomcat1服务器的配置文件
|
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
27
28
29
30
31
32
33
34
35
36
|
[root@Tomcat1 ~]# cd /usr/local/tomcat/conf/[root@Tomcat1 conf]# cp server.xml server.xml.bak----------------------------------------------------------------------[root@Tomcat1 conf]# vim server.xml <Engine name="Catalina" defaultHost="www.allen.com"> #修改默认访问主机 <Host name="www.allen.com" appBase="/web/allen" #在Engine标签中添加一个虚拟主机 unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="allen_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="" docBase="/web/allen" /> </Host>----------------------------------------------------------------------[root@Tomcat1 ~]# mkdir -p /web/allen #创建网站存放目录[root@Tomcat1 conf]# vim /web/allen/index.jsp #创建测试页面<%@ page language="java" %><html> <head><title>TomcatA</title></head> <body> <h1><font color="red">TomcatA </font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("abc","abc"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body></html>----------------------------------------------------------------------[root@Tomcat1 ~]# catalina.sh stop #重启使配置生效[root@Tomcat1 ~]# catalina.sh start |
2、修改Tomcat2服务器的配置文件
|
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
27
28
29
30
31
32
33
34
35
36
|
[root@Tomcat2 ~]# cd /usr/local/tomcat/conf/[root@Tomcat2 conf]# cp server.xml server.xml.bak----------------------------------------------------------------------[root@Tomcat2 conf]# vim server.xml <Engine name="Catalina" defaultHost="www.allen.com"> #修改默认访问主机 <Host name="www.allen.com" appBase="/web/allen" #在Engine标签中添加一个虚拟主机 unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="allen_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="" docBase="/web/allen" /> </Host>----------------------------------------------------------------------[root@Tomcat2 ~]# mkdir -p /web/allen #创建网站存放目录[root@Tomcat2 conf]# vim /web/allen/index.jsp #创建测试页面<%@ page language="java" %><html> <head><title>TomcatB</title></head> <body> <h1><font color="blue">TomcatB </font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("abc","abc"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body></html>----------------------------------------------------------------------[root@Tomcat2 ~]# catalina.sh stop #重启使配置生效[root@Tomcat2 ~]# catalina.sh start |
3、访问前端代理服务器测试是否实现负载均衡效果


4、配置Tomcat服务器实现session共享
|
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
######编辑Tomcat1服务器[root@Tomcat1 ~]# nano /usr/local/tomcat/conf/server.xml #使用"nano"文本编辑工具打开主配置文件<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" #组播地址要保持一致 port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.1.1" #主机IP地址,也可以使用auto port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>注释:以上内容在“<Engine>”标签中添加,对所有主机生效;也可以添加在“<Host>”标签中,对当前主机生效;用"nano"编辑工具的原因是:复制这些集群配置粘贴至文本文件时有格式,如果使用"vim"打开,粘贴到文本中比较乱,修改完成后,按<Crtl+o>组合键然后再按<Crtl+x>组合键保存,再使用"vim"编辑器编辑其内容就没有问题了----------------------------------------------------------------------[root@Tomcat1 ~]# mkdir /web/allen/WEB-INF #创建"WEB-INF"目录[root@Tomcat1 ~]# cp /usr/local/tomcat/conf/web.xml /web/allen/WEB-INF/ #为此网站提供一个"web.xml"文件[root@Tomcat1 ~]# vim /web/allen/WEB-INF/web.xml<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><distributable/> #添加此行内容</web-app>----------------------------------------------------------------------[root@Tomcat1 ~]# catalina.sh stop #重启使用配置生效[root@Tomcat1 ~]# catalina.sh start |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
========================================================================######修改Tomcat2服务器[root@Tomcat1 ~]# scp /usr/local/tomcat/conf/server.xml 192.168.1.2:/usr/local/tomcat/conf/[root@Tomcat1 ~]# scp -r /web/allen/WEB-INF 192.168.1.2:/web/allen/注释:将Tomcat1服务器的主配置文件与网站目录下的"WEB-INF"目录及目录下的文件复制到Tomcat2服务器;然后只需要修改主配置中集群配置代码中的IP地址为当前主机的IP地址即可:如下 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.1.2" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/>----------------------------------------------------------------------[root@Tomcat2 ~]# catalina.sh stop #重启服务使配置生效[root@Tomcat2 ~]# catalina.sh start |
5、验证是否实现session共享


由上图可见,访问到不同的后台主机而"session_id"是相同的,已经成功实现"session"共享
6、可以查看Tomcat日志验证集群节点是否正常
|
1
2
3
|
# tail /usr/local/tomcat/logs/catalina.2013-09-24.logINFO: Received member disappeared:org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 1, 2}:4000,{192, 168, 1, 2},4000, alive=377686, securePort=-1, UDP Port=-1, id={73 -112 -108 -8 97 9 66 63 -110 -63 -81 115 61 -92 90 78 }, payload={}, command={66 65 66 89 45 65 76 69 88 ...(9)}, domain={}, ]注释:由上可知,有一个地址"192.168.1.2"已加入到集群中 |
五、构建网上商城系统
1、需调整java虚拟机运行的内存大小,否则安装网上商城系统时会提示内存较小
|
1
2
3
4
|
# vim /usr/local/tomcat/bin/catalina.sh#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`" #找到此行在下面添加如下内容JAVA_OPTS="$JAVA_OPTS -Xmx300M"注释:修改java虚拟机的内存需要在启动脚本里修改; -Xmx:java虚拟机使用最大内存 -Xms:java虚拟机初始值的内存大小 -Xmn:java虚拟机的最小使用内存;M:指的是MB,不指定则为KB |
2、在Tomcat1服务器上安装网上商城系统
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@Tomcat1 ~]# unzip shopxx-3.0Beta.zip #解压缩商城系统[root@Tomcat1 ~]# rm -rf /web/allen/* #删除原来网站目录文件或新添加一个虚拟主机;[root@Tomcat1 ~]# cp -rp shopxx-v3.0-Beta/shopxx-3.0Beta /web/allen/shop #将商城系统复制到网站目录下[root@Tomcat1 ~]# vim /web/allen/shop/WEB-INF/web.xml<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><distributable/> #添加此内容注释:修改网站目录下"web.xml"文件,在"<web-app>"标签下添加内容------------------------------------------------------------------------<distributable/>[root@Tomcat1 ~]# catalina.sh stop #重启Tomcat服务[root@Tomcat1 ~]# catalina.sh start |
3、在前端Apache服务器上安装浏览器软件
|
1
2
|
[root@apache ~]# yum -y install firefox注释:如果后端服务器直接可以跟本地通信,这一步可以省略,安装的时候不能经过代理来安装 |
4、安装网上商城系统
|
1
|
[root@apache ~]# firefox & #在前端服务器执行此命令会打开一个图形化浏览器窗口 |




5、然后点击完成安装,会提示让重启WEB服务,上图中还提示安装完成后删除install目录
|
1
2
3
4
|
[root@Tomcat1 ~]# mv /web/allen/shop/install /web/allen/shop/install.bak[root@Tomcat1 ~]# catalina.sh stop[root@Tomcat1 ~]# catalina.sh start注释:这里没有删除Install目录只是做了重命名,然后重启服务 |
6、将Tomcat1服务器的的WEB程序与修改过的"catalina.sh"脚本复制到Tomcat2服务器相对应的路径下
|
1
2
3
4
5
6
|
[root@Tomcat2 ~]# rm -rf /web/allen/* #删除Tomcat2服务器上网站目录的测试文件[root@Tomcat1 ~]# scp -rp /web/allen/shop 192.168.1.2:/web/allen/[root@Tomcat1 ~]# scp /usr/local/tomcat/bin/catalina.sh 192.168.1.2:/usr/local/tomcat/bin/------------------------------------------------------------------------[root@Tomcat2 ~]# catalina.sh stop #重启Tomcat2服务器上的Tomcat服务[root@Tomcat2 ~]# catalina.sh start |
7、使用本地浏览器访问 "www.allen.com" 域名验证网上商城系统

8、可以在商城系统注册一个帐号,并登录到系统,比如购买一些衣服等,查看购物车中是否保存已加入到购物车中的衣服;如果有说明"session"信息已经成功同步到各节点并能够追踪用户的状态信息
到此,Tomcat基于内存复制的session共享集群已完成,也可以成功实现一个网上商城系统的正常运行,这里就不做太多介绍了,当然如果博友们有兴趣可以登录到后台管理界面看看,注意:使用此商城系统时只能用于演示,不能用于商业,使用时请认识阅读授权协议...
Apache代理Tomcat实现session共享构建网上商城系统的更多相关文章
- 高级运维(五):构建memcached服务、LNMP+memcached、使用Tomcat设置Session、Tomcat实现session共享
一.构建memcached服务 目标: 本案例要求先快速搭建好一台memcached服务器,并对memcached进行简单的添.删.改.查操作: 1> 安装memcached软件,并启动服务d ...
- 配置tomcat的session共享
可通过下面方法限制一个用户访问一个服务器之后就只在该服务器上操作. 请求负载过程中会话信息不能丢失.那么在多个tomcat中session需要共享. 配置tomcat的session共享可以有三种解决 ...
- YiShop_做个网上商城系统多少钱
随着国内电商的兴起,不少企业和个人卖家都已经意识到电商的重要性,于是就开始搭建自己网上商城,但是还是有很多人对网上商城还不是很了解,今天就由YiShop小编跟大家讲解网上商城系统的一些知识一.网上商城 ...
- YiShop_网上商城系统多少钱
电子商务的发展,网上商城系统的开发也变得越来越热门.商城系统开发对于企业来说是非常有必要的,一个好的网上商城系统对于企业来说是非常重要.那么到底网上商城系统多少钱呢?下面YiShop带大家去了解. 网 ...
- 学习笔记:Vue+Node+Mongodb 构建简单商城系统(二)
前面几个月工作有点忙,导致构建简单商城系统的计划搁置近三个月.现在终于有时间重新回过头来继续本计划.本篇主要记录自己在阿里云服务器上搭建node运行环境的整个过程,以及对其中遇到的一些问题的思考. 一 ...
- apache+tomcat实现session共享
apache+tomcat上篇文章,实现了负载均衡,现在我们实现session共享 一.tomcat集群配置,session 同步配置: tomcat1配置 A.修改Engine节点信息: < ...
- (转)tomcat架构&session共享
(二期)16.tomcat的整体架构与session共享方案 [课程16]tomcat...共享.xmind47.6KB [课程16]tomcat...流程.xmind0.6MB [课程16]tomc ...
- memached实现tomcat的session共享
由于项目服务器用的阿里云的ECS,Memcached也采用的阿里云.多个tomcat集群的session都存储在一个云memcached中. 配置步骤如下: 一.tomcat增加memcached支持 ...
- 浅谈负载均衡之【tomcat分布式session共享】
1)整理集成所需jar kryo-1.0.3.jar kryo-serializers-0.8.jar memcached-2.4.2.jar memcached-session-manager-1. ...
随机推荐
- android混合开发,webview的java与js互操作
android原生应用,用webview加载应用中的网页,并且java代码与js代码可以互相操作. 这是混合开发的基石,最基本也最重要的东西,实验代码在这里. 概括说说—— java调js:调用web ...
- atomic vs. nonatomic
Declaring a property atomic makes compiler generate additional code that prevents concurrent access ...
- Python之基础知识
一.数据类型和变量 计算机顾名思义就是做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.网页等各种各样的数据,不同的数据,需要定 ...
- maven+swagger
maven+swagger 构建restful风格的应用服务确实很好用 maven来管理jar包 swagger提供接口文档和测试接口
- 安装和使用sass
在安装和使用sass之前,需要一些准备条件: 文件夹---存放.scss 或 .sass: 编辑器,我们推荐使用Sublime Text 2 或者 3: 你的电脑需要安装Ruby,因为sass是依赖于 ...
- python学习之for语句
1.range数字范围 for i in range(5): print (i) 结果显示: 0 1 2 3 4 2.列表显示 ']: print ("current num:", ...
- JavaScript的引擎机制
var x=1; var y=0; var z=0; function add(n){n=n+1;return n;} y=add(x); function add(n){n=n+3;return n ...
- Deep Learning Papers Reading Roadmap
Deep Learning Papers Reading Roadmap https://github.com/songrotek/Deep-Learning-Papers-Reading-Roadm ...
- aws在线技术峰会笔记-电商解决方案
Redshift PB级别的数据仓库
- php新手常用的函数(随时更新)
//数字保留两位小数 $n = sprintf("%1.2f", $n); //方法二 $n = number_format($n, 2, '.', ''); //UTF8转GBK ...