博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache+Tomcat负载均衡两种session共享方式的设置
阅读量:6786 次
发布时间:2019-06-26

本文共 3237 字,大约阅读时间需要 10 分钟。

  hot3.png

session共享有两种方式:

1、session共享,多个服务器session拷贝保存,一台宕机不会影响用户的登录状态;

2、请求精确集中定位,即当前用户的请求都集中定位到一台服务器中,这样单台服务器保存了用户的session登录信息,如果宕机,则等同于单点部署,会丢失;

apache中针对上述两个方法提供了不同的配置项:

  session replication:会话复制,即上述的方法一;

  session sticky:会话不复制,即上述的方法二;

-------------------------------

 

选取Apache HTTP Server作为前端的负载服务器,后端选取两个Tomcat作集群。

一、采用粘性Session

这种方式将同一用户的请求转发到特定的Tomcat服务器上,避免了集群中Session的复制,缺点是用户只跟一种的一台服务器通信,如果此服务器down掉,那就废了。

采用的model为mod_proxy_ajp.so,整个配置在tomcat的配置文件中都有相关的注释,只需作相应修改就OK。
我们选取的是Apache HTTP Server2.2.4,Tomcat5.5.16。
首先安装Apache HTTP Server,然后修改其配置文件http.conf,首先load三个model,代码如下:

LoadModule proxy_module modules
/
mod_proxy.so
LoadModule proxy_ajp_module modules
/
mod_proxy_ajp.so
LoadModule proxy_balancer_module modules
/
mod_proxy_balancer.so
然后在此配置文件末端加入以下代码:
ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests
stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3  
ProxyPassReverse / balancer://tomcatcluster/   
  
<Proxy balancer://tomcatcluster>  
BalancerMember ajp://localhost:8009 route=a  
BalancerMember ajp://localhost:9009 route=b
</Proxy>
以上代码配置了Proxy的相关参数,<Proxy>模块定义了均衡负载的配置,其中两个Tomcat Server都配置在同一台服务器上,端口分别为8009、9009,并配置各自的route,这样Apache Server就能根据route将请求转发给特定的Tomcat。
接下来修改Tomcat的server.xml文件,如下:
<!--
Define an AJP 1.3 Connector on port 8009
-->
    
<
Connector
port
="8009"
                enableLookups
="false"
redirectPort
="8443"
protocol
="AJP/1.3"
/>
其中的port为前面<Proxy>中设定的端口,还要配置其route,代码如下:
<!--
Define the top level container in our container hierarchy
-->
    
<
Engine
name
="Catalina"
defaultHost
="localhost"
jvmRoute
="a"
>
jvmRoute也须同前面的设置一样。
下面用JMeter对配置后的负载均衡做一测试,首先先启动两个Tomcat Server,随后启动Apache Server,在JMeter中新建测试计划,在两个Tomcat Server中的jsp-examples下新建test.jsp(此jsp自己随便写两句就成),然后进行测试,以下是部分取样器结果:
HTTP response headers:
HTTP/1.1 200 OK
Date: Wed, 11 Jul 2007 02:17:55 GMT
Set-Cookie:
JSESSIONID=AC7EF1CAA8C6B0FEB68E77D7D375E2AF.b; Path=/jsp-examples
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 3
Keep-Alive: timeout=5, max=79
Connection: Keep-Alive

以上红色代码表示用户的http请求中的JSESSIONID中已经附带了route后缀,.b表示此请求将转发到route为b的Tomcat Server上,你将会发现其中的一部分请求的JSESSIONID后缀为.a,也就是转发给route为a的Tomcat Server上。

 

二、采用Session复制

修改apache http server配置文件http.conf,首先load三个model,代码如下:

LoadModule proxy_module modules
/
mod_proxy.so
LoadModule proxy_ajp_module modules
/
mod_proxy_ajp.so
LoadModule proxy_balancer_module modules
/
mod_proxy_balancer.so

然后在此配置文件末端加入以下代码:

ProxyPass / balancer://tomcatcluster/

ProxyPassReverse / balancer://tomcatcluster/   

  
<Proxy balancer://tomcatcluster>  
BalancerMember ajp://localhost:8009 route=a  
BalancerMember ajp://localhost:9009 route=b
</Proxy>

接下来修改Tomcat的server.xml文件,如下:
<!--
Define an AJP 1.3 Connector on port 8009
-->
    
<
Connector
port
="8009"
                enableLookups
="false"
redirectPort
="8443"
protocol
="AJP/1.3"
/>
其中的port为前面<Proxy>中设定的端口,还要配置其route,代码如下:
<!--
Define the top level container in our container hierarchy
-->
    
<
Engine
name
="Catalina"
defaultHost
="localhost"
jvmRoute
="a"
>

jvmRoute也须同前面的设置一样。

另外,还需要在tomcat中将以下配置打开:

 

 最后,要在我们的应用程序里的web-inf下的web.xml文件<web-app>元素的最后加上: <distributable/> 。

转载于:https://my.oschina.net/hunzi/blog/30235

你可能感兴趣的文章
PHP安装
查看>>
mysql用户管理-常用sql-数据库备份恢复
查看>>
springcloud应用程序上下文层次结构
查看>>
UI2Code智能生成Flutter代码--整体设计篇
查看>>
<java8>Java8 Optional 的使用
查看>>
教你怎样使用Spring Boot开发邮件系统?
查看>>
JAVA springboot微服务b2b2c电子商务系统 (五)springboot整合 beatlsql
查看>>
沙龙报名 | 探索新零售时代的数字化创新
查看>>
spring security中当前用户信息
查看>>
[Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
查看>>
html-meta http-equiv设置网页指定时间跳转
查看>>
python 入门
查看>>
如何防止http请求数据被篡改
查看>>
MyEclipse 2013集成JRebel
查看>>
indexOf()
查看>>
go语言学习
查看>>
tidb 安装
查看>>
phpcms V9.6.0版本整合百度ueditor1.4.3.2,包括水图片上传水印
查看>>
Tiptop GP中Excel的控制方法
查看>>
JavaWeb分页技术总结
查看>>