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

比眉伴天荒 2021-09-23 03:00 388阅读 0赞

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


|   --&nbsp;lib</code> </div> <div style="white-space:nowrap; padding:0px 1em!important; margin:0px!important; border:0px!important; bottom:auto!important; float:none!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-size:1em!important; min-height:auto!important"> <code style="padding:0px!important; margin:0px!important; background:none!important; border:0px!important; bottom:auto!important; float:none!important; left:auto!important; line-height:1.1em!important; outline:0px!important; overflow:visible!important; position:static!important; right:auto!important; top:auto!important; vertical-align:baseline!important; width:auto!important; font-family:Consolas,&quot;Bitstream Vera Sans Mono&quot;,&quot;Courier New&quot;,Courier,monospace!important; font-size:1em!important; min-height:auto!important">— 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

至此,配置基本完成。

本文出自 “逆水寒” 博客,请务必保留此出处http://guoting.blog.51cto.com/8886857/1568583

发表评论

表情:
评论列表 (有 0 条评论,388人围观)

还没有评论,来说两句吧...

相关阅读