- 浏览: 469270 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mrshen:
很棒,在其他大神的博客上理清了思路看懂之后,来lz这里用例子学 ...
RED-BLACK(红黑)树的实现TreeMap源码阅读 -
a939639017:
yanf4j check不下来 ?
Java nio 2.0 AIO -
hellostory:
又是抄来的 - -
mysql分表方案 -
davidluoye:
为什么不说下支持的数据库呢?
模糊查询的优化 -
oliveevilo:
表示没看懂
Synchronized和java.util.concurrent.locks.Lock的区别
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中将以下配置打开:
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true">
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="auto"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
<Sender
className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
replicationMode="pooled"
ackTimeout="15000"
waitForAck="true"/>
<Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
</Cluster>
最后,要在我们的应用程序里的web-inf下的web.xml文件<web-app>元素的最后加上: <distributable/> 。
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中将以下配置打开:
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true">
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="auto"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
<Sender
className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
replicationMode="pooled"
ackTimeout="15000"
waitForAck="true"/>
<Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
</Cluster>
最后,要在我们的应用程序里的web-inf下的web.xml文件<web-app>元素的最后加上: <distributable/> 。
发表评论
-
nginx折腾记(HTTP性能能测试,与Apache对比)
2011-11-11 15:20 949http://www.cnblogs.com/killkill ... -
apache性能测试工具ab
2011-11-11 15:20 620Apache自带的测试工具ab(apache benchmar ... -
19个心得 明明白白说Linux下的负载均衡
2011-11-11 15:21 14782010-08-06 10:00 抚琴煮酒 ... -
服务器集群负载均衡(F5,LVS,DNS,CDN)
2011-11-01 16:38 2019F5全称: F5-BIG-IP-GTM 全球流量管理器. ... -
nginx和squid配合搭建的web服务器前端系统
2011-11-01 16:41 1066这个架构是目前我个人觉得比较稳妥并且最方便的架构,易于多 ... -
当前比较适用的海量小文件系统架构方案
2011-11-01 16:42 3499现在的网站越做越大了,存储的东西越来越多,如何解决这些文件存储 ... -
当前比较适用的海量小文件系统架构方案
2011-11-01 16:43 1341现在的网站越做越大了,存储的东西越来越多,如何解决这些文件存储 ... -
新型的大型bbs架构
2011-11-01 16:41 920squid+nginx 这个架构基于s ... -
图片服务器的hash架构
2011-10-31 22:42 1691如图,这是一个最简洁 ... -
csdn.net的系统架构研究
2011-10-31 22:40 1172csdn作为国内最大的程序 ... -
rsync的几种优化应用方案[
2011-10-31 22:34 1808rsync的几种优化应用方 ... -
分布式数据库拆表拆库的常用策略
2011-10-31 22:33 1082在大容量,高负荷的web ... -
服务器系统架构分析日志
2011-10-31 22:32 1054linux服务器每秒并发处理数的计算方法[2010-04-13 ... -
江枫谈淘宝“双十一”事件中的数据库架构优化
2011-10-12 10:24 1665概要 本采访是淘宝双 ... -
使用 libevent 和 libev 提高网络应用性能
2011-10-08 17:50 1341构建现代的服务器应用 ... -
CDN 网络内容分发
2011-10-08 17:46 1253CDN的全称是Content Delivery Network ... -
TripAdvisor架构
2011-09-03 12:04 1739TripAdvisor架构 - 每月4千 ... -
架构体会
2011-05-31 21:09 9811.我们的程序员或者我们的民族缺乏想象力,因为早在孩子时代有着 ...
相关推荐
Apache+Tomcat负载均衡与集群配置是提升Web应用性能和高可用性的重要手段。这篇文章将详细介绍如何使用Apache作为前端负载均衡器,与多台Tomcat服务器配合构建集群环境。 首先,我们要理解负载均衡的基本概念,它是...
首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把自己成功的方法拿出来与大家分享。 ...
在当今的企业级应用中,确保系统的高可用性和稳定性是至关重要的。这通常通过建立集群来实现,即通过部署多台服务器来提供相同的服务,以此来...这样,就完成了整个Mod_Proxy+Apache+Tomcat负载均衡与集群的配置过程。
Apache的负载均衡模块主要有两种常用的方式:mod_proxy和mod_jk。mod_proxy是Apache内建的反向代理模块,可以直接处理HTTP、HTTPS等协议,支持轮询、最少连接、IP哈希等多种负载均衡策略。mod_jk是专门为Tomcat设计...
Tomcat可以通过两种方式实现session复制:基于TCP的复制和基于JVM-RMI的复制。前者是通过网络发送session更新,而后者则是利用Java的远程方法调用机制。在`server.xml`配置文件中,需要启用`<Manager>`元素的`...
Apache的Tomcat负载均衡与集群配置是Web服务器和应用服务器扩展性能的重要手段,它通过将请求分散到多个服务器上,可以提高系统的响应速度和可用性。在这个过程中,mod_jk模块扮演了关键角色,它是Apache HTTP服务器...
Apache作为前端服务器,可以通过负载均衡技术将用户请求分发到多个后端的Tomcat实例上,实现请求的分担,同时通过session同步,保证用户会话的连续性。以下是对"Apache+mod_jk+Tomcat集群环境配置"的详细解析。 **1...
总结起来,Apache+Tomcat集群通过负载均衡实现了高并发处理能力,通过会话共享保证了用户体验的一致性。配置过程包括Apache的mod_jk模块设置、workers.properties文件的编辑以及Tomcat端口的调整。这样的架构提供了...
### Nginx+Tomcat+Redis搭建高性能负载均衡集群及Session共享 #### 一、概述 在现代Web应用中,为了提高网站的响应速度、稳定性以及处理能力,常常需要搭建一个能够支持高并发请求的服务器集群。其中,Nginx作为一...
传统的cookie存储方式在跨域或负载均衡时无法满足需求,因此我们需要一种分布式Session解决方案,这就是Redis的角色。 Redis是一个高性能的键值数据库,它可以作为Session存储服务器,存储用户的Session数据。为了...
在基于Apache的Tomcat环境中,可以使用以下两种方式进行负载均衡: 1. **Apache HTTP Server + mod_proxy模块**:Apache HTTP Server(简称Apache)可以通过加载mod_proxy模块作为反向代理服务器,将客户端的请求...
Nginx可以通过以下几种方式实现负载均衡: 1. **轮询(Round Robin)**:每个请求按顺序分配到不同的后端服务器,如果所有服务器都忙,则等待,直到有服务器空闲。 2. **权重轮询(Weighted Round Robin)**:可以...
在构建高性能、高可用性的Web服务时,Apache2负载均衡与Tomcat6集群是一个常见的解决方案。这个组合可以有效地分发用户请求,提高系统的响应速度,同时确保服务的稳定性。下面我们将详细探讨这两个技术及其配置。 *...
Apache和Tomcat是两种在Web服务器领域广泛应用的软件。Apache主要作为HTTP服务器,提供静态内容服务,而Tomcat是一款开源的Java Servlet容器,主要用于运行Java Web应用。将Apache与Tomcat结合使用,可以构建高性能...
Apache 和 Tomcat 的组合是常见的Web服务架构,Apache 作为前端负载均衡器,负责分发请求到后端的多个 Tomcat 实例,从而实现负载均衡和故障转移。 **Apache 作为负载均衡器** Apache HTTP Server(简称 Apache)...
Apache HTTP Server和Tomcat是两种广泛应用的软件,前者是强大的HTTP服务器,后者是Java Servlet容器。将它们结合在一起搭建集群,可以实现负载均衡和故障转移,提升Web应用的稳定性和响应速度。以下是一份详细的...
为了解决这个问题,有以下几种Tomcat Session共享策略: 1. **负载均衡服务器提供的Session共享**:某些硬件负载均衡器提供此功能,但Nginx不支持。 2. **Web容器自身的Session共享策略**:Tomcat可以配置集群模式...