apache+tomcat配置

无意间看到tomcat 6集群的内容,就尝试配置了一下,还是遇到很多问题,特此记录。apache服务器和tomcat的连接方法其实有三种:JK、http_proxy和ajp_proxy。本文主要介绍最为常见的JK。

环境:PC2台:pc1(IP 192.168.88.118)安装了apache和tomcat

                     pc2(IP 192.168.88.168)安装了tomcat

         系统 win xp sp3

  1.安装tomcat、apache服务器及版本对应的JK

  这里需要注意的是JK版本必须与apache服务器版本号对应,可以直接从我参考附件下载。apache_home表示apache服务器安装目录.

 2.配置apache服务器

  2.1 httpd.conf文件

 apache_home目录下的conf/httpd.conf文件中添加

Xml代码
  1. LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so   
  2. JkWorkersFile conf/workers.properties   
  3. JkMount /* lbcontroller   

 具体的说明如下:

Xml代码
  1. LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so  

 表示载入JK模块。

Xml代码
  1. JkWorkersFile conf/workers.properties  

tomcat实例配置,具体参见2.2。

Xml代码
  1. JkMount /* lbcontroller   

  设置apache分发器,/*表示apache将所有文件都由分发器lbcontroller 进行分发,你可以自行设置*.jsp,*.do等 

  2.2 workers.properties文件

在apache_home下conf目录中新建workers.properties文件,输入以下内容

Xml代码 复制代码
  1. worker.list=lbcontroller  
  2.   
  3. #Tomcat1实例配置   
  4. worker.tomcat1.host=192.168.88.118   
  5. worker.tomcat1.port=8009  
  6. worker.tomcat1.type=ajp13  
  7. #分发权重 值越大负载越大   
  8. worker.tomcat1.lbfactor = 1   
  9.   
  10. #Tomcat2实例配置   
  11. worker.tomcat2.host=192.168.88.168   
  12. worker.tomcat2.port=9009  
  13. worker.tomcat2.type=ajp13  
  14. #分发权重 值越大负载越大   
  15. worker.tomcat2.lbfactor = 1  
  16.   
  17. #负载均衡分发控制器   
  18. worker.lbcontroller.type=lb   
  19. worker.lbcontroller.balance_workers=tomcat1,tomcat2   
  20. worker.lbcontroller.sticky_session=True  

 在这里

Xml代码
  1. worker.list=lbcontroller  

 内容即为httpd.conf文件中的分发器名称。需要注意的内容是,tomcat实例名称

Xml代码
  1. worker.tomcat1.host=....   
  2. ...   
  3. worker.tomcat2.host=....   
  4. ...  

 在这里就是tomcat1和tomcat2必须与之后tomcat中的server.xml中jvmRoute值一致。

3.tomcat集群配置

配置每个tomcat目录下的server.xml文件,具体修改内容如下

3.1 Engine配置

修改前

Xml代码
  1. <Engine name="Catalina" defaultHost="localhost">  

修改后

Xml代码
  1. <Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcat1" >  

 具体tomcat中jvmRoute的值根据在workers.properties的配置,注意IP地址、tomcat实例名称和jvmRoute值必须一一对应。

3.2 Connector配置

修改前

Xml代码
  1. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />  

修改后

Xml代码
  1. <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />  

 这里tomcat的port值必须与在workers.properties中的port值一致。

3.3 Cluster配置

修改前

Xml代码
  1. <!--  
  2. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" > 
  3. -->  

 修改后,去掉注释并添加一些内容如下

Xml代码
  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  channelSendOptions="8">      
  2.          
  3.        <Manager className="org.apache.catalina.ha.session.DeltaManager"     
  4.                 expireSessionsOnShutdown="false"     
  5.                 notifyListenersOnReplication="true"/>      
  6.   
  7.        <Channel className="org.apache.catalina.tribes.group.GroupChannel">      
  8.          <Membership className="org.apache.catalina.tribes.membership.McastService"     
  9.                      address="228.0.0.4"     
  10.                      port="45564"     
  11.                      frequency="500"     
  12.                      dropTime="3000"/>      
  13.          <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"     
  14.                     address="auto"  
  15.                    port="4001"     
  16.                    autoBind="100"     
  17.                    selectorTimeout="5000"     
  18.                    maxThreads="6"/>      
  19.          <!-- timeout="60000"-->      
  20.          <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">      
  21.            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />      
  22.          </Sender>      
  23.          <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>      
  24.          <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>      
  25.          <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>      
  26.        </Channel>      
  27.   
  28.        <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"     
  29.               filter=""/>      
  30.        <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>      
  31.   
  32.        <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>      
  33.        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>      
  34.      </Cluster>  

 上述配置跟tomcat官方建议的配置,去掉了

Xml代码
  1. <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
  2.                    tempDir="/tmp/war-temp/"  
  3.                    deployDir="/tmp/war-deploy/"  
  4.                    watchDir="/tmp/war-listen/"  
  5.                    watchEnabled="false"/>  

 如果不去掉这部分,则tomcat启动会报"FarmWarDeployer can only work as host cluster subelement!."

3.4 session复制配置

tomcat集群中的session管理,主要有两种方式:

1).粘性session

表示从同一窗口发来的请求都将有集群中的同一个tomcat进行处理。配置方式是在上面workers.properties文件中

Xml代码
  1. worker.lbcontroller.sticky_session=True   

粘性session的好处在不会在不同的tomcat上来回跳动处理请求,但是坏处是如果处理该session的tomcat崩溃,那么之后的请求将由其他tomcat处理,原有session失效而重新新建一个新的session,这样如果继续从session取值,会抛出nullpointer的访问异常。

2).session复制

session复制是指tomcat彼此之间通过组播方式将session发到各个tomcat实例上,如果其中一个访问出错,则另外tomcat仍然具有有效的session内容,从而能正常接管其session。坏处是当tomcat实例很多,或者用户在session中有大量操作时,组播发送的信息量十分惊人。session复制配置则是在发布的web应用程序中的web.xml中添加

Xml代码
  1. <distributable/>  

 此外,session复制所需的JDK必须是JDK 5.0及其以上版本。

4.测试

1) 先启动apache服务器httpd

2) 启动名为tomcat2的服务器

 在浏览器中输入访问地址http://localhost/test/index.html

 可以看到请求被转发到了tomcat2进行处理

3)启动tomcat 1 ,界面如下

 可以发现,tomcat1启动后搜索到了tomcat2实例,并进行了session复制。在tomcat2的控制台也可以找到如下输出

 4)关闭tomcat 2,后继续刷新url访问。tomcat1控制台中输出的session 依然与之前tomcat2中的一致,并且在session中保存的属性值仍然有效。

5.问题

上面的配置是在两台不同的配置上进行,tomcat负载和session复制都成功了。但是如果在同一台机子上配置,则session复制总是不能成功,搜索了很多解决方式都不正确。
6.参考

http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html

http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html#Cluster Basics 

系统架设

前台采用apache2.2作为web服务器

后台架设了3000,3001,3002,三个mongrol应用

 

 

问题表现

访问http://localhost,出现一直在访问服务器;

 

然后访问http://localhost:3000可以正常访问,估计问题出现apache上,查看错误日志error.log

 

apache后台出现的错误提示:

 

[warn] Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting

 

 

原因:

在httpd.conf中并没有设置线程数量,Apache默认开启了64个,看来是远远不够。于是上网一查,在httpd.conf加入以下内容:

<IfModule mpm_winnt_module>
ThreadsPerChild 512
MaxRequestsPerChild 0
</IfModule>

这样开启了512工作线程。这个值根据需要可能要慢慢调整

按照上面的修改进行httpd。conf文件的修改,然后重启服务器,可以正常访问,问题解决

-Xms1024m
-Xmx1024m
-Xmn512m
-XX:PermSize=512M
-XX:NewSize=512m
-XX:MaxNewSize=512m
-XX:MaxPermSize=512m
-XX:ParallelGCThreads=4
-XX:MaxTenuringThreshold=5
-XX:ParallelCMSThreads=3
-XX:+UseConcMarkSweepGC
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=80
一般这两个参数设置成一样的,能提高效率:  -Xms1024m -Xmx1024m 
-Xss128k :这个参数设置其实要小心,128是我们一直用的值,一直 也没出什么问题。
以上参数都调大后其它的参数也要随着调,要不然还是用默认值,这样一定就会内存溢出了。
-XX:PermSize=512M  
-XX:NewSize=512m 
-XX:MaxNewSize=512m 
-XX:MaxPermSize=512m 
但下面几个参数也不能调大,我们一般设置为最大JVM内存的一半。

杨航收集技术资料,分享给大家



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

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

相关文章

记自己在spring中使用redis遇到的两个坑

本人在spring中使用redis作为缓存时&#xff0c;遇到两个坑&#xff0c;现在记录如下&#xff0c;算是作为自己的备忘吧&#xff0c;文笔不好&#xff0c;望大家见谅&#xff1b; 一、配置文件 1 <!-- 加载Properties文件 -->2 <bean id"configurer" cl…

Azure实践之如何批量为资源组虚拟机创建alert

通过上一篇的简介&#xff0c;相信各位对于简单的创建alert&#xff0c;以及Azure monitor使用以及大概有个印象了。基础的使用总是非常简单的&#xff0c;这里再分享一个常用的alert使用方法实际工作中&#xff0c;不管是日常运维还是做项目&#xff0c;我们都需要知道VM的实际…

南信大滨江学院计算机基础,南京信息工程大学滨江学院计算机基础期末复习知识点...

《计算机基础》期末考试复习知识点第一章计算机基础知识1.第一台电子计算机的名称、诞生时间及运算性能&#xff1b;名称&#xff1a;电子数字积分计算机ENIAC(埃尼阿克)。诞生时间&#xff1a;1946年2月14日。运算性能&#xff1a;运算速度为每秒5000次加法。2.计算机发展四个…

nginx集群

今天看到"基于apache的tomcat负载均衡和集群配置 "这篇文章成为javaEye热点。 略看了一下&#xff0c;感觉太复杂&#xff0c;要配置的东西太多&#xff0c;因此在这里写出一种更简洁的方法。 要集群tomcat主要是解决SESSION共享的问题&#xff0c;因此我利用memc…

管道过滤模式 大数据_大数据管道配方

管道过滤模式 大数据介绍 (Introduction) If you are starting with Big Data it is common to feel overwhelmed by the large number of tools, frameworks and options to choose from. In this article, I will try to summarize the ingredients and the basic recipe to …

DevOps时代,企业数字化转型需要强大的工具链

伴随时代的飞速进步&#xff0c;中国的人口红利带来了互联网业务的快速发展&#xff0c;巨大的流量也带动了技术的不断革新&#xff0c;研发的模式也在不断变化。传统企业纷纷效仿互联网的做法&#xff0c;结合DevOps进行数字化的转型。通常提到DevOps&#xff0c;大家浮现在脑…

2018.09.21 atcoder An Invisible Hand(贪心)

传送门 简单贪心啊。 这题显然跟t并没有关系&#xff0c;取差量最大的几组买入卖出就行了。 于是我们统计一下有几组差量是最大的就行了。 代码&#xff1a; #include<bits/stdc.h> #define N 100005 using namespace std; inline int read(){int ans0;char chgetchar();…

嘉应学院专插本计算机专业考纲,2015年嘉应学院汉语言文学专插本写作大纲.pdf...

.2015 专插本基础写作辅导部分分为五个部分&#xff0c;共 42 道题目。 50 &#xfe6a;-60 &#xfe6a;﹙填空&#xff0c;选择&#xff0c;判断&#xff0c;名词解释&#xff0c;简答&#xff0c;鉴赏﹚&#xff0c; 40 &#xfe6a;﹙作文﹚。1、什么是文章写作。文章写作是…

绿色版本Tomcat

解压版Tomcat配置(本例Tomcat6)&#xff1a;一 配置Tomcat1 下载Tomcat Zip压缩包&#xff0c;解压。如果增加tomcat的用户名和密码&#xff0c;则修改/conf/tomcat-user.xml<?xml version1.0 encodingutf-8?><tomcat-users><role rolename"manager"…

[ BZOJ 2160 ] 拉拉队排练

\(\\\) \(Description\) 一个由小写字母构成的长为\(N\)的字符串&#xff0c;求前\(K\)长的奇数长度回文子串长度之积&#xff0c;对\(19930726\)取模后的答案。 \(N\in [1,10^6]\)&#xff0c;\(K\in [1,10^{12}]\)\(\\\) \(Solution\) \(Manacher\)处理出所有位置的回文半径&…

用户体验可视化指南pdf_R中增强可视化的初学者指南

用户体验可视化指南pdfLearning to build complete visualizations in R is like any other data science skill, it’s a journey. RStudio’s ggplot2 is a useful package for telling data’s story, so if you are newer to ggplot2 and would love to develop your visua…

nodeJS 开发微信公众号

准备测试公众号 mp.weixin.qq.com/debug/cgi-b… 关注&#xff0c;获取测试公众号 内网渗透工具 natapp.cn/login 按照教程下载客户端进行配置 后台服务接入公众号 有netapp 生成的映射外网IP > URL 搭建express开发环境 这个网上有教程&#xff0c;自行百度 接口配置和签名…

单招计算机应用基础知识考试,四川邮电职业技术学院单招计算机应用基础考试大纲...

2021年高职单招升学一对一咨询小艺老师:18290437291(微信)四川邮电职业技术学院单招计算机应用基础考试大纲一、考试性质本技能考试是中等职业学校(含普通中专、职业高中、技工学校和成人中专)信息技术类专业毕业生参加四川邮电职业技术学院2016年单独招生考试。二、考试依据1.…

linux挂载磁盘阵列

linux挂载磁盘阵列 在许多项目中&#xff0c;都会把数据存放于磁盘阵列&#xff0c;以确保数据安全或者实现负载均衡。在初始安装数据库系统和数据恢复时&#xff0c;都需要先挂载磁盘阵列到系统中。本文记录一次在linux系统中挂载磁盘的操作步骤&#xff0c;以及注意事项。 此…

dedecms ---m站功能基础详解

织梦2015年6月8日更新后&#xff0c;就添加了很多针对手机移动端的设计&#xff0c;最大的设计就是添加了生成二维码的织梦标签和织梦手机模板功能&#xff0c;织梦更新后&#xff0c;默认的 default模板中就包含手机模板&#xff0c;所以我们可以给织梦网站设计双模板&#xf…

一个小菜鸟给未来的菜鸟们的一丢丢建议

写这篇文章的主要原因是有个建筑行业的朋友觉得搞建筑身累心累&#xff0c;想转到我们这个it行业来加入我们的编程大军中&#xff0c;找我咨询了一哈。在我了解了他的逻辑和理科这方面只是一般般的基础上&#xff0c;我给他的建议是&#xff1a;学习前端&#xff0c;而不是后端…

sql横着连接起来sql_SQL联接的简要介绍(到目前为止)

sql横着连接起来sqlSQL Join是什么意思&#xff1f; (What does a SQL Join mean?) A SQL join describes the process of merging rows in two different tables or files together.SQL连接描述了将两个不同表或文件中的行合并在一起的过程。 Rows of data are combined bas…

霸县计算机学校,廊坊中专排名2021

一、招生专业类别专业名称r制招生人政培养日标备注预备技师数控加工(中心操做工)340格养掌握先进敛p加ot知识&#xff0c;是部创新精神和较a空际操作能力&#xff0c;4了ftc71h0iwro感娶显型人于-宇缺毕让生培养具备电气白动化oirm和o技能&#xff0c;丛事电气设督安装、调试、…

《Python》进程收尾线程初识

一、数据共享 from multiprocessing import Manager 把所有实现了数据共享的比较便捷的类都重新又封装了一遍&#xff0c;并且在原有的multiprocessing基础上增加了新的机制list、dict 机制&#xff1a;支持的数据类型非常有限 list、dict都不是数据安全的&#xff0c;需要自己…

北京修复宕机故障之旅

2012-12-18日 下午开会探讨北京项目出现的一些问题&#xff0c;当时记录的问题是由可能因为有一定数量的客户上来后&#xff0c;就造成了Web服务器宕机&#xff0c;而且没有任何时间上的规律性&#xff0c;让我准备出差到北京&#xff0c;限定三天时间&#xff0c;以及准备测试…