一、环境介绍

二、安装配置后端服务器

三、安装配置前端服务器

四、配置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共享集群已完成,也可以成功实现一个网上商城系统的正常运行,这里就不做太多介绍了,当然如果博友们有兴趣可以登录到后台管理界面看看,注意:使用此商城系统时只能用于演示,不能用于商业,使用时请认识阅读授权协议...

最新文章

  1. dbutils基本使用
  2. OpenCASCADE Curve Length Calculation
  3. Android Studio导入第三方jar包
  4. TSuperEnumerator、TSuperAvlIterator、ObjectFindFirst
  5. phpcms 完美实现 导航栏当前栏目高亮
  6. Codeforces Round #284 (Div. 1)
  7. BZOJ 1041 圆上的整点
  8. HDU --- 4006
  9. Cannot call sendRedirect() after the response has been committed
  10. d01
  11. 深度学习之seq2seq模型以及Attention机制
  12. Java关键字(一) 修饰符private、protected、public和default的作用域
  13. &quot;软件随想录&quot; 读书笔记
  14. “Axure”介绍
  15. AForge调用摄像头拍照时设置分辨率
  16. python 对任意文件(jpg,png,mp3,mp4)base64的编码解码
  17. for update 与where current of的问题
  18. CRM系统设计方案
  19. 【第六篇】SAP ABAP7.5x新语法之SQL注入
  20. postman系列之批量执行接口测试用例

热门文章

  1. 关于webservice大数据量传输时的压缩和解压缩
  2. 获取token,绑定微信号,自定义菜单,事件响应demo
  3. xcode 创建项目 勾选 git 出现警告
  4. cf 700 A As Fast As Possible
  5. python学习之字符串变量
  6. Web的Ajax应用开发模式(三)——Ajax的开发
  7. rmi远程调用
  8. 如何修改mysql用户名和密码
  9. const char* &amp;&amp; string &amp;&amp; String^ 类型转换
  10. 访问google.com