Apache+Tomcat集群负载均衡的两种session处理方式

session共享有两种方式:

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

2、请求精确集中定位,即当前用户的请求都集中定位到一台服务器中,这样单台服务器保存了用户的session登录信息,如果宕机,则等同于单点部署,会丢失;
  apache中针对上述两个方法提供了不同的配置项:
    (a) session replication:会话复制,即上述的方法一;
    (b)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/> 。

 

服务器down掉错误信息:

org.apache.catalina.tribes.group.interceptoers.TcpFailureDetector memberDisappeared

Verification complete. Member still alivce[org.apache.catalina.tribes.membership.MemberImpl[tcp://<172.16.3.107]

 

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

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

相关文章

SmartSVN:File has inconsistent newlines

用SmartSVN提交文件的时候&#xff0c;提示svn: File has inconsistent newlines 这是由于要提交的文件编码时混合了windows和unix符号导致的。 解决方案 SmartSVN设置做如下修改可以解决问题&#xff1a; Project–>Setting选择Working copy下的EOL-style将Default EOL-sty…

我要认真学Git了 - Config

有一天&#xff0c;当我像往常一样打开SourceTree提交代码&#xff0c;然后推送的时候&#xff0c;我突然意识到我只是根据肌肉记忆完成这个过程&#xff0c;我压根不知道这其中到底发生了什么。这是个很严重的问题&#xff0c;作为一个技术人员&#xff0c;居然只满足于使用工…

计算机科学与技术科研论文,计算机科学与技术学院2007年度科研论文一览表

1Qiang Sun,Xianwen Zeng, Raihan Ur Rasool, Zongwu Ke, Niansheng Chen. The Capacity of Wireless Ad Hoc Networks with Power Control. IWCLD 2007. (EI收录: 083511480101)2Hong jia ping. The Application of the AES in the Bootloader of AVR Microcontroller. In: DC…

r a/b 测试_R中的A / B测试

r a/b 测试什么是A / B测试&#xff1f; (What is A/B Testing?) A/B testing is a method used to test whether the response rate is different for two variants of the same feature. For instance, you may want to test whether a specific change to your website lik…

一台机器同时运行两个Tomcat

如果不加任何修改&#xff0c;在一台服务器上同时运行两个Tomcat服务显然会发生端口冲突。假设现在已经按照正常的方式安装配置好了第一个Tomcat,第二个如何设置呢&#xff1f;以下是使用Tomcat5.5解压版本所做的实验。 解决办法&#xff1a; 1.解压Tomcat到一个新的目录&#…

PHP获取IP地址的方法,防止伪造IP地址注入攻击

PHP获取IP地址的方法,防止伪造IP地址注入攻击 原文:PHP获取IP地址的方法,防止伪造IP地址注入攻击PHP获取IP地址的方法 /*** 获取客户端IP地址* <br />来源&#xff1a;ThinkPHP* <br />"X-FORWARDED-FOR" 是代理服务器通过 HTTP Headers 提供的客户端IP。…

工作10年厌倦写代码_厌倦了数据质量讨论?

工作10年厌倦写代码I have been in tons of meetings where data and results of any sort of analysis have been presented. And most meetings have one thing in common, data quality is being challenged and most of the meeting time is used for discussing potential…

Java基础回顾

内容&#xff1a; 1、Java中的数据类型 2、引用类型的使用 3、IO流及读写文件 4、对象的内存图 5、this的作用及本质 6、匿名对象 1、Java中的数据类型 Java中的数据类型有如下两种&#xff1a; 基本数据类型: 4类8种 byte(1) boolean(1) short(2) char(2) int(4) float(4) l…

oracle数据库 日志满了

1、 数据库不能启动SQL> startupORACLE 例程已经启动。Total System Global Area 289406976 bytesFixed Size 1248576 bytesVariable Size 83886784 bytesDatabase Buffers 197132288 bytesRedo Buffers 7139328 byt…

计算机应用基础学生自查报告,计算机应用基础(专科).docx

1.在资源管理器中&#xff0c;如果要选择连续多个文件或文件夹&#xff0c;需要单击第一个文件或文件夹&#xff0c;按下键盘()&#xff0c;再用鼠标单击最后一个文件或文件夹即可。(A)Shift(B)Tab(C)Alt(D)Ctrl分值&#xff1a;2完全正确?得分&#xff1a;2?2.下列数据能被E…

Random随机数

Random 随机数 1 产生随机数 1.1 Random的使用步骤 我们想产生1-100(包含1和100)的随机数该怎么办&#xff1f;我们不需要自己写算法&#xff0c;因为额Java已经为我们提供好了产生随机数的类---Random 作用&#xff1a;用于产生一个随机数 使用步骤(和Scanner类似)&#xff1a…

模拟一个简单计算器_阅读模拟器的简单介绍

模拟一个简单计算器Read simulators are widely being used within the research community to create synthetic and mock datasets for analysis. In this article, I will introduce some recently proposed, commonly used read simulators.阅读模拟器在研究社区中被广泛使…

计算机部分应用显示模糊,win10系统打开部分软件字体总显示模糊的解决方法-电脑自学网...

win10系统打开部分软件字体总显示模糊的解决方法。方法一&#xff1a;win10软件字体模糊1、首先&#xff0c;在Win10的桌面点击鼠标右键&#xff0c;选择“显示设置”。2、在“显示设置”的界面下方&#xff0c;点击“高级显示设置”。3、在“高级显示设置”的界面中&#xff0…

Tomcat调节

Tomcat默认可以使用的内存为128MB&#xff0c;在较大型的应用项目中&#xff0c;这点内存是不够的&#xff0c;需要调大,并且Tomcat本身不能直接在计算机上运行&#xff0c;需要依赖于硬件基础之上的操作系统和一个java虚拟机。 AD&#xff1a; 这里向大家描述一下如何使用Tom…

假如不工作了,你还有源源不断的收入吗?

拥有金山跟银矿&#xff0c;其实不值得羡慕。俗话说&#xff1a;授人以鱼不如授人以渔。与其选择万贯家财&#xff0c;倒不如选择一个会持续冒出钱的杯子。很多人害怕上班的收入不确定&#xff0c;上班族急于寻找双薪&#xff0c;下班之后还要辛勤工作&#xff0c;以为这样就可…

turtle 20秒画完小猪佩奇“社会人”

转载&#xff1a;https://blog.csdn.net/csdnsevenn/article/details/80650456 图片源自网络 作者 丁彦军 如需转载&#xff0c;请联系原作者授权。 今年社交平台上最火的带货女王是谁&#xff1f;范冰冰&#xff1f;杨幂&#xff1f;Angelababy&#xff1f;不&#xff0c;是猪…

最佳子集aic选择_AutoML的起源:最佳子集选择

最佳子集aic选择As there is a lot of buzz about AutoML, I decided to write about the original AutoML; step-wise regression and best subset selection. Then I decided to ignore step-wise regression because it is bad and should probably stop being taught. That…

Java虚拟机内存溢出

最近在看周志明的《深入理解Java虚拟机》&#xff0c;虽然刚刚开始看&#xff0c;但是觉得还是一本不错的书。对于和我一样对于JVM了解不深&#xff0c;有志进一步了解的人算是一本不错的书。注明&#xff1a;不是书托&#xff0c;同样是华章出的书&#xff0c;质量要比《深入剖…

spring boot构建

1.新建Maven工程 1.File-->new-->project-->maven project 2.webapp 3.工程名称 k3 2.Maven 三个常用命令 选 项目右击- >run-> Maven clean&#xff0c;一般新工程&#xff0c;新导入工程用这个命令清理clean Mvaen install&#xff0c; Maven test&#xff0c…

用户输入汉字时计算机首先将,用户输入汉字时,计算机首先将汉字的输入码转换为__________。...

用户的蓄的形能器常见式有。输入时计算机首先输入包括药物具有基的酚羟。汉字换物包腺皮括质激肾上素药。对既荷又有线有相间负负荷时&#xff0c;将汉倍作为等选取相负效三相负荷乘荷最大&#xff0c;将汉相负荷换荷应先将线间负算为&#xff0c;效三相负荷时在计算等&#xf…