Tomcat实现session保持的三种方式、使用msm方式搭建jsp网站

news/2024/5/8 18:34:51/文章来源:https://blog.csdn.net/weixin_33728708/article/details/89896946

Tomcat简单的来说类似于php的功能,主要实现java程序的编译,最后呈现给用户的是html格式的代码,使用用户可以在浏览器中访问。Tomcat是Java语言研发的,所以依赖于java的虚拟机(jvm)。

一、使用前端调度器实现实现session保持

实现的原理如下图,会话保持使用前端的调度器实现。例如:使用Ngnix调度时,使用ip_hash算法就可以实现。

1

配置步骤:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
操作系统: CentOS 6,5
目标主机:172.16.10.122  172.10.10.133
第一步:安装Java虚拟机 
### 获得jdk软件 jdk-6u31-linux-x64-rpm.bin 这里说明:对应的jdk版本有bin版本和rpm版本,
可以根据自己的需要下载。下载地址是:
### 安装步骤
chmod +x jdk-6u31-linux-x64-rpm.bin
./jdk-6u31-linux-x64-rpm.bin
## cat /etc/profile.d/java.sh 
export JAVA_HOME=/usr/java/latest
export PATH=/usr/java/latest/bin/:$PATH
### 
source /etc/profile.d/java.sh 
第二步:安装tomcat
### 获得tomcat软件 apache-tomcat-7.0.55.tar.gz 
### 安装步骤
tar xf ache-tomcat-7.0.55.tar.gz -C /usr/local
ln -sv apache-tomcat-7.0.55 tomcat
### cat /etc/profile.d/tomcat.sh 
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
###
第三步:添加测试站点,站点的目录数如下:
### tree /usr/local/tomcat/webapps/test/
/usr/local/tomcat/webapps/test/
|-- WEB-INF
|   |-- classes
|   `-- lib
`-- index.jsp
3 directories, 1 file
# 3个目录WEB-INF classes lib 1个文件 
# 文件内容:172.16.10.122
<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="red">TomcatA.example.com</h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("example.com","example.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
# 文件内容:172.16.10.133
<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="blue">TomcatB.example.com</h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("example.com","example.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
第四步:启动tomcat
catalina.sh start

结果示例:

2

3

4

以上测试成功后,配置以下的内容。

2、配置前端调度器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
操作系统: CentOS 6,5
目标主机:172.16.10.1
第一步:安装Ngnix
### 可以使用源码编译安装,也可使用rpm方式安装(需配置好epel源)这里使用 rpm方式安装。
yum install ngnix -y
第二步:配置Ngnix前端调度
### cat /etc/nginx/conf.d/default.conf 主要配置如下:
upstream www.tomcat.org {
    ip_hash;
    server 172.16.10.122:8080;
    server 172.16.10.133:8080;
}
server {
    listen       80;
    server_name  www.tomcat.org;
    location / {
        proxy_pass http://www.tomcat.org;
        index  index.jsp index.html index.htm;
    }
}

结果测试:

5

这是通过ip_hash调度方法实现的。思考如下问题:这样做还能减轻后端tomcat的压力吗??

解决办法:将session信息在每个Tomcat节点上保存一份,做成tomcat集群(session集群)。

二、使用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
42
43
44
45
46
47
48
49
50
51
52
53
54
### 在 /usr/local/tomcat/conf/server.xml 的<Host> </Host>内部以下内容添加:
目标主机:172.16.10.122 172.16.10.133
<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.10.10.14"
                port="45564"
                frequency="500"
                dropTime="3000"/>
    <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
              address="172.16.10.122/172.16.10.133"  
               # 注意此选项默认是auto,这里需要配置。每个节点配置自己的ip地址,
               # 意思是接收session心跳消息的地址
              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>
### 在相应应用程序的web.xml中添加<distributable\>; 也可以全局添加
目标主机:172.16.10.122 172.16.10.133
cp /usr/local/tomcat/webapps/test/WEB-INF/web.xml /usr/local/tomcat/webapps/test/WEB-INF/
# 编辑 /usr/local/tomcat/webapps/test/WEB-INF/web.xml 在 <web-app> 中添加:
<distributable/>;

2、配置前端调度器

这里主要是使用轮询调度,不使用ip_hash调度。只需将配置文件中的ip_hash去掉即可。

结果示例:

配置完成后,重启tomcat即可。

8

从结果中可以知道,实现了session保持。

6

7

思考如下问题? 这种方式的session保持是通过每个节点保存一份session信息,但是:但集群节点很多时,这些seesion信息可能是很大级别的。此时,各个节点之间的session复制反而成了影响系统性能的瓶颈。

解决办法: 使用session服务器,将seession信息统一保存到缓存服务器中。

二、使用session服务器(memcached)来保持session

试验拓扑图如下:

9

tomcat实现此功能要借助于msm(Memcached-Session-Management)模块可以实现。需要下载jar包, javolution、memcached-session-manager-tc7、spymemcached、memcached-session-manager、msm-javolution-serializer 。将这些jar包拷贝到/usr/local/tomcat/lib/目录下,支持msm功能。这些包可以再Google Code中找到。

下载时要注意:要与tomcat的版本相对应。

1、配置memcached

1
2
3
4
5
操作系统:CentOS 6.5
目标主机:172.16.10.1 172.16.10.9
yum install memcached -y
service memcached start

2、配置tomcat

1
2
3
4
5
6
7
8
9
10
11
12
目标主机:172.16.10.122 172.16.10.133
## 在试验一的基础上,继续配置
### 在 /usr/local/tomcat/conf/server.xml 的<Host> </Host>内部以下内容添加:
<Context path="/test" docBase="/usr/local/tomcat/webapps/test/" reloadable="true">
         <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                  memcachedNodes="n1:172.16.10.9:11211,n2:172.16.10.1:11211"
                  failoverNodes="n1"
                  requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
              transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
         />        
</Context>

3、配置Ngnix前端调度方法,同试验二一样。

结果示例:

10

11 

补充说明:

对于前端调度器也可使用apache和haproxy反向代理器。

四、Tomcat实例

tomcat + memcacahed + nginx + mysql + nfs 实现jsp格式的论坛。试验拓扑图如下:

13

1、配置数据节点 172.16.10.1

1
2
3
4
5
6
7
8
9
10
11
12
#### 配置 NFS 服务器
mkdir /tomcatdata
# 编辑 /etc/exports,添加:
/tomcatdata 172.16.0.0/16(rw)
service nfs start
### 配置 mysql
yum install mysql-server -y 
servive mysqld start
mysql> CREATE DATABASE jcenter1;
mysql> GRANT ALL ON jcenter1.* TO jcenter@'172.16.%.%' IDENTIFIED BY 'jcenter';
mysql> FLUSH PRIVILEGES;

2、配置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
目标主机: 172.16.10.122 172.16.10.133
第一步:搭建站点
mkdir /tomcat/webapps/
mount -t nfs 172.16.10.1:/tomcatdata /tomcat/webapps/
# 获取jsp程序 JavaCenter_Home_2.0_GBK.tar.bz2 java程序代码
tar -xf JavaCenter_Home_2.0_GBK.tar.bz2 -C /tomcat/webapps/
cd /tomcat/webapps/
ln -sv JavaCenter_Home_2.0_GBK jct
# 配置 JavaCenter:/tomcatdata/jct/config.properties
# 主要修改以下:
# 数据库服务器地址(一般为本地localhost或127.0.0.1)
dbHost = 172.16.10.1
# 数据库服务器端口号(一般为3306)
dbPort = 3306
# 数据库用户名
dbUser = jcenter
# 数据库密码
dbPw = jcenter
# 数据库名
dbName = jcenter1
第二步:配置tomcat
<Host name="www.tomcat.org"  appBase="/tomcat/webapps"
      unpackWARs="true" autoDeploy="true">
   <Context path="/jct" docBase="jct" />
       <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="n1:172.16.10.9:11211,n2:172.16.10.1:11211"
                failoverNodes="n2"
                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
       />            
    </Context>
</Host>
# 当然msm所依赖的jar包要拷贝到对应的目录下
重新启动tomcat.

结果示例:

14

15

16

18

至此,配置基本完成。










本文转自 羊木狼 51CTO博客,原文链接:http://blog.51cto.com/guoting/1568583,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_824313.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于vue-element-admin框架改造——支持第三方iframe网站

2019独角兽企业重金招聘Python工程师标准>>> 先来看个效果图 码云地址:https://gitee.com/smallweigit/vue-element-admin.git 例&#xff1a;http://localhost:9527/#/iframe/urlPath?srchttps://www.baidu.com (访问百度) 格式&#xff1a;http://localhost:9527…

什么是最好的网站学习如何使用Linux系统?

2019独角兽企业重金招聘Python工程师标准>>> 其实不是很难使用Linux&#xff0c;由于有关系统的大量技术信息加上现在网上的信息鱼龙混杂&#xff0c;各种信息让我们分不清是真是假&#xff0c;您可能会被愚弄&#xff0c;但毕竟真的不是那么困难。为了给你一个开始…

开源在线excel编辑器_推荐3款爽到爆的在线网站

今天给大家推荐的是三款比较厉害的在线网站&#xff0c;可以用一个顶10个形容它们&#xff0c;相对来说应该算是比较冷门的网站&#xff0c;至少小编之前还真不知道&#xff0c;但不要怀疑它们的实力&#xff0c;不信&#xff1f;一起来看看&#xff01;一、Fosshub网址&#x…

宝塔面板ab模板建站_干货分享丨零基础,最详细的wordpress建站流程

首先&#xff0c;我们要知道&#xff0c;一个网站的构成共有三要素&#xff0c;分别是&#xff1a;云服务器(主机)&#xff0c;域名&#xff0c;程序(源码)。准备工作购买云服务器(或主机)订购域名(推荐腾讯云&#xff0c;阿里云)网站“内核”准备(Emlog主题框架&#xff0c;主…

php mysql 雷风积分游戏建站系统_雷风影视系统(LFCMS) php版 v3.8.9

LFCMS是一款采用PHP基于THINKPHP3.2.3框架开发,适合各类视频、影视网站的影视内容管理程序。具有良好的用户体验&#xff0c;适合美工人员快速建立站点&#xff0c;您也可以根据您的需要进行应用扩展来达到更加强大功能。 您可以在遵循 协议 的情况下完全免费的使用我们的程序。…

大型网站架构之分布式消息队列

大型网站架构之分布式消息队列以下是消息队列以下的大纲&#xff0c;本文主要介绍消息队列概述&#xff0c;消息队列应用场景和消息中间件示例&#xff08;电商&#xff0c;日志系统&#xff09;。本次分享大纲消息队列概述消息队列应用场景消息中间件示例JMS消息服务&#xff…

阿里巴巴的页面不能被抓取吗_网站seo优化吸引蜘蛛来抓取的几种方式

目前常用的链接有锚文本链接、超链接、纯文本链接和图像链接。如何被爬行器爬行是一个自动提取网页的程序&#xff0c;如百度蜘蛛。要使您的网站包含更多的网页&#xff0c;您必须首先让爬虫程序对网页进行爬行。如果你的网站页面定期更新&#xff0c;爬虫会更频繁地访问页面&a…

h5网站模板_拥有这些设计网站,不用PS、AI,小白也能成为设计师

大家都知道 PS、AI 等是设计师的专业工具&#xff0c;但随着社会的快速发展&#xff0c;新媒体行业、微商、电商的从业者&#xff0c;学习并精通此类软件&#xff0c;没有这么多时间成本。这次&#xff0c;就给大家介绍一下&#xff0c;国内好用的几个设计网站。现在小编用得比…

中型企业网站选云主机还是服务器,新企业网站选择共享主机还是云主机?

原标题&#xff1a;新企业网站选择共享主机还是云主机&#xff1f;随着企业上网的需求越来越大&#xff0c;越来越多的企业主开始为自己的企业建立网站。然而&#xff0c;每个新网站要想在网络世界中崭露头角&#xff0c;首要条件是强大的主机方案。浏览并为网站选择虚拟主机平…

大型网站系统架构分析

千万级的注册用户&#xff0c;千万级的帖子&#xff0c;nTB级的附件&#xff0c;还有巨大的日访问量&#xff0c;大型网站采用什么系统架构保证性能和稳定性&#xff1f; 首先讨论一下大型网站需要注意和考虑的问题。 数据库海量数据处理&#xff1a;负载量不大的情况下selec…

一个很好的开源项目和开源资源网站:open51.com

最近一直在做开源PHP项目的调研&#xff0c;看到一个开源项目网站&#xff0c;包含Java&#xff0c;PHP&#xff0c;.NET, Android, Javascript等各种开源项目和工具&#xff0c;发出来和大家分享一下 地址&#xff1a;http://open51.com/ 以下是网站首页截图

精美LOGO设计欣赏的200佳网站推荐(系列十四)

这个系列将向大家分享Logo设计欣赏的200佳网站&#xff0c;设计师们可通过这些网站收集的优秀Logo设计作品来获取灵感&#xff0c;进而设计出更加时尚、更有创意的作品&#xff0c;设计师们也可以把自己得意的作品提交到这些网站&#xff0c;分享给其它的设计师朋友。 Logo Fur…

Html5_CSS_JS15个最佳教程网站和博客

互联网经过这么多年的发展&#xff0c;已经出现了众多的 Web 开发技术&#xff0c;像 .Net/Java/PHP/Python/Ruby 等等。对于 Web 开发人员来说&#xff0c;不管是初学者还是有一定经验的开发人员都需要时刻学习新的开发技术。如今&#xff0c;网上有各种开发技术的相关网站&am…

韩国三家主要媒体网站被植入木马

3月10日&#xff0c;“瑞星云安全”系统监测到&#xff0c;韩国三大媒体网站朝鲜日报网站&#xff08;chosun.com&#xff09;、中央日报网站&#xff08;joins.com&#xff09;和文化日报网站&#xff08;munhua.com&#xff09;被黑客攻陷&#xff0c;网站服务器被植入木马&a…

网站架构演化路线,从小到大怎么成长的

首先我们要明确一个基本的认知&#xff0c;网站的大小并不是根本&#xff0c;我们的根本着眼点在于网站服务于业务的开展。随着业务规模的调整&#xff0c;同时进行网站规模&#xff0c;从而促进业务发展。大型网站的特点有高并发&#xff0c;大流量&#xff0c;高可用&#xf…

记一次真实的网站被黑经历

前言 距离上次被DDOS已经有10天左右的时间&#xff0c;距离上上次已经记不起具体那一天了&#xff0c;每一次都这么不了了只。然而近期一次相对持久的&#xff0c;我觉得有必要静下心来&#xff0c;分享一下被黑的那段经历。 在叙述经历之前&#xff0c;先简单的介绍一下服务器…

在HTTPS网站安装百度分享按钮代码及其SEO外链作用

百度分享按钮&#xff0c;可以帮用户实现一键将网站内容分享到第三方网站&#xff0c;但它的功能与作用远远不止便于分享。 今天&#xff0c;小小课堂网为大家带来的是百度分享按钮代码安装及对网站SEO优化外链的效果。希望对大家有所帮助。一、百度分享代码的安装 1、登录百度…

精美案例展示:立体动感的视差滚动效果网站作品

视差滚动&#xff08;Parallax Scrolling&#xff09;是新兴的网页设计技术&#xff0c;通过让多层背景以不同的速度移动来形成立体的运动视差效果&#xff0c;虽然纯属视觉效果&#xff0c;但在内容滚动时形成的视觉体验非常出色&#xff01;今天这篇文章就与大家分享35个运用…

国外网站设计:20佳应用大照片做背景的优秀案例

定义网站基调和风格的一种简单方式就是使用大图片背景&#xff08;Big Background Image&#xff09;&#xff0c;在使用这种大图片的时候&#xff0c;为了让大背景图片能够和网站的其它内容很好的融合在一起&#xff0c;你需要考虑很多事情&#xff0c;否则可能会导致网站内容…

fikker反向代理服务器的网站缓存加速特别说明

2019独角兽企业重金招聘Python工程师标准>>> 1、特别说明&#xff1a; Fikker 只缓存以 GET 方法请求并且源站返回状态为 200 OK的页面。以其它方法请求或源站返回状态非 200 OK 的页面都不会被缓存。 2、配置说明&#xff1a; 缓存地址URL&#xff1a;输入要缓存…