﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-安静的等待-随笔分类-负载均衡配置</title><link>http://www.blogjava.net/ricki/category/24184.html</link><description>茹呲綄鎂</description><language>zh-cn</language><lastBuildDate>Tue, 14 Aug 2007 04:47:12 GMT</lastBuildDate><pubDate>Tue, 14 Aug 2007 04:47:12 GMT</pubDate><ttl>60</ttl><item><title>apache2.2和tomcat5.5 </title><link>http://www.blogjava.net/ricki/archive/2007/08/12/136147.html</link><dc:creator>ricki</dc:creator><author>ricki</author><pubDate>Sun, 12 Aug 2007 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/ricki/archive/2007/08/12/136147.html</guid><wfw:comment>http://www.blogjava.net/ricki/comments/136147.html</wfw:comment><comments>http://www.blogjava.net/ricki/archive/2007/08/12/136147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ricki/comments/commentRss/136147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ricki/services/trackbacks/136147.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 10pt">Apache和Tomcat同是Apache基金会下面的两个项目。一个是HTTP WEB服务器，另一个是servlet容器（servlet container），最新的5.5.X系列实现Servlet 2.4/JSP 2.0Spec。在我们生产的环境中，往往需要Apache做前端服务器，Tomcat做后端服务器。此时我们就需要一个连接器，这个连接器的作用就是把 所有Servlet/JSP的请求转给Tomcat来处理。在Apache2.2之前，一般有两个组件可选择。mod_jk和mod_jk2。后来 mod_jk2没更新了，转而更新mod_jk，所以现在一般都使用mod_jk做Apache和Tomcat的连接器。要指出的是mod_jk支持 Apache 1.x和2.X系列。<br>不过，自从Apache2.2出来后，你又多了种选择，那就是proxy-ajp.大家知道Apache里的proxy模块，可以实现双向代理功能，功能 非常强大。其实从连接器的实现原理上来说，用proxy模块来实现是非常自然的。proxy模块的功能无非就是把相关的请求发给特定的主机再返回结果。那 连接器的功能需求就是要把所有对Servlet/JSP的请求都转给后台的Tomcat。而且所FreeBSD邮件列表上说，使用proxy-ajp要比 mod_jk的效率要高。就我一个外行来看，至少使用Apache自带模块，要比另外编译的来得可靠。<br><br><br>apache2.2和tomcat5.5是一个不错的组合，可以作为开发环境或者是工作服务器。在配置前需要下载以下几个文件：<br>1.下载JDK<br></span><a href="http://192.18.108.228/ECom/EComTicketServlet/BEGIN7CF7E6A4BCB54064E5D90FCCE00D7048/-2147483648/1579524843/1/732086/731822/1579524843/2ts+/westCoastFSEND/jdk-1.5.0_07-oth-JPR/jdk-1.5.0_07-oth-JPR:2/jdk-1_5_0_07-windows-i586-p.exe" target=_blank><span style="FONT-SIZE: 10pt"><u>http://192.18.108.228/ECom/EComTicketServlet/BEGIN7CF7E6A4BCB54064E5D90FCCE00D7048/-2147483648/1579524843/1/732086/731822/1579524843/2ts+/westCoastFSEND/jdk-1.5.0_07-oth-JPR/jdk-1.5.0_07-oth-JPR:2/jdk-1_5_0_07-windows-i586-p.exe</u></span></a><br><span style="FONT-SIZE: 10pt">2.下载apache2.2<br></span><a href="http://mirror.vmmatrix.net/apache/httpd/binaries/win32/apache_2.2.2-win32-x86-no_ssl.msi" target=_blank><span style="FONT-SIZE: 10pt"><u>http://mirror.vmmatrix.net/apache/httpd/binaries/win32/apache_2.2.2-win32-x86-no_ssl.msi</u></span></a><br><span style="FONT-SIZE: 10pt">3.下载tomcat5.5.17<br></span><a href="http://apache.justdn.org/tomcat/tomcat-5/v5.5.17/bin/apache-tomcat-5.5.17.exe" target=_blank><span style="FONT-SIZE: 10pt"><u>http://apache.justdn.org/tomcat/tomcat-5/v5.5.17/bin/apache-tomcat-5.5.17.exe</u></span></a><br><br><br><span style="FONT-SIZE: 10pt">一、安装和配置JDK<br>下载下来后，直接执行jdk-1.5.0_07-oth-JPR:2/jdk-1_5_0_07-windows-i586-p.exe<br>实装时建议选择简单的路径，如E:\Web_Server\jdk1.5.0\<br>安装最后会要求安装jre,继续下一步就行,安装路径E:\Web_Server\jre1.5.0\。<br><br>装完后添加或编缉三个系统变量(已经有就编缉，没有就新建)：<br>在PATH变量尾加在";E:\Web_Server\jdk1.5.0\bin\" (注意有个分号)<br>新建Web_Server_HOME变量，值为 "E:\Web_Server\jdk1.5.0\"<br>新建CLASSPATH变量，值为 "E:\Web_Server\jdk1.5.0\lib\tools.jar"<br><br>二、安装和测试apache<br>在安装前如已安装了IIS，请先停止IIS服务。因为IIS和apache都默认使用80端口，否则会冲突。<br>同样直接运行安装apache_2.2.2-win32-x86-no_ssl.msi，建议选择简单的路径，如E:\Web_Server\ apache2.2\。安装时会要求输入一些关于这台服务器的信息，如域名、管理员邮箱，这些信息将会加入到httpd.conf文件中。<br><br>安装完配置httpd.conf文件，在E:\Web_Server\apache2.2\conf\下<br>用文本编缉器打开httpd.conf,在DirectoryIndex index.html后添加index.jsp<br><br>测试，在IE中输入</span><a href="http://localhost/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://localhost/</u></span></a><span style="FONT-SIZE: 10pt">,如果apache工作应该可以看到"It works!"这样的页面。<br><br>三、安装和测试tomcat<br>直接运行安装tomcat,安装路径为E:\Web_Server\tomcat5.5\<br>安装完，好像步骤一，添加一个系统变量TOMCAT_HOME,变量值为"E:\Web_Server\tomcat5.5\"<br>最后测试tomcat，因为tomcat默认使用了8080端口，所以在IE输入</span><a href="http://localhost:8080/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://localhost:8080</u></span></a><span style="FONT-SIZE: 10pt">,正常工作会看见一只小猫的页面。<br><br>四。整合apache和tomcat<br>网上很多是通过mod_jk来整合的，由于apache2.2本身已经支持tomcat了，所以这里用proxy来整合tomcat，先把apache和tomcat都停止了。然后打开httpd.conf文件，把<br>LoadModule proxy_module modules/mod_proxy.so<br>LoadModule proxy_ajp_module modules/mod_proxy_ajp.so<br>前面的#号去掉，在文件最后添加<br>ProxyPass /images/ !<br>ProxyPass / ajp://127.0.0.1:8009/<br>ProxyPassReverse / ajp://127.0.0.1:8009/<br>上面几名只是对apache进行简单的优化。<br><br>五、最后测试整合后的apache+tomcat<br>启动apache，再启动tomcat,准备以下代码的jsp文件，以便测试。<br>&lt;%@ page contentType="text/html;charset=gb2312" %&gt;<br>&lt;HTML&gt;<br>&lt;HEAD&gt;<br>&lt;TITLE&gt;JSP测试页面&lt;/TITLE&gt;<br>&lt;/HEAD&gt;<br>&lt;BODY&gt;<br>&lt;%out.println("&lt;h1&gt;Hello World! &lt;/h1&gt;");%&gt;<br>&lt;/BODY&gt;<br>&lt;/HTML&gt;<br>保存为test.jsp<br>在E:\Web_Server\tomcat5.5\webapps\ROOT\下新建一个文件夹myjsp,并把test.jsp放在里面。<br>在IE中输入</span><a href="http://localhost:8080/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://localhost:8080</u></span></a><span style="FONT-SIZE: 10pt">/myjsp/test.jsp<br>再输入</span><a href="http://localhost/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://localhost/</u></span></a><span style="FONT-SIZE: 10pt">myjsp/test.jsp<br>如果两次都显示Hello World!说明已经成功整合了。<br><br><br>============================<br>方法之二：<br>Windows环境下的tomcat + apache配置(绝对实践操作版)<br>关键词： tomcat apache<br><br>Apache的HTTPD是目前比较受欢迎的网站服务器软件，它不但功能强大，而且完全免费，并且支持市场上流行的各种操作系统(Windows, Linux,Mac os)。同时对于Java Servlet/JSP的支持，通常也会使用同样Apache出品的Tomcat。<br>Tomcat除了支持Java Servlet/JSP之外，也可以当做网站服务器使用，但是在对于静态的html文件、图片文件等的解析效率上不如Apache HTTPD的执行效率高。应用tomcat的服务器如果网站的访问量较大，系统资源占用会明显升高，近日笔者在项目执行过程中遇到这一问题，便也想到同时 应用tomcat+apache服务。Apache负责静态资源处理，tomcat负责jsp和java servlet等动态资源的处理。在网上看了不少介绍Apache和Tomcat集成的帖子。大多为互相转贴，有几个关键问题没有讲清楚，并且多数文章讲 解中所举的软件版本都已经比较老旧。因而笔者总结自己实际操作的经验，希望对大家有所帮助。<br><br>准备工作：<br>1、 apache 2.0.55<br>下载地址：</span><a href="http://apache.justdn.org/httpd/binaries/win32/apache_2.0.55-win32-x86-no_ssl.msi" target=_blank><span style="FONT-SIZE: 10pt"><u>http://apache.justdn.org/httpd/binaries/win32/apache_2.0.55-win32-x86-no_ssl.msi</u></span></a><br><span style="FONT-SIZE: 10pt">2、 Tomcat 5.5<br>下载地址：</span><a href="http://tomcat.apache.org/download-55.cgi" target=_blank><span style="FONT-SIZE: 10pt"><u>http://tomcat.apache.org/download-55.cgi</u></span></a><br><span style="FONT-SIZE: 10pt">3、 JRE1.5.0 update6<br>下载地址：</span><a href="http://java.sun.com/j2se/1.5.0/download.jsp" target=_blank><span style="FONT-SIZE: 10pt"><u>http://java.sun.com/j2se/1.5.0/download.jsp</u></span></a><br><span style="FONT-SIZE: 10pt">你也可以选择安装JDK,JDK不仅包含了运行java应用程序的支持，同时也包含J2SE的开发包。但如果您只是应用的话，我建议您仅下载JRE即可，为什么？因为它小啊：）<br>4、JK-apache-2.0.55<br>下载地址：<br></span><a href="http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/</u></span></a><span style="FONT-SIZE: 10pt">win32/jk-1.2.15/mod_jk-apache-2.0.55.so<br>注意jk的版本一定要与你的apache版本相同。Jk下载可以直接到apache.org官网下载，有多种版本，适用于各种操作系统，地址如下：<br></span><a href="http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/</u></span></a><br><span style="FONT-SIZE: 10pt">windows用户进入win32目录，不同的tomcat对应不同jk文件扩展名不同，有可能是*.dll,或者*.so，根据你的tomcat版本下载合适的jk版本。<br><br>安装，软件的安装顺序可以适当调整，但是jre(jdk)一定要在tomcat之前安装：<br>1、安装JRE(JDK)<br>此处选择默认安装即可，(旧版本的JDK安装完之后需要设置系统的环境变量，JRE和JDK1.5.0以后版本不设置也没关系。)安装完成之后你可以选择按照下面的示例设置你的系统环境变量：我的电脑-&gt;右键属性-&gt;常规-&gt;高级-&gt;环境变量<br>JAVA_HOME = d:\Java\jre1.5.0_06<br>CLASSPATH = .;d:\Java\jre1.5.0_06\lib\dt.jar;d:\Java\jre1.5.0_06\lib\tools.jar<br>PATH = d:\Java\jre1.5.0_06\bin<br>注意文件路径要改成你实际安装的路径。<br><br>2、Apache安装<br>此处注意，如果你本机已经装了iis并且占用80端口,务必先在服务中将iis停止或禁用。软件默认安装即可。安装过程中设置Network Domain和Server Name为localhost,设置你的email地址，下方会让你选择only for the current user或for all users。默认选择for all users。这样Apache就会占用80端口，并且做为一个系统服务开机自运行。<br>安装完成之后，你在浏览器中输入</span><a href="http://localhost/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://localhost</u></span></a><span style="FONT-SIZE: 10pt">, 将会看到Apache的成功页面.Apache的主目录是d:\Apache\Apache2,此时Apache,已经运行,你可以在窗口的托盘看到他的 图标,双击图标，在弹开的窗口选择"Open Apache Monitor",点Stop，停止Apaceh服务，因为下面要安装Tomcat和JK.<br><br>3、Tomcat安装<br>选择安装目录为了d:\Tomcat,其余为默认安装.成功后在浏览器中输入</span><a href="http://localhost:8080/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://localhost:8080</u></span></a><span style="FONT-SIZE: 10pt">,出现Tomcat页面表示安装成功了。关于tomcat的设置已经有很多非常详细的文章，在此就不再详述了。<br><br>4、JK的安装<br>把mod_jk_2.0.55.so拷贝到d:\Apache\Apache2\modules\下.<br><br>以上安装全部完成后,打开cmd命令提示符,运行d:\Apache\Apache2\bin\Apache.exe -t 你将会看到"Syntax OK"，表示Apache配置正常．这个命令非常有用，下面在继续配置Apache的时候还会再次用到。<br><br>配置服务器：<br><br>1、配置Tomcat<br>查找目录下的conf/workers.properties文件，并对比下方文本内容，如有不同以下方内容为准修改。<br>workers.tomcat_home=d:\Tomcat #让mod_jk模块知道Tomcat的位置<br>workers.java_home=d:\Java\jre1.5.0_06 #让mod_jk模块知道jre的位置<br>ps=\<br>worker.list=ajp13 #模块版本<br>worker.ajp13.port=8009 #工作端口,若没占用则不用修改<br>worker.ajp13.host=localhost #本机,若上面的Apache主机不为localhost,作相应修改<br>worker.ajp13.type=ajp13 #类型<br>worker.ajp13.lbfactor=1 #代理数,不用修改<br><br>如果文件不存在则创建。并填充上述内容。<br><br>2、配置Apache<br>打开d:\Apache\Apache2\conf下的httpd.conf，在最后加入下面这段代码并保存。<br>#设置Apache与Tomcat之间的连接，让Apache遇到jsp文件时，在后台将其交由Tomcat去处理<br>LoadModule jk_module modules/mod_jk_2.0.55.so<br>#此处mod_jk的文件为你下载的文件<br>JkWorkersFile "d:/Tomcat/conf/workers.properties"<br>#指定tomcat监听配置文件地址<br>JkLogFile "d:/Tomcat/logs/mod_jk2.log"<br>#指定日志存放位置<br>JkLogLevel info<br><br>#设置虚拟主机<br><br>ServerAdmin localhost<br>DocumentRoot d:/test1<br>#您的站点项目所在路径，应与tomcat中的目录设置相同<br>ServerName localhost<br>DirectoryIndex index.html index.htm index.jsp<br>ErrorLog logs/shsc-error_log.txt<br>CustomLog logs/shsc-access_log.txt common<br>JkMount /servlet/* ajp13<br>#让Apache支持对servlet传送，用以Tomcat解析<br>JkMount /*.jsp ajp13<br>#让Apache支持对jsp传送，用以Tomcat解析<br>JkMount /*.do ajp13<br>#让Apache支持对.do传送，用以Tomcat解析<br><br><br>#开头的行为注释，可以删除。此处的配置我是以设置虚拟目录，重新指定了serverName,DocumentRoot路径的方式配置站点，实际上， Apache的配置可以非常灵活，你也可以不采用虚拟目录的方式，而直接去修改站点的默认配置，使用任意文本编辑工具，搜索如ServerName, DocumentRoot,ServerAdmin等相关项，然后将该项的配置根据你的实际情况进行修改即可。我建议大家可以多多尝试不同的配置，这是一 种很有乐趣的体验。<br>所有的修改完成这后，再次执行d:\Apache\Apache2\bin\Apache.exe -t 如果看到"Syntax OK"，说明你所有配置无误，双击窗口的托盘中的图标，然后点击Start运行。<br>在地址栏中分别输入</span><a href="http://localhost/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://localhost/</u></span></a><span style="FONT-SIZE: 10pt">，与</span><a href="http://localhost:8080/" target=_blank><span style="FONT-SIZE: 10pt"><u>http://localhost:8080/</u></span></a><span style="FONT-SIZE: 10pt">若结果相同,Apache与Tomcat整合成功 </span>
<img src ="http://www.blogjava.net/ricki/aggbug/136147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ricki/" target="_blank">ricki</a> 2007-08-12 11:11 <a href="http://www.blogjava.net/ricki/archive/2007/08/12/136147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat5.5集群配置</title><link>http://www.blogjava.net/ricki/archive/2007/08/09/135559.html</link><dc:creator>ricki</dc:creator><author>ricki</author><pubDate>Thu, 09 Aug 2007 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/ricki/archive/2007/08/09/135559.html</guid><wfw:comment>http://www.blogjava.net/ricki/comments/135559.html</wfw:comment><comments>http://www.blogjava.net/ricki/archive/2007/08/09/135559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ricki/comments/commentRss/135559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ricki/services/trackbacks/135559.html</trackback:ping><description><![CDATA[<span>一、配置环境<br><br>下载和安装 JRE 1.5 最新版 （1.5.06） <br>下载和安装 Tomcat 最新版 （5.5.12），假定安装目录为 C:\Program Files\Apache Software Foundation\Tomcat 5.5<br>二、使 Tomcat 集群配置生效<br><br>修改 Tomcat 安装目录\conf\server.xml ，把 Server/Service/Engine/Host 下的 Cluster 结点前后的注释符（&lt;!-- 和 --&gt;）删除，并保存<br>三、配置第二个 Tomcat 实例<br><br>在 C:\Program Files\Apache Software Foundation\ 下新建目录 Tomcat 5.5 Instance1 <br>将 C:\Program Files\Apache Software Foundation\Tomcat 5.5 目录下的全部内容复制到 C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1 <br>修改新实例的服务器配置文件 （C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\conf\server.xml），把其中的 Server/Service/Connector 的端口更改，以避免和第一个冲突（8080 -&gt; 9080，8009 -&gt; 9009，8443 -&gt; 9443） <br>修改 Cluster/Receiver 结点的 tcpListenPort 端口（此端口用于 Session 复制），以避免和第一个冲突（4001 -&gt; 4002）<br>注：Tomcat Cluster 默认使用多播来建立成员关系，即两个实例的多播的地址和端口一样，就可以互相认为是同一个 Cluster 的成员。<br><br>四、启动验证两个 Tomcat 实例能否正常工作<br><br>直接用程序菜单里的 Monitor Tomcat 来启动第一个实例（或在服务器里启动） <br>第二个实例启动稍微麻烦一些，在 C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\Bin 下建一个 startup.bat ，用如下 java 命令来启动：<br>"C:\Program Files\Java\j实re1.5.0_06\bin\java.exe" -jar .\bootstrap.jar -Dcatalina.home="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1" -Dcatalina.base="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1" -Djava.endorsed.dirs="C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\endorsed" -Djava.io.tmpdir="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\temp" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="C:\Program Files\Apache Software Foundation\Tomcat 5.5 Instance1\conf\logging.properties" start <br><br>看起来挺长，其实主要是第二个实例的安装目录太长的缘故，直接执行此批处理就可以启动第二个实例，如果配置正确，应该可以看到集群管理器启动，并和第一个实例 &nbsp; 建立成员关系的信息。<br><br>五、写一个简单Web应用，能显示和设置 Session 属性值，以供测试<br><br>如果有开发工具，新建一个 Web App ，假设为 TomcatDemo <br>新增 index.jsp ，加入如下代码：<br>&lt;%@ page contentType="text/html; charset=UTF-8" import="java.util.*"%&gt;<br>&lt;html&gt;&lt;head&gt;&lt;title&gt;Cluster App Test&lt;/title&gt;&lt;/head&gt;<br>&lt;body&gt;<br>Server Info: &lt;%out.print(request.getLocalAddr() + " : " + request.getLocalPort());%&gt;<br>&lt;%<br>out.println("&lt;br&gt; ID " + session.getId());<br><br>// 如果有新的 Session 属性设置<br>String dataName = request.getParameter("dataName");<br>if (dataName != null &amp;&amp; dataName.length() &gt; 0) {<br>&nbsp; String dataValue = request.getParameter("dataValue");<br>&nbsp; session.setAttribute(dataName, dataValue);<br>}<br><br>out.print("&lt;b&gt;Session 列表&lt;/b&gt;");<br><br>Enumeration e = session.getAttributeNames();<br>while (e.hasMoreElements()) {<br>&nbsp; String name = (String)e.nextElement();<br>&nbsp; String value = session.getAttribute(name).toString();<br>&nbsp; out.println( name + " = " + value);<br>&nbsp; }<br>%&gt;<br>&lt;form action="index.jsp" method="POST"&gt;<br>&nbsp; 名称:&lt;input type=text size=20 name="dataName"&gt;<br>&nbsp; &lt;br&gt;<br>&nbsp; 值:&lt;input type=text size=20 name="dataValue"&gt;<br>&nbsp; &lt;br&gt;<br>&nbsp; &lt;input type=submit&gt;<br>&nbsp; &lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br><br>以上代码主要是显示服务器信息和 Session 值，并包含一个 Form ，可以随时新建一个 Session 属性值<br><br>修改此用应用的 Web.xml ，加入 distributable 属性，表示 Tomcat 要为此 Web 应用复制 Session &nbsp; <br>&lt;web-app xmlns="</span><a href="http://java.sun.com/xml/ns/j2ee" target=_blank><span><u>http://java.sun.com/xml/ns/j2ee</u></span></a><span>" xmlns:xsi="</span><a href="http://www.w3.org/2001/XMLSchema-instance" target=_blank><span><u>http://www.w3.org/2001/XMLSchema-instance</u></span></a><span>" xsi:schemaLocation="</span><a href="http://java.sun.com/xml/ns/j2ee" target=_blank><span><u>http://java.sun.com/xml/ns/j2ee</u></span></a><span> </span><a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" target=_blank><span><u>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</u></span></a><span>" version="2.4"&gt;<br>&nbsp; &nbsp; &lt;display-name&gt;TomcatDemo&lt;/display-name&gt;<br>&nbsp; &nbsp; &lt;distributable/&gt;<br>&lt;/web-app&gt;<br><br>将应用打包成 WAR 文件，分别上现两个实例的 Tomcat Manager 来部署<br>(如果没有 Java 开发工具，可以直接建立一个 TomcatDemo 的目录，用 Notepad 将如上的内容复制并保存成 index.jsp，然后在此目录下新建子目录 WEB-INF，再用 Notepad 新建一 Web.xml 文件，将上面的代码复制保存，然后将此目录压缩成 Zip 文件，再把后缀改成 .war ，或利用 jar 命令来创建 .war 文件）<br><br>六、测试 Tomcat 集群和 Session 复制的是否工作<br><br>在 IE 中打开第一个实例中的 TomcatDemo （</span><a href="http://localhost:8080/TomcatDemo" target=_blank><span><u>http://localhost:8080/TomcatDemo</u></span></a><span>），在 Form 里随便设置一个 Session 属性，如 MyName = foo <br>将 IE 地址栏中的地址修改为第二个实例中的 TomcatDemo（</span><a href="http://localhost:9080/TomcatDemo" target=_blank><span><u>http://localhost:9080/TomcatDemo</u></span></a><span>），刷新，就可以看到注意到 SessionID 不变， MyName 的属性值已有了 <br>同样，如果在第二实例中设置的值，在第一个实例的页面中也能看到<br>注意：必须在同一个 IE 窗口中进行如上测试，以保证是同一个 Session ，如果是两个窗口，则 Session 可能不同，也互相看不到 Session 复制的结果。<br><br>七、其它工作<br><br>上述只实现了 Session 复制，而没有实现 Load Balance（负载均衡），这可以利用 Apache 等来实现。</span>
<img src ="http://www.blogjava.net/ricki/aggbug/135559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ricki/" target="_blank">ricki</a> 2007-08-09 17:23 <a href="http://www.blogjava.net/ricki/archive/2007/08/09/135559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache,Tomcat集群和负载均衡</title><link>http://www.blogjava.net/ricki/archive/2007/08/09/135530.html</link><dc:creator>ricki</dc:creator><author>ricki</author><pubDate>Thu, 09 Aug 2007 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/ricki/archive/2007/08/09/135530.html</guid><wfw:comment>http://www.blogjava.net/ricki/comments/135530.html</wfw:comment><comments>http://www.blogjava.net/ricki/archive/2007/08/09/135530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ricki/comments/commentRss/135530.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ricki/services/trackbacks/135530.html</trackback:ping><description><![CDATA[<strong>环境说明</strong>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache&nbsp; :apache_2.0.55&nbsp;&nbsp;&nbsp;&nbsp; 1 个</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tomcat:&nbsp; apache-tomcat-5.5.17 (zip版) 2个</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod_jk:: mod_jk-apache-2.0.55.so&nbsp; 1个</p>
<p style="FONT-SIZE: 10pt"><strong>第一部分：负载均衡</strong></p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; 负载均衡，就是apache将客户请求均衡的分给tomcat1,tomcat2....去处理</p>
<p style="FONT-SIZE: 10pt"><strong>&nbsp;&nbsp; 1.安装apche,tomcat</strong></p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp; <a href="http://httpd.apache.org/"><u><font color=#800080>http://httpd.apache.org/</font></u></a>&nbsp;下载Apache 2.0.55</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <a href="http://tomcat.apache.org/download-55.cgi"><u><font color=#800080>http://tomcat.apache.org/download-55.cgi</font></u></a>&nbsp;下载tomcat5.5 zip版本（解压即可，绿色版）</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp; <a href="http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/"><u><font color=#0000ff>http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/</font></u></a>&nbsp; 下载mod_jk,注意和&nbsp; apache版本匹配</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp; 按照jdk,我的路径为:E:\ide\apache\Apache2</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp; 解压两份Tomcat, 路径分别为 E:\ide\tomcat1,E:\ide\tomcat2</p>
<div style="FONT-SIZE: 10pt" forimg="1"><img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/9d61f003d5034eec09fa935b.jpg" border=0 small="0"></div>
<p style="FONT-SIZE: 10pt">下载mod_jk</p>
<div style="FONT-SIZE: 10pt" forimg="1"></div>
<div style="FONT-SIZE: 10pt" forimg="1"><img height=436 alt=2.gif src="http://www.blogjava.net/images/blogjava_net/killme2008/2.gif" width=618 border=0></div>
<div style="FONT-SIZE: 10pt" forimg="1"></div>
<div style="FONT-SIZE: 10pt" forimg="1"></div>
<p style="FONT-SIZE: 10pt"><strong>2.修改Apache配置文件http.conf</strong></p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp; 在apache安装目录下conf目录中找到http.conf</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp; 在文件最后加上下面一句话就可以了</p>
<p style="FONT-SIZE: 10pt">&nbsp; include "E:\ide\apache\Apache2\conf\mod_jk.conf"</p>
<div style="FONT-SIZE: 10pt" forimg="1"><img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/d1c28cd49b8d6901a08bb720.jpg" border=0 small="0"></div>
<div style="FONT-SIZE: 10pt" forimg="1"></div>
<div style="FONT-SIZE: 10pt" forimg="1"></div>
<div style="FONT-SIZE: 10pt" forimg="1"><strong>2. http.conf 同目录下新建mod_jk.conf文件，内容如下<br><br></strong>#加载mod_jk Module<br>LoadModule jk_module modules/mod_jk-apache-2.0.55.so<br>#指定 workers.properties文件路径<br>JkWorkersFile conf/workers.properties<br>#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器<br>JkMount /*.jsp controller<br><br><strong>3.在http.conf同目录下新建 workers.properties文件，内容如下<br><br></strong>worker.list = controller,tomcat1,tomcat2&nbsp; #server 列表<br>#========tomcat1========<br>worker.tomcat1.port=8009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ajp13 端口号，在tomcat下server.xml配置,默认8009<br>worker.tomcat1.host=localhost&nbsp; #tomcat的主机地址，如不为本机，请填写ip地址<br>worker.tomcat1.type=ajp13<br>worker.tomcat1.lbfactor = 1&nbsp;&nbsp; #server的加权比重，值越高，分得的请求越多<br>#========tomcat2========<br>worker.tomcat2.port=9009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ajp13 端口号，在tomcat下server.xml配置,默认8009<br>worker.tomcat2.host=localhost&nbsp; #tomcat的主机地址，如不为本机，请填写ip地址<br>worker.tomcat2.type=ajp13<br>worker.tomcat2.lbfactor = 1&nbsp;&nbsp; #server的加权比重，值越高，分得的请求越多<br>#========controller,负载均衡控制器========<br>worker.controller.type=lb<br>worker.controller.balanced_workers=tomcat1,tomcat2&nbsp;&nbsp; #指定分担请求的tomcat<br>worker.controller.sticky_session=1<br><br><strong>4.修改tomcat配置文件server.xml<br><br></strong>如果你在不同电脑上安装tomcat,tomcat的安装数量为一个，可以不必修改tomcat配置文件<br>我这里是在同一台电脑上安装两个tomcat，所以需要更改其中一个的设置<br>打开tomcat2/conf/server.xml文件</div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/a3d133a8ed4063b1ca130c36.jpg" border=0 small="0"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/8c3cae7727b25d1bb151b937.jpg" border=0 small="0"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/56b04b085ba7f3950b7b8230.jpg" border=0 small="0"><br><br><strong>5.编写一个测试jsp<br></strong>建立一个目录test.里面新建一个test.jsp,内容为<br>&lt;% <br>&nbsp;&nbsp; System.out.println("===========================");<br>%&gt;<br><br>把test放到tomcat1,tomcat2的webapps下<br><br><strong>6.启动apache,tomcat1,tomcat2,进行测试<br></strong>通过 <a href="http://localhost/test/test.jsp"><u><font color=#800080>http://localhost/test/test.jsp</font></u></a>&nbsp;访问，查看tomcat1的窗口，可以看到打印了一行"=========="<br>再刷新一次，tomcat2也打印了一条，再刷新，可以看到请求会被tomcat1,tomcat2轮流处理,实现了负载均衡.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/acf2fcf2c8b77d13b17ec53d.jpg" width=916 border=0 small="0"><br><br><strong>第二部分，配置集群<br><br></strong>&nbsp;&nbsp; 只配置负载均衡还不行，还要session复制，也就是说其中任何一个tomcat的添加的session，是要同步复制到其它tomcat， 集群内的tomcat都有相同的session<br><br><strong>1. 修改tomcat1, tomcat2的server.xml</strong>,将集群部分配置的在注释符删掉,并将tomcat2的4001端口改为4002，以避免与tomcat冲突，当然，如果是两台电脑，是不用改端口的，去掉注释符即可&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/aa4ab5fb0f3582224f4aeab2.jpg" border=0 small="0"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/89b84c3627ecc1dda3cc2b92.jpg" border=0 small="0"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/cc4b858b603d47d3fd1f10b2.jpg" border=0 small="0"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/52dfdac4bc506ecb38db4959.jpg" border=0 small="0"><br><strong>2，修改测试项目test<br><br></strong>修改test.jsp,内容如下<br><br>&lt;%@ page contentType="text/html; charset=GBK" %&gt;<br>&lt;%@ page import="java.util.*" %&gt;<br>&lt;html&gt;&lt;head&gt;&lt;title&gt;Cluster App Test&lt;/title&gt;&lt;/head&gt;<br>&lt;body&gt;<br>Server Info:<br>&lt;%<br>out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"&lt;br&gt;");%&gt;<br>&lt;%<br>&nbsp; out.println("&lt;br&gt; ID " + session.getId()+"&lt;br&gt;");<br>&nbsp;// 如果有新的 Session 属性设置<br>&nbsp; String dataName = request.getParameter("dataName");<br>&nbsp; if (dataName != null &amp;&amp; dataName.length() &gt; 0) {<br>&nbsp;&nbsp;&nbsp;&nbsp; String dataValue = request.getParameter("dataValue");<br>&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute(dataName, dataValue);<br>&nbsp; }<br>out.print("&lt;b&gt;Session 列表&lt;/b&gt;");<br>Enumeration e = session.getAttributeNames();<br>&nbsp; while (e.hasMoreElements()) {<br>&nbsp;&nbsp;&nbsp;&nbsp; String name = (String)e.nextElement();<br>&nbsp;&nbsp;&nbsp;&nbsp; String value = session.getAttribute(name).toString();<br>&nbsp;&nbsp;&nbsp;&nbsp; out.println( name + " = " + value+"&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( name + " = " + value);<br>&nbsp;&nbsp; }<br>%&gt;<br>&nbsp; &lt;form action="index.jsp" method="POST"&gt;<br>&nbsp;&nbsp;&nbsp; 名称:&lt;input type=text size=20 name="dataName"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br>&nbsp;&nbsp;&nbsp; 值:&lt;input type=text size=20 name="dataValue"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br>&nbsp;&nbsp;&nbsp; &lt;input type=submit&gt;<br>&nbsp;&nbsp; &lt;/form&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br>然后在test 新建WEB-INF目录，WEB-INF下新建web.xml,内容如下<br>&lt;web-app xmlns="<a href="http://java.sun.com/xml/ns/j2ee"><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee</font></u></a>" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance"><u><font color=#0000ff>http://www.w3.org/2001/XMLSchema-instance</font></u></a>" xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee"><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee</font></u></a> <a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</font></u></a>" version="2.4"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;display-name&gt;TomcatDemo&lt;/display-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color=#ff0000> &lt;distributable/&gt;</font></strong><br>&lt;/web-app&gt;<br><br>注意：在你的应用的web.xml加入&nbsp;<font color=#ff0000><strong> &lt;distributable/&gt;</strong> </font><font color=#000000>即可</font> <br>ok,讲test复制到tomcat1,tomcat2的webapps下，重启apache,tomcat1,tomcat2,输入网址 <a href="http://localhost/test/test.jsp"><u><font color=#800080>http://localhost/test/test.jsp</font></u></a>&nbsp;&nbsp; <br>新建一个 名称为 xiaoluo&nbsp; ,值为 cdut 的session,提交查询，新开一个ie窗口，再提交查询，如图，可以看到，两个tomcat 是负载均衡，并且session同步的<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img class=blogimg src="http://hiphotos.baidu.com/luodaijun/pic/item/79a9317af99aa5ed2e73b385.jpg" width=916 border=0 small="0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.blogjava.net/ricki/aggbug/135530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ricki/" target="_blank">ricki</a> 2007-08-09 16:14 <a href="http://www.blogjava.net/ricki/archive/2007/08/09/135530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache+JK+Tomcat负载平衡配置</title><link>http://www.blogjava.net/ricki/archive/2007/07/18/130978.html</link><dc:creator>ricki</dc:creator><author>ricki</author><pubDate>Wed, 18 Jul 2007 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/ricki/archive/2007/07/18/130978.html</guid><wfw:comment>http://www.blogjava.net/ricki/comments/130978.html</wfw:comment><comments>http://www.blogjava.net/ricki/archive/2007/07/18/130978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ricki/comments/commentRss/130978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ricki/services/trackbacks/130978.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">网上关于Apache + JK + Tomcat的集群配置例子很多，按着例子配置下来，基本都能运行，不过，在一些重要的地方却没有进一步的说明。这次公司一个产品就是采用Apache+JK+Tomcat集群，在整个配置、测试过程中，遇到了许多的问题，经过不断测试、摸索，最后总算是搞定了，性能也达到了预期的目标。针对网上的例子，感觉有必要再详细的介绍一下我的配置过程，对一些要特别注意的地方进行补充。</p>
<p style="FONT-SIZE: 10pt">集群有别于分布式的解决方案，它采用的是每台服务器运行相同应用的策略，由负责平衡的服务器进行分流，这对提高整个系统的并发量及吞吐量是更有效的办法。而集群对请求的处理又有两种不同的方式：负载平衡、状态复制(即集群)，状态复制需要在各服务器间复制应用状态，而负载平衡则不用，每台服务器都是独立的。实践证明，在各应用服务器之间不需要状态复制的情况下，负载平衡可以达到性能的线性增长及更高的并发需求。</p>
<p style="FONT-SIZE: 10pt">对于集群的其它基础知识，在此就不再做累赘。以下就这次Apache + JK + Tomcat的负载平衡配置进行总结，重点关注整个配置及注意事项。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<h2>准备软件</h2>
<p style="FONT-SIZE: 10pt">1、&nbsp;Tomcat或JBoss（本文档中采用的是JBoss<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899" />4.0.2</chsdate />）；</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">2、&nbsp;apache<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899" />2.0.54</chsdate />是开源的Web服务器，下载地址为： <a href="http://www.apache.org/dist/httpd/binaries/">http://www.apache.org/dist/httpd/binaries/</a> ；</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">3、&nbsp;mod_jk-<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899" />1.2.14</chsdate />-apache-2.0.54.so模块,jk是mod_jserv的替代者，它是Tomcat-Apache插件，为Apache和Tomcat的连接器，处理Tomcat和Apache之间的通信，在集群配置中充当负载均衡器的作用，当前的最新版本为1.2.15，不过不同JK版本与不同的Apache版本之间的搭配有一些差异，有的甚至配不起来。JK2是符合apache2.x系列的新品，但由于其配置太过麻烦，使用的人很少，所以目前已停止开发，所以我们采用了jk连接器，下载地址：<a href="http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/">http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/</a>。</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<h2>集群与负载平衡</h2>
<p style="FONT-SIZE: 10pt" align=left>使用mod_jk默认的以轮循方式进行平衡负载，假设有四个服务器节点，有10个请求，则四个节点分别接受请求编号如下：</p>
<div style="FONT-SIZE: 10pt" align=center>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>节点1</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>节点2</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>节点3</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>节点4</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>1</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>2</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>3</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>4</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>5</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>6</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>7</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>8</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>9</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>10</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>&nbsp;</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
            <td style="FONT-SIZE: 10pt" vAlign=top>
            <p style="FONT-SIZE: 10pt" align=center>&nbsp;</p>
            <p style="FONT-SIZE: 10pt"></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p style="FONT-SIZE: 10pt">而集群方式也是使用这种方法进行平衡。Tomcat中的集群原理是通过组播的方式进行节点的查找并使用TCP连接进行会话的复制。</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;集群不同于负载平衡的是，由于集群服务需要在处理请求之间不断地进行会话复制，复制后的会话将会慢慢变得庞大，因此它的资源占用率是非常高的，如果在并发量大的应用中，复制的会话大小会变得相当大，而使用的总内存更是会迅速升高。</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;但集群的会话复制，增加了系统的高可用性。由于在每台服务器都保存有用户的Session信息，如果服务器群中某台当机，应用可以自动切换到其它服务器上继续运行，而用户的信息不会丢失，这提高了应用的冗错性。</p>
<p style="FONT-SIZE: 10pt">具体采用负载平衡还是集群，这要看应用的需求了。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<h2>安装配置Apache</h2>
<p style="FONT-SIZE: 10pt">1、下载Apache的安装程序apache_<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899" />2.0.54</chsdate />-win32-x86-no_ssl.exe后，安装很简单，一路回车，就此略过。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">2、安装完毕后，将下载的mod_jk-<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899" />1.2.14</chsdate />-apache-2.0.54.so复制到Apache安装目录下的modules子目录中。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">3、然后进入Apache安装目录下的conf子目录中，打开httpd.conf配置文件，在最后插入以下一行：</p>
<p style="FONT-SIZE: 10pt">Include conf/mod_jk.conf</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">4、&nbsp;在conf子目录下，建立一个新的配置文件：mod_jk.conf，此文件为Apache加载连接器的配置文件，文件名可修改，但要与httpd.conf中Include的文件名一致，内容如下：</p>
<p style="FONT-SIZE: 10pt"># Load mod_jk module. Specify the filename</p>
<p style="FONT-SIZE: 10pt"># of the mod_jk lib you&#8217;ve downloaded and</p>
<p style="FONT-SIZE: 10pt"># installed in the previous section</p>
<p style="FONT-SIZE: 10pt">#加载mod_jk模块</p>
<p style="FONT-SIZE: 10pt">LoadModule jk_module modules/mod_jk-<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899" />1.2.14</chsdate />-apache-2.0.54.so</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"># Where to find workers.properties</p>
<p style="FONT-SIZE: 10pt">JkWorkersFile conf/workers2.properties</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"># Where to put jk logs</p>
<p style="FONT-SIZE: 10pt">JkLogFile logs/mod_jk.log</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"># Set the jk log level [debug/error/info]</p>
<p style="FONT-SIZE: 10pt">JkLogLevel info</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"># Select the log format</p>
<p style="FONT-SIZE: 10pt">JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"># JkOptions indicate to send SSL KEY SIZE,</p>
<p style="FONT-SIZE: 10pt">JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"># JkRequestLogFormat set the request format</p>
<p style="FONT-SIZE: 10pt">JkRequestLogFormat "%w %V %T"</p>
<p style="FONT-SIZE: 10pt"># 请求分发配置，可以配置多项</p>
<p style="FONT-SIZE: 10pt">JkMount /* loadbalancer</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">#关掉主机Lookup，如果为on，很影响性能，可以有10多秒钟的延迟。<br>HostnameLookups&nbsp;Off</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">注：蓝色加粗的两行是重点，第一句是Apache加载JK模块用的；第二句为配置哪些URL请求将由负载平衡器来处理。</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">5、&nbsp;在conf子目录下，建立一个新的配置文件：workers2.properties，此文件为负载平衡的配置文件，文件名不能修改，这是JK默认的名字，内容如下：</p>
<p style="FONT-SIZE: 10pt">worker.list=loadbalancer</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"># Define the first node...</p>
<p style="FONT-SIZE: 10pt">worker.server99.port=8009</p>
<p style="FONT-SIZE: 10pt">worker.server99.host=192.168.11.99</p>
<p style="FONT-SIZE: 10pt">worker.server99.type=ajp13</p>
<p style="FONT-SIZE: 10pt">worker.server99.lbfactor=1 </p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">worker.server99.local_worker=1</p>
<p style="FONT-SIZE: 10pt">worker.server99.cachesize=1000</p>
<p style="FONT-SIZE: 10pt">worker.server99.cache_timeout=600</p>
<p style="FONT-SIZE: 10pt">worker.server99.socket_keepalive=1</p>
<p style="FONT-SIZE: 10pt">worker.server99.socket_timeout=0</p>
<p style="FONT-SIZE: 10pt">worker.server99.reclycle_timeout=300</p>
<p style="FONT-SIZE: 10pt">worker.server99.retries=3</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"># Define the second node...</p>
<p style="FONT-SIZE: 10pt">worker.server202.port=8009</p>
<p style="FONT-SIZE: 10pt">worker.server202.host=192.168.11.202</p>
<p style="FONT-SIZE: 10pt">worker.server202.type=ajp13</p>
<p style="FONT-SIZE: 10pt">worker.server202.lbfactor=1</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">worker.server202.local_worker=1</p>
<p style="FONT-SIZE: 10pt">worker.server202.cachesize=1000</p>
<p style="FONT-SIZE: 10pt">worker.server202.cache_timeout=600</p>
<p style="FONT-SIZE: 10pt">worker.server202.socket_keepalive=1</p>
<p style="FONT-SIZE: 10pt">worker.server202.socket_timeout=0</p>
<p style="FONT-SIZE: 10pt">worker.server202.reclycle_timeout=300</p>
<p style="FONT-SIZE: 10pt">worker.server202.retries=3</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"># Now we define the load-balancing behaviour</p>
<p style="FONT-SIZE: 10pt">worker.loadbalancer.type=lb</p>
<p style="FONT-SIZE: 10pt">worker.retries=3</p>
<p style="FONT-SIZE: 10pt">worker.loadbalancer.balance_workers=server99 ,server202</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">worker.loadbalancer.sticky_session=true</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">worker.loadbalancer.sticky_session_force=true</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">注：以上定义了两个worker，一个为server99，另一个为server202，定义了一个负载平衡服务器loadbalancer，其中标蓝色的为重点配置项，相关的详细说明可以看官方的网站文档：<a href="http://tomcat.apache.org/connectors-doc/">http://tomcat.apache.org/connectors-doc/</a>，其它节点的定义可以直接Copy，修改一下节点名及IP就好了。<br>A、worker.list=loadbalancer</p>
<p style="FONT-SIZE: 10pt">设定工作的负载平衡器，各Tomcat节点不能加入此列表。</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; B、worker.server99.lbfactor</p>
<p style="FONT-SIZE: 10pt">负载平衡的权重比，如果此权重比越大，则分配到此节点的请求越多，如以上两个节点的权重比为1:1，则为平均分配。</p>
<p style="FONT-SIZE: 10pt">C、worker.loadbalancer.balance_workers=server99,server202</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp; 指定此负载平衡器负责的Tomcat应用节点。</p>
<p style="FONT-SIZE: 10pt">D、worker.loadbalancer.sticky_session=true</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp; 此处指定集群是否需要会话复制，如果设为true，则表明为会话粘性，不进行会话复制，当某用户的请求第一次分发到哪台Tomcat后，后继的请求会一直分发到此Tomcat服务器上处理；如果设为false，则表明需求会话复制。</p>
<p style="FONT-SIZE: 10pt">E、worker.loadbalancer.sticky_session_force=true</p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp; 如果上面的sticky_session设为true时，建议此处也设为true，此参数表明如果集群中某台Tomcat服务器在多次请求没有响应后，是否将当前的请求，转发到其它Tomcat服务器上处理；此参数在sticky_session=true时，影响比较大，会导致转发到其它Tomcat服务器上的请求，找不到原来的session，所以如果此时请求中有读取session中某些信息的话，就会导致应用的null异常。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">6、Apache服务器的配置文件httpd.conf中，默认有三个参数对性能的影响比较大，但根据不同的性能要求，参数的表现又不一样，太小并发提不上去，太大性能反而不好，建议根据项目的需要，实际做个测试，如并发要求800的话，可以设定为：</p>
<p style="FONT-SIZE: 10pt">#一个连接的最大请求数量</p>
<p style="FONT-SIZE: 10pt">MaxKeepAliveRequests　1000（值为0，则不限制数量）</p>
<p style="FONT-SIZE: 10pt">#每个进程的线程数，最大1920。NT只启动父子两个进程，不能设置启动多个进程</p>
<p style="FONT-SIZE: 10pt">ThreadsPerChild　　　　1000（最大为1920）</p>
<p style="FONT-SIZE: 10pt">#每个子进程能够处理的最大请求数</p>
<p style="FONT-SIZE: 10pt">MaxRequestsPerChild&nbsp;&nbsp; 1000（值为0，则不限制数量）</p>
<p style="FONT-SIZE: 10pt">这三个参数要根据不同的需求，不同的服务器进行调整。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<h2>安装配置Tomcat或JBoss</h2>
<p style="FONT-SIZE: 10pt">1、对于Tomcat或JBoss的安装，这里不做说明，目前我们是采用Apache+JBoss，不过，JBoss也是用的Tomcat，所以这里的配置也是适合Tomcat的；</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">2、对于JBoss的配置，很简单，只需要改两个地方就可以了：</p>
<p style="FONT-SIZE: 10pt">第一个地方：进入jboss-<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899" />4.0.2</chsdate />\server\default\deploy\jbossweb-tomcat55.sar，打开server.xml，大约在第32行左右，有<engine name="jboss.web" defaulthost="localhost" />，在其中加入一个参数，变为：</p>
<p style="FONT-SIZE: 10pt"><engine name="jboss.web" defaulthost="localhost" jvmroute="server3" /></p>
<p style="FONT-SIZE: 10pt">第二个地方：进入jboss-<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899" />4.0.2</chsdate />\server\default\deploy\jbossweb-tomcat55.sar\META-INF目录，打开jboss-service.xml，大约在110行，有<attribute name="UseJK" />false</attribute />，将其改为：</p>
<p style="FONT-SIZE: 10pt"><attribute name="UseJK" />true</attribute /></p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">这里有一个需要特别注意的地方，JBoss的Tomcat中，关于AJP连接协议的默认配置，对于大并发量是不够用的，要做一些修改，进入jboss-<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899" />4.0.2</chsdate />\server\default\deploy\jbossweb-tomcat55.sar，打开server.xml，找到<!-- A AJP 1.3 Connector on port 8009 -->的地方，这里是定义AJP连接器的地方，它的配置中没有maxThreads项，默认为200，我们可以做修改：</p>
<p style="FONT-SIZE: 10pt"><connector font="" <="" address="${jboss.bind.address}" port="8009" /></p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; emptySessionPath="true" enableLookups="false" redirectPort="8443" </p>
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protocol="AJP/1.3" maxThreads="3000"/&gt;</p>
<p style="FONT-SIZE: 10pt">maxThreads的值要看你的并发量多大，设置太大也不好。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<h2>运行</h2>
<p style="FONT-SIZE: 10pt">至此，整个配置全部完成，注意一点是，在各JBoss节点，重启或新增加一个JBoss节点时，需要重新启动Apache，而对于服务器群中某个JBoss节点shutdown，Apache会自动侦测，不用重新启动。</p>
<p style="FONT-SIZE: 10pt">如果在运行过程中，群中的某个JBoss节点shutdown，则已登录到此服务器上的用户的请求将出错，此服务器负责的session将丢失，但Apache会自动侦测到此服务器已shutdown，后继的新请求将不会再引导到此节点。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">对于负责请求分发的Apache服务器，需要消耗大量的CPU资源，因此如果在测试过程中出现一些Service&nbsp;Temporarily&nbsp;Unavailable或Server&nbsp;&nbsp;has&nbsp;shut&nbsp;down&nbsp;the&nbsp;connection&nbsp;prematurely这样的错误，这一般都是服务器配置不够好引起的，或者是Apache、Tomcat、及应用中的某些配置不够使用，这时候就要考虑换更好的机器或优化应用中的配置。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">常见问题</p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">一、cannot&nbsp;connect&nbsp;to&nbsp;server：无法连接到服务器。这种情况是服务器的配置有问题，服务器无法承受过多的并发连接了，需要优化服务器的配置：</p>
<p style="FONT-SIZE: 10pt">如操作系统采用更高版本，如windows&nbsp;2003&nbsp;server，</p>
<p style="FONT-SIZE: 10pt">优化tomcat配置：maxThreads="500"&nbsp;minSpareThreads="400"&nbsp;maxSpareThreads="450"</p>
<p style="FONT-SIZE: 10pt">但是tomcat&nbsp;最多支持500个并发访问</p>
<p style="FONT-SIZE: 10pt">优化apache配置：</p>
<p style="FONT-SIZE: 10pt">ThreadsPerChild&nbsp;1900 </p>
<p style="FONT-SIZE: 10pt">MaxRequestsPerChild&nbsp;&nbsp;10000</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">二、&nbsp;Action.c(10):&nbsp;Error&nbsp;-27791:&nbsp;Server&nbsp;&nbsp;has&nbsp;shut&nbsp;down&nbsp;the&nbsp;connection&nbsp;prematurely</p>
<p style="FONT-SIZE: 10pt">HTTP&nbsp;Status-Code=503&nbsp;(Service&nbsp;Temporarily&nbsp;Unavailable)<br>一般都是由于服务器配置不够好引起的，需要优化硬件和调整程序了。</p>
<p style="FONT-SIZE: 10pt"></p>
<p style="FONT-SIZE: 10pt">
<p style="FONT-SIZE: 10pt">三、无法处理请求：</p>
<p style="FONT-SIZE: 10pt">当我们输入&nbsp;***.do&nbsp;命令后，apache却返回错误信息，而连接tomcat却没有问题。原因是没有把.do命令转发给tomcat处理。解决方法如下：</p>
<p style="FONT-SIZE: 10pt">在apache配置文件中配置如下内容：</p>
<p style="FONT-SIZE: 10pt">JkMount&nbsp;/*.jsp&nbsp;loadbalancer</p>
<p style="FONT-SIZE: 10pt">JkMount&nbsp;/*.do&nbsp;loadbalancer</p>
<img src ="http://www.blogjava.net/ricki/aggbug/130978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ricki/" target="_blank">ricki</a> 2007-07-18 10:11 <a href="http://www.blogjava.net/ricki/archive/2007/07/18/130978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>