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的实际…

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

管道过滤模式 大数据介绍 (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;大家浮现在脑…

用户体验可视化指南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…

linux挂载磁盘阵列

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

《Python》进程收尾线程初识

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

北京修复宕机故障之旅

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

一般线性模型和混合线性模型_从零开始的线性混合模型

一般线性模型和混合线性模型生命科学的数学统计和机器学习 (Mathematical Statistics and Machine Learning for Life Sciences) This is the eighteenth article from the column Mathematical Statistics and Machine Learning for Life Sciences where I try to explain som…

《企业私有云建设指南》-导读

内容简介第1章总结性地介绍了云计算的参考架构、典型解决方案架构和涉及的关键技术。 第2章从需求分析入手&#xff0c;详细讲解了私有云的技术选型、资源管理、监控和运维。 第3章从计算、网络、存储资源池等方面讲解了私有云的规划和建设&#xff0c;以及私有云建设的总体原则…

太原冶金技师学院计算机系,山西冶金技师学院专业都有什么

山西冶金技师学院专业大全大家在考试之后对除了选择学校之外&#xff0c;还更关注专业的选择&#xff0c;山西冶金技师学院有哪些专业成了大家最为关心的问题。有些同学一般是选择好专业再选择自己满意的学校&#xff0c;下面小编将为你介绍山西冶金技师学院开设的专业及其哪些…

海南首例供港造血干细胞志愿者启程赴广东捐献

海南首例供港造血干细胞志愿者启程赴广东捐献。 张瑶 摄 海南首例供港造血干细胞志愿者启程赴广东捐献。 张瑶 摄 中新网海口1月23日电 (张茜翼 张瑶)海南省首例供港造血干细胞捐献者晶晶(化名)23日启程赴广东进行捐献&#xff0c;将于28号正式捐献采集造血干细胞&#xff0c;为…

如何击败Python的问题

Following the previous article written about solving Python dependencies, we will take a look at the quality of software. This article will cover “inspections” of software stacks and will link a free dataset available on Kaggle. Even though the title say…

KindEditor解决上传视频不能在手机端显示的问题

KindEditor自带的上传视频生成的HTML代码为<embed>&#xff0c;在手机端并不支持。于是可以自己在控件里增加生成video标签相关代码。 参考https://www.jianshu.com/p/047198ffed92。。 然而对着修改后没有成功&#xff0c;可能是那里没有改对吧。依然生成的是<embed&…

《独家记忆》见面会高甜宠粉 张超现场解锁隐藏技能

1月23日&#xff0c;由爱奇艺出品&#xff0c;小糖人联合出品的沉浸式成长练爱剧《独家记忆》在京举行粉丝见面会。爱奇艺高级副总裁陈宏嘉&#xff0c;爱奇艺副总裁、自制剧开发中心总经理、《独家记忆》总制片人戴莹&#xff0c;小糖人董事长、《独家记忆》总制片人朱振华&am…

计算机软件技术基础fifo算法,软件技术基础真题

一、填空1、数据结构按逻辑结构可分为两大类&#xff0c;它们分别是线性和非线性2.1、在长为n的顺序存储的线性表中插入和删除元素时所需移动元素的平均次数(等概率情况下)为&#xff1a;Einn/2&#xff0c;Ede(n-1)/22.2、顺序表有5个元素&#xff0c;设在任何位置上插入元素是…

NOI 2016 优秀的拆分 (后缀数组+差分)

题目大意&#xff1a;给你一个字符串&#xff0c;求所有子串的所有优秀拆分总和&#xff0c;优秀的拆分被定义为一个字符串可以被拆分成4个子串&#xff0c;形如$AABB$&#xff0c;其中$AA$相同&#xff0c;$BB$相同&#xff0c;$AB$也可以相同 作为一道国赛题&#xff0c;95分…

多元线性回归 python_Python中的多元线性回归

多元线性回归 pythonVideo Link影片连结 This episode expands on Implementing Simple Linear Regression In Python. We extend our simple linear regression model to include more variables.本集扩展了在Python中实现简单线性回归的方法 。 我们扩展了简单的线性回归模型…

关于apache和tomcat集群,线程是否占用实验

测试目的&#xff1a; 测试在apache入口的时候进入&#xff0c;当Tomcat的一个请求陷入死循环&#xff0c;或者线程进入循环无反应的时候&#xff0c;是否此时占用apache的线程资源。 测试原因&#xff1a; 如果要是影响&#xff0c;无论tomcat线程设置成多大&#xff0c;都…