一、环境介绍

二、安装配置后端服务器

三、安装配置前端服务器

四、配置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.sh
export JAVA_HOME=/usr/java/latest
export 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.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:/$PATH
# catalina.sh version     #查看Tomcat是否安装成功
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.42
Server built:   Jul 2 2013 08:57:41
Server number:  7.0.42.0
OS Name:        Linux
OS Version:     2.6.32-358.el6.x86_64
Architecture:   amd64
JVM Version:    1.7.0_40-b43
JVM Vendor:     Oracle Corporation
----------------------------------------------------------------------
# catalina.sh start    #启动Tomcat进程
# jps                  #查看启动的JVM虚拟机与Tomcat
2925 Bootstrap
2943 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 ~]# mysql
mysql> 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 80
LISTEN     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.conf
ProxyVia On
ProxyRequests Off
ProxyPreserveHost Off
<Proxy balancer://allen>
BalancerMember  http://192.168.1.1:8080 loadfactor=1
BalancerMember  http://192.168.1.2:8080 loadfactor=1
ProxySet  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\hosts
172.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 &quot;%r&quot; %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 &quot;%r&quot; %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.log
INFO: 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 &    #在前端服务器执行此命令会打开一个图形化浏览器窗口
勾选同意使用协议,点击下一步
 
点击下一步,会有一个警告提示信息,可以点OK继续安装;然后填写数据库信息
点立即安装,会自动创建数据库安装并初始化数据
 

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共享构建网上商城系统的更多相关文章

  1. 高级运维(五):构建memcached服务、LNMP+memcached、使用Tomcat设置Session、Tomcat实现session共享

    一.构建memcached服务 目标: 本案例要求先快速搭建好一台memcached服务器,并对memcached进行简单的添.删.改.查操作: 1> 安装memcached软件,并启动服务d ...

  2. 配置tomcat的session共享

    可通过下面方法限制一个用户访问一个服务器之后就只在该服务器上操作. 请求负载过程中会话信息不能丢失.那么在多个tomcat中session需要共享. 配置tomcat的session共享可以有三种解决 ...

  3. YiShop_做个网上商城系统多少钱

    随着国内电商的兴起,不少企业和个人卖家都已经意识到电商的重要性,于是就开始搭建自己网上商城,但是还是有很多人对网上商城还不是很了解,今天就由YiShop小编跟大家讲解网上商城系统的一些知识一.网上商城 ...

  4. YiShop_网上商城系统多少钱

    电子商务的发展,网上商城系统的开发也变得越来越热门.商城系统开发对于企业来说是非常有必要的,一个好的网上商城系统对于企业来说是非常重要.那么到底网上商城系统多少钱呢?下面YiShop带大家去了解. 网 ...

  5. 学习笔记:Vue+Node+Mongodb 构建简单商城系统(二)

    前面几个月工作有点忙,导致构建简单商城系统的计划搁置近三个月.现在终于有时间重新回过头来继续本计划.本篇主要记录自己在阿里云服务器上搭建node运行环境的整个过程,以及对其中遇到的一些问题的思考. 一 ...

  6. apache+tomcat实现session共享

    apache+tomcat上篇文章,实现了负载均衡,现在我们实现session共享 一.tomcat集群配置,session 同步配置: tomcat1配置  A.修改Engine节点信息: < ...

  7. (转)tomcat架构&session共享

    (二期)16.tomcat的整体架构与session共享方案 [课程16]tomcat...共享.xmind47.6KB [课程16]tomcat...流程.xmind0.6MB [课程16]tomc ...

  8. memached实现tomcat的session共享

    由于项目服务器用的阿里云的ECS,Memcached也采用的阿里云.多个tomcat集群的session都存储在一个云memcached中. 配置步骤如下: 一.tomcat增加memcached支持 ...

  9. 浅谈负载均衡之【tomcat分布式session共享】

    1)整理集成所需jar kryo-1.0.3.jar kryo-serializers-0.8.jar memcached-2.4.2.jar memcached-session-manager-1. ...

随机推荐

  1. C#的path.GetFullPath 获取上级目录实现方法

    这篇文章主要介绍了C#的path.GetFullPath 获取上级目录实现方法,包含了具体的C#实现方法以及ASP.net与ASP等的方法对比,非常具有实用价值,需要的朋友可以参考下   本文实例讲述 ...

  2. python中的正则表达式(re模块)

    一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎 ...

  3. [Golang] 一个简易代理池

    晚上写了一个代理池,就是在一个代理网站上爬取代理ip和端口以及测试是否可用.接下来可能考虑扩展成一个比较大的 golang实现的代理池. 简易版代码: package main import ( &q ...

  4. Learning Roadmap of Deep Reinforcement Learning

    1. 知乎上关于DQN入门的系列文章 1.1 DQN 从入门到放弃 DQN 从入门到放弃1 DQN与增强学习 DQN 从入门到放弃2 增强学习与MDP DQN 从入门到放弃3 价值函数与Bellman ...

  5. python成长之路【第二篇】:列表和元组

    1.数据结构数据结构是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在Python中,最基本的数据结构是序列(sequence) ...

  6. Delphi 使用之dll文件生成与调用

    DLL是Dynamic-Link Libraries(动态链接库)的缩写,库里面是一些可执行的模块以及资源(如位图.图标等).可以认为DLL和EXE基本上是一回事,只是DLL不能直接执行,而必须由应用 ...

  7. STM32学习笔记(九) 外部中断,待机模式和事件唤醒

    学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...

  8. PHP保留两位小数的几种方法

    $num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2); //10.46 //第二种:利用sprintf格式化字符串 $format_ ...

  9. 能源项目xml文件 -- springMVC-servlet.xml -- default-lazy-init

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  10. NGINX 定时器

    写在前面 写NGINX系列的随笔,一来总结学到的东西,二来记录下疑惑的地方,在接下来的学习过程中去解决疑惑. 也希望同样对NGINX感兴趣的朋友能够解答我的疑惑,或者共同探讨研究. 整个NGINX系列 ...