网站信息员队伍建设方案,php网站开发试题,管理信息系统开发,优秀的个人网页无意间看到tomcat 6集群的内容#xff0c;就尝试配置了一下#xff0c;还是遇到很多问题#xff0c;特此记录。apache服务器和tomcat的连接方法其实有三种:JK、http_proxy和ajp_proxy。本文主要介绍最为常见的JK。
环境#xff1a;PC2台#xff1a;pc1(IP 192.168.88.118…无意间看到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代码 LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so JkWorkersFile conf/workers.properties JkMount /* lbcontroller LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkWorkersFile conf/workers.properties
JkMount /* lbcontroller 具体的说明如下 Xml代码 LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so 表示载入JK模块。 Xml代码 JkWorkersFile conf/workers.properties JkWorkersFile conf/workers.properties
tomcat实例配置具体参见2.2。 Xml代码 JkMount /* lbcontroller JkMount /* lbcontroller 设置apache分发器/*表示apache将所有文件都由分发器lbcontroller 进行分发你可以自行设置*.jsp,*.do等 2.2 workers.properties文件 在apache_home下conf目录中新建workers.properties文件输入以下内容 Xml代码 worker.listlbcontroller #Tomcat1实例配置 worker.tomcat1.host192.168.88.118 worker.tomcat1.port8009 worker.tomcat1.typeajp13 #分发权重 值越大负载越大 worker.tomcat1.lbfactor 1 #Tomcat2实例配置 worker.tomcat2.host192.168.88.168 worker.tomcat2.port9009 worker.tomcat2.typeajp13 #分发权重 值越大负载越大 worker.tomcat2.lbfactor 1 #负载均衡分发控制器 worker.lbcontroller.typelb worker.lbcontroller.balance_workerstomcat1,tomcat2 worker.lbcontroller.sticky_sessionTrue worker.listlbcontroller#Tomcat1实例配置
worker.tomcat1.host192.168.88.118
worker.tomcat1.port8009
worker.tomcat1.typeajp13
#分发权重 值越大负载越大
worker.tomcat1.lbfactor 1#Tomcat2实例配置
worker.tomcat2.host192.168.88.168
worker.tomcat2.port9009
worker.tomcat2.typeajp13
#分发权重 值越大负载越大
worker.tomcat2.lbfactor 1#负载均衡分发控制器
worker.lbcontroller.typelb
worker.lbcontroller.balance_workerstomcat1,tomcat2
worker.lbcontroller.sticky_sessionTrue 在这里 Xml代码 worker.listlbcontroller worker.listlbcontroller 内容即为httpd.conf文件中的分发器名称。需要注意的内容是tomcat实例名称 Xml代码 worker.tomcat1.host.... ... worker.tomcat2.host.... ... worker.tomcat1.host....
...
worker.tomcat2.host....
... 在这里就是tomcat1和tomcat2必须与之后tomcat中的server.xml中jvmRoute值一致。 3.tomcat集群配置 配置每个tomcat目录下的server.xml文件具体修改内容如下 3.1 Engine配置 修改前 Xml代码 Engine nameCatalina defaultHostlocalhost Engine nameCatalina defaultHostlocalhost 修改后 Xml代码 Engine nameCatalina defaultHostlocalhost jvmRoutetomcat1 Engine nameCatalina defaultHostlocalhost jvmRoutetomcat1 具体tomcat中jvmRoute的值根据在workers.properties的配置注意IP地址、tomcat实例名称和jvmRoute值必须一一对应。 3.2 Connector配置 修改前 Xml代码 Connector port8009 protocolAJP/1.3 redirectPort8443 / Connector port8009 protocolAJP/1.3 redirectPort8443 / 修改后 Xml代码 Connector port9009 protocolAJP/1.3 redirectPort8443 / Connector port9009 protocolAJP/1.3 redirectPort8443 / 这里tomcat的port值必须与在workers.properties中的port值一致。 3.3 Cluster配置 修改前 Xml代码 !-- Cluster classNameorg.apache.catalina.ha.tcp.SimpleTcpCluster -- !--
Cluster classNameorg.apache.catalina.ha.tcp.SimpleTcpCluster
-- 修改后去掉注释并添加一些内容如下 Xml代码 Cluster classNameorg.apache.catalina.ha.tcp.SimpleTcpCluster channelSendOptions8 Manager classNameorg.apache.catalina.ha.session.DeltaManager expireSessionsOnShutdownfalse notifyListenersOnReplicationtrue/ Channel classNameorg.apache.catalina.tribes.group.GroupChannel Membership classNameorg.apache.catalina.tribes.membership.McastService address228.0.0.4 port45564 frequency500 dropTime3000/ Receiver classNameorg.apache.catalina.tribes.transport.nio.NioReceiver addressauto port4001 autoBind100 selectorTimeout5000 maxThreads6/ !-- timeout60000-- Sender classNameorg.apache.catalina.tribes.transport.ReplicationTransmitter Transport classNameorg.apache.catalina.tribes.transport.nio.PooledParallelSender / /Sender Interceptor classNameorg.apache.catalina.tribes.group.interceptors.TcpFailureDetector/ Interceptor classNameorg.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor/ Interceptor classNameorg.apache.catalina.tribes.group.interceptors.ThroughputInterceptor/ /Channel Valve classNameorg.apache.catalina.ha.tcp.ReplicationValve filter/ Valve classNameorg.apache.catalina.ha.session.JvmRouteBinderValve/ ClusterListener classNameorg.apache.catalina.ha.session.JvmRouteSessionIDBinderListener/ ClusterListener classNameorg.apache.catalina.ha.session.ClusterSessionListener/ /Cluster Cluster classNameorg.apache.catalina.ha.tcp.SimpleTcpCluster channelSendOptions8 Manager classNameorg.apache.catalina.ha.session.DeltaManager expireSessionsOnShutdownfalse notifyListenersOnReplicationtrue/ Channel classNameorg.apache.catalina.tribes.group.GroupChannel Membership classNameorg.apache.catalina.tribes.membership.McastService address228.0.0.4 port45564 frequency500 dropTime3000/ Receiver classNameorg.apache.catalina.tribes.transport.nio.NioReceiver addressautoport4001 autoBind100 selectorTimeout5000 maxThreads6/ !-- timeout60000-- Sender classNameorg.apache.catalina.tribes.transport.ReplicationTransmitter Transport classNameorg.apache.catalina.tribes.transport.nio.PooledParallelSender / /Sender Interceptor classNameorg.apache.catalina.tribes.group.interceptors.TcpFailureDetector/ Interceptor classNameorg.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor/ Interceptor classNameorg.apache.catalina.tribes.group.interceptors.ThroughputInterceptor/ /Channel Valve classNameorg.apache.catalina.ha.tcp.ReplicationValve filter/ Valve classNameorg.apache.catalina.ha.session.JvmRouteBinderValve/ ClusterListener classNameorg.apache.catalina.ha.session.JvmRouteSessionIDBinderListener/ ClusterListener classNameorg.apache.catalina.ha.session.ClusterSessionListener/ /Cluster 上述配置跟tomcat官方建议的配置去掉了 Xml代码 Deployer classNameorg.apache.catalina.ha.deploy.FarmWarDeployer tempDir/tmp/war-temp/ deployDir/tmp/war-deploy/ watchDir/tmp/war-listen/ watchEnabledfalse/ Deployer classNameorg.apache.catalina.ha.deploy.FarmWarDeployertempDir/tmp/war-temp/deployDir/tmp/war-deploy/watchDir/tmp/war-listen/watchEnabledfalse/ 如果不去掉这部分则tomcat启动会报FarmWarDeployer can only work as host cluster subelement!. 3.4 session复制配置 tomcat集群中的session管理主要有两种方式 1).粘性session 表示从同一窗口发来的请求都将有集群中的同一个tomcat进行处理。配置方式是在上面workers.properties文件中 Xml代码 worker.lbcontroller.sticky_sessionTrue worker.lbcontroller.sticky_sessionTrue 粘性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代码 distributable/ 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服务器 后台架设了300030013002三个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:PermSize512M -XX:NewSize512m -XX:MaxNewSize512m -XX:MaxPermSize512m -XX:ParallelGCThreads4 -XX:MaxTenuringThreshold5 -XX:ParallelCMSThreads3 -XX:UseConcMarkSweepGC -XX:UseCMSCompactAtFullCollection -XX:CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction80一般这两个参数设置成一样的能提高效率 -Xms1024m -Xmx1024m -Xss128k 这个参数设置其实要小心128是我们一直用的值一直 也没出什么问题。 以上参数都调大后其它的参数也要随着调要不然还是用默认值这样一定就会内存溢出了。 -XX:PermSize512M -XX:NewSize512m -XX:MaxNewSize512m -XX:MaxPermSize512m 但下面几个参数也不能调大我们一般设置为最大JVM内存的一半。 杨航收集技术资料分享给大家