﻿<?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-同一个目标，同一个梦想-随笔分类-Apache + Tomcat</title><link>http://www.blogjava.net/J2EEHOME/category/40417.html</link><description>One Target,One Dream</description><language>zh-cn</language><lastBuildDate>Fri, 02 Apr 2010 19:32:35 GMT</lastBuildDate><pubDate>Fri, 02 Apr 2010 19:32:35 GMT</pubDate><ttl>60</ttl><item><title>第三次Apache tomcat集群总结</title><link>http://www.blogjava.net/J2EEHOME/archive/2009/08/04/289826.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Tue, 04 Aug 2009 10:32:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/archive/2009/08/04/289826.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/289826.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/archive/2009/08/04/289826.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/289826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/289826.html</trackback:ping><description><![CDATA[
		<p style="TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; mso-pagination: widow-orphan" class="MsoNormal" align="left">
				<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">    </span>
				<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">第一次做集群时架好后在启动<span lang="EN-US">tomcat</span>时报了一大堆错误：内存溢出呗。我就纳闷了怎么会出现这样错误，服务器配置是<span lang="EN-US">4G</span>内存，查了一通资料，发现原来<span lang="EN-US">tomcat</span>在启动时要加载已经编译好的<span lang="EN-US">.class</span>文件，默认内存区大小为<span lang="EN-US">128M</span>，如果文件较多，这个错误也是必然的。咋办？调内存呗，我的几个<span lang="EN-US">tomcat</span>都是以服务形式安装的，整得我要改注册表，就改这个地方，HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat62\Parameters\Java<br />然后调整里边<span lang="EN-US">JavaMs</span>和<span lang="EN-US">JavaMx</span>的值，前者表示运行时加载的最小内存，后者表示可利用的最大内存，单位是<span lang="EN-US">M</span>，要换到十进制下去改。这个问题搞了三个周才找到解决办法，第一次就败在此处！<span lang="EN-US"><br />    </span>第二次什么错误是其中一台机器上<span lang="EN-US">tomcat</span>启动报错<span lang="EN-US">Unable to start cluster. org.apache.catalina.tribes.ChannelException: java.net.SocketException: error set ting options; No faulty members identified. </span>，搞了一天没有找到解决办法，弃之；那位仁兄如果有解决办法欢迎赐教！<span lang="EN-US"><br />    </span>第三次集群方式和前两次没什么区别，都是采用<span lang="EN-US">http_proxy</span>形式作为<span lang="EN-US">Apache</span>和<span lang="EN-US">tomcat</span>之间连接的桥梁，这次把成功的配置详细的说明下：<span lang="EN-US"><br />1.</span>去掉<span lang="EN-US">apache</span>中<span lang="EN-US">httpd.conf</span>目录中以下几行的注释<span lang="EN-US"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></span>
		</p>
		<table style="WIDTH: 375pt; mso-cellspacing: 1.5pt; mso-padding-alt: 1.5pt 1.5pt 1.5pt 1.5pt" class="MsoNormalTable" border="0" cellpadding="0" width="500">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
								<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 1.5pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 1.5pt; PADDING-RIGHT: 1.5pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 1.5pt">
										<p style="TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; mso-pagination: widow-orphan" class="MsoNormal" align="left">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">#change here start <br />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 LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so<o:p></o:p></span>
										</p>
										<p style="TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; mso-pagination: widow-orphan" class="MsoNormal" align="left">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US"> #end<o:p></o:p></span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes">
								<td style="BORDER-BOTTOM: #d4d0c8; BORDER-LEFT: #d4d0c8; PADDING-BOTTOM: 1.5pt; BACKGROUND-COLOR: transparent; PADDING-LEFT: 1.5pt; PADDING-RIGHT: 1.5pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: #d4d0c8; PADDING-TOP: 1.5pt">
										<p style="TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; mso-pagination: widow-orphan" class="MsoNormal" align="left">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US"># Virtual hosts <o:p></o:p></span>
										</p>
										<p style="TEXT-ALIGN: left; MARGIN: 0cm 0cm 0pt; mso-pagination: widow-orphan" class="MsoNormal" align="left">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US"># change here two step</span>
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">就是去掉了注释，主要用于配置虚拟机文件<span lang="EN-US"><br />Include conf/extra/httpd-vhosts.conf <o:p></o:p></span></span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">2.</span>
				<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">在<span lang="EN-US">httpd.conf</span>最下边加上这些东东<span lang="EN-US"><br style="mso-special-character: line-break" /><br style="mso-special-character: line-break" /><o:p></o:p></span></span>
		</p>
		<table style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
								<td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 426.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">ProxyRequests Off <o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">&lt;proxy balancer://cluster&gt; <o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">BalancerMember ajp://192.168.0.22:9001 loadfactor=1 route=jvm3<o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">BalancerMember ajp://192.168.0.22:9003 loadfactor=1 route=jvm4<o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">BalancerMember ajp://192.168.0.22:9090 loadfactor=1 route=jvm5<o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">&lt;/proxy&gt;<o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">
														<o:p> </o:p>
												</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">ProxyRequests Off <o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">&lt;proxy balancer://cluster2&gt; <o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">BalancerMember ajp://192.168.0.1:8009 loadfactor=1 route=jvm1<o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">&lt;/proxy&gt;<o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">
														<o:p> </o:p>
												</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">ProxyRequests Off <o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">&lt;proxy balancer://cluster3&gt; <o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">BalancerMember ajp://192.168.0.1:9009 loadfactor=1 route=jvm2<o:p></o:p></span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">&lt;/proxy&gt;<o:p></o:p></span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">
						<br />
				</span>
				<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">具体什么意思就不说了，第一行表格是做集群用，下边两个仅作为负载均衡之用，可以说就没均衡负载，为啥？就一个<span lang="EN-US">tomcat</span>你做什么负载啊，呵呵。重点关注这里</span>
		</p>
		<table style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
								<td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 426.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体" lang="EN-US">&lt;proxy balancer://cluster2&gt; <o:p></o:p></span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span lang="EN-US">Cluster2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">才是关键所在，他表示了你的站点要在那个群集内做负载均衡或者集群，我们这里用到了集群和负载均衡，其实就是一回事说白了，上</span>
				<span lang="EN-US">cluster</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做集群，</span>
				<span lang="EN-US">cluster2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">cluster3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">仅做负载均衡之用，不做</span>
				<span lang="EN-US">session</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">复制和绘画保持。</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下边我们看下</span>
				<span lang="EN-US">extra</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录中</span>
				<span lang="EN-US">httpd-vhosts.conf</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的修改吧</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以上边说的</span>
				<span lang="EN-US">cluster,cluster2,cluster3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为例各配置一个虚拟机</span>
		</p>
		<table style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
								<td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 426.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">&lt;VirtualHost *:80&gt;</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-tab-count: 1">       </span>
														<span style="mso-spacerun: yes"> </span>ServerAdmin cxccma@163.com</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-tab-count: 1">       </span>
														<span style="mso-spacerun: yes"> </span>ServerName *****.com</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-tab-count: 1">       </span>
														<span style="mso-spacerun: yes"> </span>ServerAlias www.*****.com</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ProxyPassReverse / balancer://cluster/</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">&lt;/VirtualHost&gt;</span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 1">
								<td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 426.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="568">
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">&lt;VirtualHost *:80&gt;</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ServerAdmin cxccma@163.com</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ServerName *****.cn</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ServerAlias www. *****.cn</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ProxyPass / balancer://cluster2/ </span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ProxyPassReverse / balancer://cluster2/</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">&lt;/VirtualHost&gt;</span>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes">
								<td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 426.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="568">
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">&lt;VirtualHost *:80&gt;</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ServerAdmin cxccma@163.com</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ServerName *****.com</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ServerAlias www. *****.com</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ProxyPass / balancer://cluster3/ </span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>ProxyPassReverse / balancer://cluster3/</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">&lt;/VirtualHost&gt;</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以上明白了，就是说是三个站点分别在不同的群集内，为什么要这样做？主要是因为我们前期用的是</span>
				<span lang="EN-US">tomcat5.5</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本的，后期开发中友用到了</span>
				<span lang="EN-US">6.x</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本的，所以整了两个群集以兼容前期和后期的站点，当然如果你需要在</span>
				<span lang="EN-US">cluster2,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者</span>
				<span lang="EN-US">cluster3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中再加一台</span>
				<span lang="EN-US">tomcat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做负载均衡用</span>
				<span lang="EN-US">,OK,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">很简单，直接复制下就可以</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span lang="EN-US">3.apache</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">说完了，接下来说下</span>
				<span lang="EN-US">tomcat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">吧</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span lang="EN-US">Tomcat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中不用做什么大的改动，首先在</span>
				<span lang="EN-US">server.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中部署你的虚拟主机啊</span>
		</p>
		<table style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
								<td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 426.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">&lt;Host name="www.******.com" appBase="webapps"</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">    </span>
														<span style="mso-spacerun: yes">   </span>unpackWARs="true" autoDeploy="true"</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">       </span>xmlValidation="false" xmlNamespaceAware="false"&gt;</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">               </span>&lt;Context path="" docBase="D:\lejie"</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">         </span>debug= "0" reloadable="false" crossContext="false" verbosity="DEBUG"&gt;</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">
														<span style="mso-spacerun: yes">     </span>&lt;/Context&gt;</span>
										</p>
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">&lt;/Host&gt;</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span lang="EN-US">OK</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如果需要做全局集群，那就修改</span>
				<span lang="EN-US">content.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中</span>
				<span lang="EN-US">Context</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元素，加上这句就行</span>
		</p>
		<table style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
								<td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 426.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">distributable="true"</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者在单独的文件中的</span>
				<span lang="EN-US">web.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中加入这句话</span>
		</p>
		<table style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-COLLAPSE: collapse; BORDER-TOP: medium none; BORDER-RIGHT: medium none; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
								<td style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 0cm; BACKGROUND-COLOR: transparent; PADDING-LEFT: 5.4pt; WIDTH: 426.1pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 0cm; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
										<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
												<span lang="EN-US">&lt; distributable/&gt;</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到这应该都说完了吧，谈下个人的想法：</span>
				<span lang="EN-US">apache</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">tomcat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有三种连接方法：</span>
				<span lang="EN-US">JK</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">mod_proxy,http_proxy</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，前两者的配置都是超繁琐，在可维护性和模块化上也没什么优点，我一直用第三种连接方法，采用</span>
				<span lang="EN-US">AJP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">直连，</span>
				<span lang="EN-US">AJP1.3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在连接上表现出明显的优点，所以我也建议采用第三种连接。</span>
		</p>
		<p style="MARGIN: 0cm 0cm 0pt" class="MsoNormal">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">算是一个工作总结吧，欢迎各位不吝赐教！如果有什么疑问请通过以下方式联系本人</span>
		</p>
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/289826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-08-04 18:32 <a href="http://www.blogjava.net/J2EEHOME/archive/2009/08/04/289826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows平台上的Apache+Tomcat配置指南</title><link>http://www.blogjava.net/J2EEHOME/archive/2009/06/30/284733.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Tue, 30 Jun 2009 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/archive/2009/06/30/284733.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/284733.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/archive/2009/06/30/284733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/284733.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/284733.html</trackback:ping><description><![CDATA[<p>本文主要讲述如何在windows平台上搭建一个用于java平台的web服务器过程。<br />
&nbsp;&nbsp;&nbsp; 整个过程中用到的软件包括：Apache的http服务器、JDK6、Tomcat 6、mod_jk。实现的目标是配置完成一个由Apache担当80端口的web服务器，Tomcat担任Java的Web应用容器，两者通过mod_jk的连接完成对外提供服务的工作。现在我们开始配置过程：<br />
&nbsp;&nbsp;&nbsp; 1、下载Apache的http服务器<br />
&nbsp;&nbsp;&nbsp; 下载地址：http://httpd.apache.org，在本文编写时，httpd的服务器当前最新发行版本是2.2.11（我们称2.2版本），我们选在windows平台的二进制版本下载，我们最好选择Win32 Binary including OpenSSL 0.9.8i (MSI Installer) ，因为这个版本只是SSL，也许你将来需要提供SSL的功能，所以这里有备无患。<br />
&nbsp;&nbsp;&nbsp; 2、安装Apache的http服务器<br />
&nbsp;&nbsp;&nbsp; 这个步骤的任务非常简单，对于windows平台，你只需要按照安装向导一步一步完成安装任务就可以了，在过程你可以会被要求填写一些信息，比如服务器的域名（你可以根据你的服务器实际的域名填写，如果你只是测试，并没有申请过域名的话，你可以随便填写一个），管理员的电子邮件等等。在这个过程中记住你的软件的安装目录，接下来的步骤中我们将会用到这个目录。我们将这个安装过程中的每一步截图记录如下：</p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/apache-1.gif" /></p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/apache-2.gif" /></p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/apache-3.gif" /><br />
</p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/apache-4.gif" /><br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/apache-5.gif" /><br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/apache-6.gif" /><br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/apache-7.gif" /><br />
&nbsp;&nbsp;&nbsp; 3、下载安装JDK6<br />
&nbsp;&nbsp;&nbsp; 下载地址：http://java.sun.com/javase/downloads/?intcmp=1281，下载Java SE Development Kit (JDK) 6 Update 11。<br />
&nbsp;&nbsp;&nbsp; 安装JDK的过程非常简单，你只需要依次下一步就可以完成任务了，安装过程注意选择安装目录，我们这里假设安装目录为d:\java\jdk1.6。<br />
&nbsp;&nbsp;&nbsp; 4、下载Tomcat 6<br />
&nbsp;&nbsp;&nbsp; 下载地址：http://tomcat.apache.org/download-60.cgi，选择windows平台的tomcat软件，你可以选在Windows Service Installer 版本。<br />
&nbsp;&nbsp;&nbsp; 5、安装Tomcat 6<br />
&nbsp;&nbsp;&nbsp; 这个过程中也是近乎傻瓜型的，这里将Tomcat 6的安装过程截图如下：</p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/tomcat-1.gif" /></p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/tomcat-2.gif" /></p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/tomcat-3.gif" /></p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/tomcat-4.gif" /></p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/tomcat-5.gif" /><br />
</p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/stevencn76/EntryImages/20081222/tomcat-6.gif" /><br />
<br />
<br />
&nbsp;&nbsp;&nbsp; 6、下载和配置mod_jk<br />
&nbsp;&nbsp;&nbsp; 下载地址：http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.27/mod_jk-1.2.27-httpd-2.2.10.so，这里大家需要注意一点，你应该更具你的apache的版本来选择mod_jk的版本。当你现在so文件之后，接下来的任务就是要将so模块配置到apache服务器当中去。<br />
&nbsp;&nbsp;&nbsp; 首先将mod_jk-1.2.27-httpd-2.2.10.so复制到apache的安装目录中modules目录中，你会在这个目录（C:\Program Files\Apache Software Foundation\Apache2.2\modules）中看到很多的so文件。然后打开apache的配置文件（C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf），在其中找到包含LoadModule字样的内容，在这些内容的下方添加一个新的LoadModule，其目的是为了给Apache增加一个新的模块功能，这个模块就是mod_jk，它的目的是为了让apache能够和tomcat进行协作。在LoadModule下方添加如下一行内容：<br />
&nbsp;&nbsp;&nbsp; LoadModule&nbsp;&nbsp; jk_module&nbsp;&nbsp; modules/mod_jk-1.2.27-httpd-2.2.10.so<br />
&nbsp;&nbsp;&nbsp; mod_jk模块要正确工作，必须知道被它操控的tomcat服务器在哪里，而这个内容需要被配置在另外一个文件中，现在我们将这个文件命名为workers.properties，将这个文件放在httpd.conf相同的地方（当然你可以放在任何你希望的地方），文件中的内容如下：<br />
ps=\<br />
worker.list=ojava<br />
worker.ojava.port=8009<br />
worker.ojava.type=ajp13<br />
worker.ojava.host=localhost<br />
worker.ojava.lbfactor=1<br />
&nbsp;&nbsp;&nbsp; 有了这个配置文件之后，我们必须要告诉mod_jk这个文件的存在，所以需要再次打开httpd.conf文件，在我们刚刚添加的LoadModule这一行的下方添加如下一行内容：<br />
&nbsp;&nbsp;&nbsp; JkworkersFile&nbsp; conf/workers.properties<br />
&nbsp;&nbsp;&nbsp; 好了，现在你已经完成了apache和tomcat的通讯方式和参数的配置，接下来需要做的就是配置哪个web应用需要由apache转交给tomcat进行处理，我们以虚拟主机为例：<br />
我们为apache增加新的虚拟主机的配置，首先修改httpd.conf的配置，找到#Include conf/extra/httpd-vhosts.conf，将这一行前面的#去除掉，让这一行的配置生效。然后我们找到配置文件中如下的内容：<br />
&lt;Directory /&gt;<br />
&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br />
&nbsp;&nbsp;&nbsp; AllowOverride None<br />
&nbsp;&nbsp;&nbsp; Order deny,allow<br />
&nbsp;&nbsp;&nbsp; Deny from all<br />
&lt;/Directory&gt;<br />
将其修改为如下的内容：<br />
&lt;Directory /&gt;<br />
&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br />
&nbsp;&nbsp;&nbsp; AllowOverride None<br />
&lt;/Directory&gt;<br />
其目的是为了给apache配置虚拟主机，指定其他目录作为web网站的目录时产生无权访问的错误。<br />
&nbsp;&nbsp;&nbsp; 接着打开C:\Program Files\Apache Software Foundation\Apache2.2\conf\extra\httpd-vhosts.conf，去掉里面已经配置的虚拟主机部分的内容，如下所示：<br />
&lt;VirtualHost *:80&gt;<br />
&nbsp;&nbsp;&nbsp; ServerAdmin webmaster@dummy-host.ojava.net<br />
&nbsp;&nbsp;&nbsp; DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.ojava.net"<br />
&nbsp;&nbsp;&nbsp; ServerName dummy-host.ojava.net<br />
&nbsp;&nbsp;&nbsp; ServerAlias www.dummy-host.ojava.net<br />
&nbsp;&nbsp;&nbsp; ErrorLog "logs/dummy-host.ojava.net-error.log"<br />
&nbsp;&nbsp;&nbsp; CustomLog "logs/dummy-host.ojava.net-access.log" common<br />
&lt;/VirtualHost&gt;</p>
<p>&lt;VirtualHost *:80&gt;<br />
&nbsp;&nbsp;&nbsp; ServerAdmin webmaster@dummy-host2.ojava.net<br />
&nbsp;&nbsp;&nbsp; DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.ojava.net"<br />
&nbsp;&nbsp;&nbsp; ServerName dummy-host2.ojava.net<br />
&nbsp;&nbsp;&nbsp; ErrorLog "logs/dummy-host2.ojava.net-error.log"<br />
&nbsp;&nbsp;&nbsp; CustomLog "logs/dummy-host2.ojava.net-access.log" common<br />
&lt;/VirtualHost&gt;<br />
添加我们自己配置的信息，配置内容如下：<br />
&lt;VirtualHost *:80&gt;<br />
&nbsp;&nbsp;&nbsp; ServerAdmin steven@ojava.net<br />
&nbsp;&nbsp;&nbsp; DocumentRoot "e:/ojava/web_root"<br />
&nbsp;&nbsp;&nbsp; ServerName www.ojava.net</p>
<p>&nbsp;&nbsp;&nbsp; JkMount&nbsp; /*&nbsp; ojava</p>
<p>&nbsp;&nbsp;&nbsp; ErrorLog "logs/www.ojava.net-error.log"<br />
&nbsp;&nbsp;&nbsp; CustomLog "logs/www.ojava.net-access.log" common<br />
&lt;/VirtualHost&gt;<br />
到这里我们已经将对www.ojava.net域名网站的访问请求转交给了tomcat进行处理了。此时如果你需要在tomcat中进行虚拟主机的配置，那么你可以继续修改tomcat的配置文件，如果你不需要，那么到这里，你已经完成了所以的配置过程。恭喜你，现在重新启动apache和tomcat，可以测试了，成功了吗？有问题欢迎交流。</p>
<p>本文<a href="http://blog.csdn.net/stevencn76/archive/2008/12/22/3584925.aspx"><font color="#000000">转载</font>http://blog.csdn.net/stevencn76/archive/2008/12/22/3584925.aspx</a></p>
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/284733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-06-30 10:51 <a href="http://www.blogjava.net/J2EEHOME/archive/2009/06/30/284733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat　非root启动</title><link>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284409.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Sat, 27 Jun 2009 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284409.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/284409.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/284409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/284409.html</trackback:ping><description><![CDATA[<div class="bword" id="post_message_244"># addusr tomcat<br />
# chown -R tomcat:tomcat /usr/local/tomcat<br />
-------------------------------------<br />
#vi /etc/rc.local<br />
在最后加入：<br />
su - tomcat -c '/usr/local/tomcat/bin/startup.sh'<br />
------------------------------------<br />
REBOOT试试，JSP用ROOT启动不安全的问题解决了<br />
<br />
su - tomcat -c '/usr/local/tomcat/bin/shutdown.sh' &#8216;tomcat停止命令<br />
</div>
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/284409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-06-27 16:47 <a href="http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 6.18 Virtual Host</title><link>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284408.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Sat, 27 Jun 2009 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284408.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/284408.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/284408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/284408.html</trackback:ping><description><![CDATA[<div id="art" style="margin: 15px" width="100%">
<div>conf/server.xml</div>
<div>&nbsp;</div>
<div><span id="divDescArea2">&lt;Engine name="Catalina" defaultHost="localhost"&gt;</span></div>
<div>&nbsp;</div>
<div><span id="divDescArea1"><span id="divDescArea1">&lt;Host name="localhost" appBase="webapps"<br />
unpackWARs="true" autoDeploy="true"<br />
xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
<br />
&lt;/Host&gt;<br />
<br />
&lt;Host name="<a href="http://www.host01.com/">www.host01.com</a>" appBase="/opt/host01"<br />
unpackWARs="true" autoDeploy="true"<br />
xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
<br />
&lt;/Host&gt;<br />
<br />
&lt;Host name="<a href="http://www.host02.com/">www.host02.com</a>" appBase="/opt/host02"<br />
unpackWARs="true" autoDeploy="true"<br />
xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
<br />
&lt;/Host&gt;</span></span></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><span id="divDescArea3">conf/Catalina/localhost/ROOT.xml:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;Context path="" reloadable="false" docBase="" workDir="/tmp/tomcat" /&gt;</span></div>
<span>
<div><br />
</span><span><span id="divDescArea3">conf/Catalina/</span>www.host01.com/ROOT.xml<br />
&nbsp;&nbsp;&nbsp; &lt;Context path="" reloadable="false" docBase="" workDir="/tmp/host01" /&gt;</span></div>
<div><span><br />
<span><span id="divDescArea3">conf/Catalina/</span>www.host02.com/ROOT.xml</span><br />
&lt;Context path="" reloadable="false" docBase="" workDir="/tmp/host02" /&gt;</span></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>参考:www.ex-parrot.com/~pete/tomcat-vhost.html</div>
<div></div>
</div>
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/284408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-06-27 16:46 <a href="http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache Java Tomcat Proxy-ajp(Linux)整合</title><link>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284407.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Sat, 27 Jun 2009 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284407.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/284407.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/284407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/284407.html</trackback:ping><description><![CDATA[<div id="art" style="margin: 15px" width="100%">
<div>前言： <br />
安装软件：<br />
1. jdk-1_5_0_06-linux-i586.bin<br />
2. httpd-2.2.0.tar.gz <br />
3. apache-tomcat-6.0.13.tar.gz <br />
并且放置在/usr/local目录下。<br />
<br />
一、安装JDK<br />
大家从网上下载的JDK的LINUX版本一般是bin格式<br />
<br />
1. 使bin文件可执行。 <br />
[root@localhost local]# chmod +x jdk-1_5_0_06-linux-i586.bin <br />
<br />
2. 安装 <br />
[root@localhost loacl]# ./ jdk-1_5_0_06-linux-i586.bin <br />
<br />
3. 为了操作简单，有必要为刚刚安装的jdk1.5.0_06建立一个JDK的同步目录 <br />
[root@localhost local]# ln -s jdk1.5.0_06 jdk <br />
<br />
4. 设置环境变量JAVA_HOME（这个变量会在后面的Tomcat中用到）。 <br />
[root@localhost local]# vi /etc/profile <br />
在该文件的末尾加上下面两行 <br />
export JAVA_HOME=/usr/local/jdk <br />
export CLASSPATH=$JAVA_HOME/lib<br />
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH<br />
保存退出 <br />
<br />
5. 验证该变量的设置。如果感觉安装顺利的话，可以跳过此步。 <br />
[root@localhost local]# echo $JAVA_HOME <br />
大家会发现返回的是空行 <br />
不要惊慌，退出去重新登录系统就可以了<br />
或者执行命令是环境变量立即生效<br />
[root@localhost local]source /etc/profile<br />
[root@localhost /]# echo $JAVA_HOME <br />
/usr/ local /jdk <br />
[root@localhost /]java &#8211;version<br />
java version "1.5.0_06"<br />
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)<br />
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)<br />
如果返回这行，就说明设置成功。至此您的JDK安装完毕。 <br />
<br />
二、安装Tomcat <br />
Tomcat的安装比较简单，解压后运行即可。 <br />
<br />
1. 将安装包拷贝到/usr/local目录下安装， <br />
[root@localhost local]# tar -zxvf apache-tomcat-6.0.13.tar.gz <br />
<br />
2. 为解压后得到的apache-tomcat-6.0.13创建一个名为tomcat的同步目录。 <br />
[root@localhost local]# ln -s apache-tomcat-6.0.13 tomcat <br />
<br />
3. 设置环境变量CATALINA_HOME，并验证 <br />
[root@localhost local]# vi /etc/profile <br />
在文件最后加入如下一行 <br />
export CATALINA_HOME=/usr/local/tomcat<br />
保存退出 <br />
验证CATALINA_HOME的过程跟上面验证JAVA_HOME的过程相同。 <br />
<br />
4. 启动并测试安装结果 <br />
[root@localhost local]# cd ./tomcat/bin <br />
[root@localhost bin]# ./startup.sh <br />
Using CATALINA_BASE: /usr/local/tomcat <br />
Using CATALINA_HOME: /usr/local/tomcat <br />
Using CATALINA_TMPDIR: /usr/local/tomcat/temp <br />
Using JAVA_HOME: /usr/java/jdk<br />
[root@localhost bin]# netstat -tnl<br />
Active Internet connections (only servers)<br />
Proto Recv-Q Send-Q Local Address Foreign Address State <br />
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN <br />
tcp 0 0 192.168.1.254:53 0.0.0.0:* LISTEN <br />
tcp 0 0 192.168.2.254:53 0.0.0.0:* LISTEN <br />
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN <br />
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN <br />
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN <br />
tcp 0 0 :::8009 :::* LISTEN <br />
tcp 0 0 :::8080 :::* LISTEN <br />
tcp 0 0 :::22 :::* LISTEN <br />
<br />
port 8080 and 8009已经LISTEN了 <br />
<br />
6.打开浏览器，敲入主机地址和端口号8080,回车 <br />
如：<a href="http://192.168.1.254:8080/" target="_blank"><font color="#22229c">http://192.168.1.254:8080/</font></a> <br />
如果出现如下画面则说明，安装成功。</div>
<div>&nbsp;</div>
<div>从http://www.apache.org的网站上下载apache-2.2.0的源代码。apache-2.2.0的版本做了些改动大家需要注意一下。首先apr和apr-util需要单独的安装，还有配置文件由原来的一个变为现在的多个不过这样也好，可以清楚的知道那部分配置在那个配置文件里方便修改。安装步骤如下：<br />
<br />
解压apache的源代码<br />
# tar xvjf httpd-2.2.0.tar.bz2<br />
# cd httpd-2.2.0<br />
<br />
安装apr<br />
# cd srclib/apr<br />
# ./configure --prefix=/server/soft/apr<br />
# make<br />
# make install<br />
<br />
安装apr-util<br />
# cd ../apr-util/<br />
# ./configure --prefix=/server/soft/apr-util \<br />
&nbsp;&nbsp;&nbsp; --with-apr=/server/soft/apr<br />
# make<br />
# make install<br />
# cd ../../<br />
<br />
安装apache<br />
# ./configure --prefix=/server/soft/apache \<br />
&nbsp;&nbsp;&nbsp; --enable-so \<br />
&nbsp;&nbsp;&nbsp; --enable-rewrite=share \<br />
&nbsp;&nbsp;&nbsp; --enable-proxy=share \<br />
&nbsp;&nbsp;&nbsp; --enable-proxy-ajp=share \<br />
&nbsp;&nbsp;&nbsp; --enable-dav=share \<br />
&nbsp;&nbsp;&nbsp; --with-apr=/server/soft/apr \<br />
&nbsp;&nbsp;&nbsp; --with-apr-util=/server/soft/apr-util/<br />
# make <br />
# make install<br />
<br />
# /server/soft/apache/bin/httpd -l //看看是否有proxy-ajp这个模块<br />
如果有这个模块证明proxy-ajp模块安装成功，可以进行与tomcat的结合了。<br />
<br />
# vi /server/soft/apache/conf/httpd.conf<br />
把"#Include conf/extra/httpd-vhosts.conf" 前面的"#"去掉然后编辑<br />
/server/soft/apache/conf/extra/httpd-vhosts.conf<br />
<br />
编辑为如下的代码<br />
&lt;VirtualHost *:80&gt;<br />
&nbsp;&nbsp;&nbsp; ServerAdmin admin@easyea.com<br />
&nbsp;&nbsp;&nbsp; ProxyPass / ajp://localhost:8009/<br />
&nbsp;&nbsp;&nbsp; ProxyPassReverse / ajp://localhost:8009/<br />
&nbsp;&nbsp;&nbsp; ServerName localhost<br />
&nbsp;&nbsp;&nbsp; ServerAlias www.easyea.com<br />
&nbsp;&nbsp;&nbsp; ErrorLog logs/easyea.com-error_log<br />
&nbsp;&nbsp;&nbsp; CustomLog logs/easyea.com-access_log common<br />
&lt;/VirtualHost&gt;<br />
<br />
然后先启动tomcat，再启动apache <br />
# /server/soft/apache/bin/apachctl start <br />
打开浏览器看看是否看到了tomcat的欢迎页面，如果是说明apache和tomcat的结合成功 </div>
<div></div>
</div>
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/284407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-06-27 16:44 <a href="http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat集群Cluster实现原理剖析</title><link>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284405.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Sat, 27 Jun 2009 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284405.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/284405.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/284405.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/284405.html</trackback:ping><description><![CDATA[<div id="art" style="margin: 15px" width="100%">
<div>引自：<a href="http://zyycaesar.javaeye.com/blog/296606">http://zyycaesar.javaeye.com/blog/296606</a></div>
<div>&nbsp;</div>
<div>对于WEB应用集群的技术实现而言，最大的难点就是如何能在集群中的多个节点之间保持数据的一致性，会话（Session）信息是这些数据中最重要的一块。要实现这一点，大体上有两种方式，一种是把所有Session数据放到一台服务器上或者数据库中，集群中的所有节点通过访问这台Session服务器来获取数据；另一种就是在集群中的所有节点间进行Session数据的同步拷贝，任何一个节点均保存了所有的Session数据。两种方式都各有优点，第一种方式简单、易于实现，但是存在着Session服务器发生故障会导致全系统不能正常工作的风险；第二种方式可靠性更高，任一节点的故障不会对整个系统对客户访问的响应产生影响，但是技术实现上更复杂一些。常见的平台或中间件如microsoft asp.net和IBM WAS都会提供对两种共享方式的支持，<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>也是这样，但是一般采用第二种方式。
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当采用<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>默认集群配置（&lt;<span class="hilite2"><font style="background-color: #55ff55">Cluster</font></span> className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/&gt;）时，配置的细节实际上被省略了，对于大多数应用而言，使用默认配置已经足够，完整的默认配置应该是这样：</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;<span class="hilite2"><font style="background-color: #55ff55">Cluster</font></span> className="org.apache.catalina.ha.tcp.SimpleTcpCluster"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; channelSendOptions="8"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Manager className="org.apache.catalina.ha.session.DeltaManager"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; expireSessionsOnShutdown="false"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notifyListenersOnReplication="true"/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Channel className="org.apache.catalina.tribes.group.GroupChannel"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Membership className="org.apache.catalina.tribes.membership.McastService"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address="228.0.0.4"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port="45564"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frequency="500"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dropTime="3000"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address="auto"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port="4000"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoBind="100"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; selectorTimeout="5000"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="6"/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Sender&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Channel&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.ha.tcp.ReplicationValve"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filter=""/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempDir="/tmp/war-temp/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deployDir="/tmp/war-deploy/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; watchDir="/tmp/war-listen/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; watchEnabled="false"/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/<span class="hilite2"><font style="background-color: #55ff55">Cluster</font></span>&gt;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 下面笔者对这里的配置项作详细解释，以下内容均是笔者阅读了<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>官方文档后自己的理解，有些可能不对，希望读者能带着批判的眼光阅读，并欢迎指正笔者错误。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>集群各节点通过建立tcp链接来完成Session的拷贝，拷贝有同步和异步两种模式。在同步模式下，对客户端的响应必须在Session拷贝到其他节点完成后进行；异步模式无需等待Session拷贝完成就可响应。异步模式更高效，但是同步模式可靠性更高。同步异步模式由channelSendOptions参数控制，默认值是8，为异步模式，4是同步模式。在异步模式下，可以通过加上拷贝确认（Acknowledge）来提高可靠性，此时channelSendOptions设为10。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Manager用来在节点间拷贝Session，默认使用DeltaManager，DeltaManager采用的一种all-to-all的工作方式，即集群中的节点会把Session数据向所有其他节点拷贝，而不管其他节点是否部署了当前应用。当集群中的节点数量很多并且部署着不同应用时，可以使用BackupManager，BackManager仅向部署了当前应用的节点拷贝Session。但是到目前为止BackupManager并未经过大规模测试，可靠性不及DeltaManager。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Channel负责对<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>集群的IO层进行配置。Membership用于发现集群中的其他节点，这里的address用的是组播地址（Multicast address，了解更多组播地址详情请参见<a href="http://zyycaesar.javaeye.com/admin/blogs/296501"><font color="#108ac6">http://zyycaesar.javaeye.com/admin/blogs/296501</font></a>），使用同一个组播地址和端口的多个节点同属一个子集群，因此通过自定义组播地址和端口就可将一个大的<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>集群分成多个子集群。Receiver用于各个节点接收其他节点发送的数据，在默认配置下<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>会从4000-4100间依次选取一个可用的端口进行接收，自定义配置时，如果多个<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>节点在一台物理服务器上注意要使用不同的端口。Sender用于向其他节点发送数据，具体实现通过Transport配置，PooledParallelSender是从tcp连接池中获取连接，可以实现并行发送，即集群中的多个节点可以同时向其他所有节点发送数据而互不影响。Interceptor有点类似下面将要解释的Valve，起到一个阀门的作用，在数据到达目的节点前进行检测或其他操作，如TcpFailureDetector用于检测在数据的传输过程中是否发生了tcp错误。关于Channel的编程模型，请参见<a href="http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/tribes/Channel.html"><font color="#108ac6">http://<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>.apache.org/<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>-6.0-doc/api/org/apache/catalina/tribes/Channel.html</font></a>。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Valve用于在节点向客户端响应前进行检测或进行某些操作，ReplicationValve就是用于用于检测当前的响应是否涉及Session数据的更新，如果是则启动Session拷贝操作，filter用于过滤请求，如客户端对图片，css，js的请求就不会涉及Session，因此不需检测，默认状态下不进行过滤，监测所有的响应。JvmRouteBinderValve会在前端的Apache mod_jk发生错误时保证同一客户端的请求发送到集群的同一个节点，<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>官方文档并未解释如何实现这一点，而且笔者认为这一设置似乎并无多大实用性。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Deployer用于集群的farm功能，监控应用中文件的更新，以保证集群中所有节点应用的一致性，如某个用户上传文件到集群中某个节点的应用程序目录下，Deployer会监测到这一操作并把这一文件拷贝到集群中其他节点相同应用的对应目录下以保持所有应用的一致。这是一个相当强大的功能，不过很遗憾，<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>集群目前并不能做到这一点，开发人员正在努力实现它，这里的配置只是预留了一个接口。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; Listener用于跟踪集群中节点发出和收到的数据，也有点类似Valve的功能。</p>
<p>&nbsp;&nbsp;&nbsp; 在大体了解了<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>集群实现模型后，就可以对集群作出更优化的配置了，<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>推荐了一套配置，使用了比DeltaManager更高效的BackupManager，并且对ReplicationValve设置了请求过滤，注意在一台服务器部署多个节点时需要修改Receiver的侦听端口，另外，为了更高效的在节点间拷贝数据，所有<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>节点最好采用相同的配置，具体配置如下：</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;<span class="hilite2"><font style="background-color: #55ff55">Cluster</font></span> className="org.apache.catalina.ha.tcp.SimpleTcpCluster"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; channelSendOptions="6"&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Manager className="org.apache.catalina.ha.session.BackupManager"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; expireSessionsOnShutdown="false"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notifyListenersOnReplication="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mapSendOptions="6"/&gt;</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Channel className="org.apache.catalina.tribes.group.GroupChannel"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Membership className="org.apache.catalina.tribes.membership.McastService"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address="228.0.0.4"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port="45564"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frequency="500"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dropTime="3000"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address="auto"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port="5000"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; selectorTimeout="100"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="6"/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Sender&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Channel&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.ha.tcp.ReplicationValve"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempDir="/tmp/war-temp/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deployDir="/tmp/war-deploy/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; watchDir="/tmp/war-listen/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; watchEnabled="false"/&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/<span class="hilite2"><font style="background-color: #55ff55">Cluster</font></span>&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1"><font style="background-color: #ffff00">Tomcat</font></span>集群除了可以进行Session数据的拷贝，还可进行Context属性的拷贝，通过修改context.xml的Context配置可以实现，使用&lt;Context className="org.apache.catalina.ha.context.ReplicatedContext"/&gt;替换默认Context即可，当然也可再加上distributable="true"属性。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 下面通过假想的一组场景来描述<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>集群如何工作，集群采用默认配置，由t1和t2两个<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>例程组成，场景按照时间顺序排列。</p>
<p><br />
1.&nbsp;t1启动</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; t1按照标准的<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>启动，当Host对象被创建时，一个<span class="hilite2"><font style="background-color: #55ff55">Cluster</font></span>对象（默认配置下是SimpleTcpCluster）也同时被关联到这个Host对象。当某个应用在web.xml中设置了distributable时，<span class="hilite1"><font style="background-color: #ffff00">Tomcat</font></span>将为此应用的上下文环境创建一个DeltaManager。SimpleTcpCluster启动membership服务和Replication服务（用于建立tcp连接）。</p>
<p><br />
2.&nbsp;t2启动（待t1启动完成后）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 首先t2会执行和t1一样的操作，然后SimpleTcpCluster会建立一个由t1和t2组成的membership。接着t2向集群中已启动的服务器即t1请求Session数据，如果t1没有响应t2的拷贝请求，t2会在60秒后time out。在Session数据拷贝完成之前t2不会接收客户端的http或mod_jk/ajp请求。</p>
<p><br />
3.&nbsp;t1接收http请求，创建Session s1<br />
&nbsp;&nbsp;&nbsp;&nbsp; t1正常响应客户请求，但是在t1把结果发送回客户端时，ReplicationValve会拦截当前请求（如果filter中配置了不需拦截的请求类型，这一步就不会进行，默认配置下拦截所有请求），如果发现当前请求更新了Session，调用Replication服务建立tcp连接把Session拷贝到membership列表中的其他节点即t2，返回结果给客户端（注意，如果采用同步拷贝，必须等拷贝完成后才会返回结果，异步拷贝在数据发送到tcp连接就返回结果，不等待拷贝完成）。在拷贝时，所有保存在当前Session中的可序列化的对象都会被拷贝，而不仅仅是发生更新的部分。</p>
<p><br />
4.&nbsp;t1崩溃<br />
&nbsp;&nbsp;&nbsp;&nbsp; 当t1崩溃时，t2会被告知t1已从集群中退出，然后t2就会把t1从自己的membership列表中删除，发生在t2的Session更新不再往t1拷贝，同时负载均衡器会把后续的http请求全部转发给t2。在此过程中所有的Session数据不会丢失。</p>
<p><br />
5.&nbsp;t2接收s1的请求<br />
&nbsp;&nbsp;&nbsp;&nbsp; t2正常响应s1的请求，因为t2保存着s1的所有数据。</p>
<p><br />
6.&nbsp;t1重新启动<br />
&nbsp;&nbsp;&nbsp;&nbsp; 按步骤1、2一样的操作启动，加入集群，从t2拷贝所有Session数据，拷贝完成后开放自己的http和mod_jk/ajp端口接收请求。</p>
<p><br />
7.&nbsp;t1接收请求，s1失效<br />
&nbsp;&nbsp;&nbsp;&nbsp; t1继续接收来自s1的请求，把s1设置为过期。这里的过期并非因为s1处于非活动状态超过设置的时间，而是执行类似注销的操作而引起的Session失效。这时t1并非发送s1的所有数据而是一个类似s1 expired的消息，t2收到消息后也会把s1设为过期。</p>
<p><br />
8.&nbsp;t2接收请求，创建Session s2<br />
&nbsp;&nbsp;&nbsp;&nbsp; 和步骤3一样。</p>
<p><br />
9.&nbsp;t1 s2过期<br />
&nbsp;&nbsp;&nbsp;&nbsp; 对于因超时引起的Session失效t1无需通知t2，因为t2同样知道s2已经超时。因此对于<span class="hilite1"><font style="background-color: #ffff00">tomcat</font></span>集群有一点非常重要，所有节点的操作系统时间必须一致！不然会出现某个节点Session已过期而在另一节点此Session仍处于活动状态的现象。</p>
</div>
</div>
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/284405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-06-27 16:28 <a href="http://www.blogjava.net/J2EEHOME/archive/2009/06/27/284405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache server2.2.11+Tomcat6集群总结（一）</title><link>http://www.blogjava.net/J2EEHOME/archive/2009/06/22/283637.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Mon, 22 Jun 2009 10:36:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/archive/2009/06/22/283637.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/283637.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/archive/2009/06/22/283637.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/283637.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/283637.html</trackback:ping><description><![CDATA[1.安装程序运行所需要的文件：JDK、Apache、Tomcat<br />
2.另外还需要下载一个JK包，下载地址是<a href="http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28">http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28</a>，这里需要的版本是<a href="http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28/mod_jk-1.2.28-httpd-2.2.3.so">mod_jk-1.2.28-httpd-2.2.3.so</a>&nbsp; ，下载后将其复制到apache安装目录的modules文件夹下，可以不用改名。<br />
3.在httpd.conf所在的目录下新建两个文件：mod_jk.conf、works.properties<br />
在mod_jk.conf中写入
<table style="width: 742px; height: 163px" bordercolor="#ff0000" cellspacing="2" cellpadding="2" width="742" border="0">
    <tbody>
        <tr>
            <td>#加载mod_jk Module<br />
            LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so<br />
            #指定 workers.properties文件路径<br />
            JkWorkersFile conf/workers.properties<br />
            #指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器<br />
            JkMount /*.jsp controller<br />
            </td>
        </tr>
    </tbody>
</table>
在works.properties中写入<br />
<table style="width: 745px; height: 376px" bordercolor="#ff0000" cellspacing="2" cellpadding="2" width="745" border="0">
    <tbody>
        <tr>
            <td>
            <p>worker.list = controller,tomcat1,tomcat2&nbsp; #server 列表</p>
            <p>#========tomcat1========<br />
            worker.tomcat1.port=8009&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的加权比重，值越高，分得的请求越多</p>
            <p>#========tomcat2========<br />
            worker.tomcat2.port=9009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ajp13 端口号，在tomcat下server.xml配置,默认8009，不要写成tomcat的端口号<br />
            worker.tomcat2.host=localhost&nbsp; #tomcat的主机地址，如不为本机，请填写ip地址<br />
            worker.tomcat2.type=ajp13<br />
            worker.tomcat2.lbfactor = 1&nbsp;&nbsp; #server的加权比重，值越高，分得的请求越多</p>
            <p>#========controller,负载均衡控制器========<br />
            worker.controller.type=lb<br />
            worker.controller.balanced_workers=tomcat1,tomcat2&nbsp;&nbsp; #指定分担请求的tomcat<br />
            worker.controller.sticky_session=1<br />
            </p>
            </td>
        </tr>
    </tbody>
</table>
<br />
4.在httpd.conf的最后一行引入上边配置的文件：Include conf/mod_jk.conf，注意此文件尽量不要使用绝对路径。<br />
5.修改tomcat：如果多个tomcat不在同一台机器，则不用修改。否则保持第一个tomcat 的配置不变，只需在server.xml文件中改动&nbsp;&lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"&gt;，指定jvmRoute，为了在works.properties中调用，修改其他的tomcat的配置，修改server.xml文件的&lt;Server port="8005" shutdown="SHUTDOWN"&gt;的端口号，为了使多个tomcat同时启动；修改&lt;Engine name="Catalina" defaultHost="localhost" &gt;为&lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"&gt;，并修改&nbsp;&lt;Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /&gt;AJP的端口号。<br />
6到这基本上已经配置完了，在多个tomcat中部署同一个应用测试下效果，如果文件较大，访问数较多后就会发现tomcat是轮流执行，并关掉其他tomcat后在只保留一个的情况下同样能够正常访问，实现在负载均衡和容错机制。<br />
<span style="color: red">问题：<br />
1.apache怎么知道tomcat 的位置?在works.properties中并没有指定tomcat 所在的位置,他是通过什么找到tomcat的？<br />
2.AJP？<br />
3.关于tomcat的集群配置问题随后补上</span>
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/283637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-06-22 18:36 <a href="http://www.blogjava.net/J2EEHOME/archive/2009/06/22/283637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache HTTP Server 与 Tomcat 的三种连接方式介绍</title><link>http://www.blogjava.net/J2EEHOME/archive/2009/06/22/283613.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Mon, 22 Jun 2009 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/archive/2009/06/22/283613.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/283613.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/archive/2009/06/22/283613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/283613.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/283613.html</trackback:ping><description><![CDATA[<blockquote>整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能、利用 Web 服务器来做负载均衡以及容错、无缝的升级应用程序。本文介绍了三种整合 Apache 和 Tomcat 的方式。</blockquote><!--start RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--end RESERVED FOR FUTURE USE INCLUDE FILES-->
<p>首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接。事实上 Tomcat 本身已经提供了 HTTP 服务，该服务默认的端口是 8080，装好 tomcat 后通过 8080 端口可以直接使用 Tomcat 所运行的应用程序，你也可以将该端口改为 80。</p>
<p>既然 Tomcat 本身已经可以提供这样的服务，我们为什么还要引入 Apache 或者其他的一些专门的 HTTP 服务器呢？原因有下面几个：</p>
<p>1. 提升对静态文件的处理性能</p>
<p>2. 利用 Web 服务器来做负载均衡以及容错</p>
<p>3. 无缝的升级应用程序</p>
<p>这三点对一个 web 网站来说是非常之重要的，我们希望我们的网站不仅是速度快，而且要稳定，不能因为某个 Tomcat 宕机或者是升级程序导致用户访问不了，而能完成这几个功能的、最好的 HTTP 服务器也就只有 apache 的 http server 了，它跟 tomcat 的结合是最紧密和可靠的。</p>
<p>接下来我们介绍三种方法将 apache 和 tomcat 整合在一起。</p>
<p><a name="N10058"><span class="atitle">JK</span></a></p>
<p>这是最常见的方式，你可以在网上找到很多关于配置JK的网页，当然最全的还是其官方所提供的文档。JK 本身有两个版本分别是 1 和 2，目前 1 最新的版本是 1.2.19，而版本 2 早已经废弃了，以后不再有新版本的推出了，所以建议你采用版本 1。</p>
<p>JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的，Tomcat 默认的 AJP Connector 的端口是 8009。JK 本身提供了一个监控以及管理的页面 jkstatus，通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat 的连接进行设置，如下图所示：</p>
<br />
<a name="N10066"><strong>图 1：监控以及管理的页面 jkstatus</strong></a><br />
<img height="228" alt="图 1：监控以及管理的页面 jkstatus" src="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/images/image002.jpg" width="554" border="0" /> <br />
<p>在这个图中我们可以看到当前JK配了两个连接分别到 8109 和 8209 端口上，目前 s2 这个连接是停止状态，而 s1 这个连接自上次重启后已经处理了 47 万多个请求，流量达到 6.2 个 G，最大的并发数有 13 等等。我们也可以利用 jkstatus 的管理功能来切换 JK 到不同的 Tomcat 上，例如将 s2 启用，并停用 s1，这个在更新应用程序的时候非常有用，而且整个切换过程对用户来说是透明的，也就达到了无缝升级的目的。关于 JK 的配置文章网上已经非常多了，这里我们不再详细的介绍整个配置过程，但我要讲一下配置的思路，只要明白了配置的思路，JK 就是一个非常灵活的组件。</p>
<p>JK 的配置最关键的有三个文件，分别是 </p>
<p><strong>httpd.conf </strong><br />
Apache 服务器的配置文件，用来加载 JK 模块以及指定 JK 配置文件信息</p>
<p><strong>workers.properties</strong> <br />
到 Tomcat 服务器的连接定义文件</p>
<p><strong>uriworkermap.properties</strong> <br />
URI 映射文件，用来指定哪些 URL 由 Tomcat 处理，你也可以直接在 httpd.conf 中配置这些 URI，但是独立这些配置的好处是 JK 模块会定期更新该文件的内容，使得我们修改配置的时候无需重新启动 Apache 服务器。</p>
<p>其中第二、三个配置文件名都可以自定义。下面是一个典型的 httpd.conf 对 JK 的配置</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode"># (httpd.conf)
            # 加载 mod_jk 模块
            LoadModule jk_module modules/mod_jk.so
            #
            # Configure mod_jk
            #
            JkWorkersFile conf/workers.properties
            JkMountFile conf/uriworkermap.properties
            JkLogFile logs/mod_jk.log
            JkLogLevel warn
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>接下来我们在 Apache 的 conf 目录下新建两个文件分别是 workers.properties、uriworkermap.properties。这两个文件的内容大概如下</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">#
            # workers.properties
            #
            # list the workers by name
            worker.list=DLOG4J, status
            # localhost server 1
            # ------------------------
            worker.s1.port=8109
            worker.s1.host=localhost
            worker.s1.type=ajp13
            # localhost server 2
            # ------------------------
            worker.s2.port=8209
            worker.s2.host=localhost
            worker.s2.type=ajp13
            worker.s2.stopped=1
            worker.DLOG4J.type=lb
            worker.retries=3
            worker.DLOG4J.balanced_workers=s1, s2
            worker.DLOG4J.sticky_session=1
            worker.status.type=status
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>以上的 workers.properties 配置就是我们前面那个屏幕抓图的页面所用的配置。首先我们配置了两个类型为 ajp13 的 worker 分别是 s1 和 s2，它们指向同一台服务器上运行在两个不同端口 8109 和 8209 的 Tomcat 上。接下来我们配置了一个类型为 lb（也就是负载均衡的意思）的 worker，它的名字是 DLOG4J，这是一个逻辑的 worker，它用来管理前面配置的两个物理连接 s1 和 s2。最后还配置了一个类型为 status 的 worker，这是用来监控 JK 本身的模块。有了这三个 worker 还不够，我们还需要告诉 JK，哪些 worker 是可用的，所以就有 <strong>worker.list = DLOG4J, status</strong> 这行配置。</p>
<p>接下来便是 URI 的映射配置了，我们需要指定哪些链接是由 Tomcat 处理的，哪些是由 Apache 直接处理的，看看下面这个文件你就能明白其中配置的意义</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">/*=DLOG4J
            /jkstatus=status
            !/*.gif=DLOG4J
            !/*.jpg=DLOG4J
            !/*.png=DLOG4J
            !/*.css=DLOG4J
            !/*.js=DLOG4J
            !/*.htm=DLOG4J
            !/*.html=DLOG4J
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>相信你已经明白了一大半了：所有的请求都由 DLOG4J 这个 worker 进行处理，但是有几个例外，/jkstatus 请求由 status 这个 worker 处理。另外这个配置中每一行数据前面的感叹号是什么意思呢？感叹号表示接下来的 URI 不要由 JK 进行处理，也就是 Apache 直接处理所有的图片、css 文件、js 文件以及静态 html 文本文件。</p>
<p>通过对 workers.properties 和 uriworkermap.properties 的配置，可以有各种各样的组合来满足我们前面提出对一个 web 网站的要求。您不妨动手试试！</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br />
            <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table class="no-print" cellspacing="0" cellpadding="0" align="right">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br />
                        </td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html#main" cmimpressionsent="1"><strong>回页首</strong></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<p><a name="N100C4"><span class="atitle">http_proxy</span></a></p>
<p>这是利用 Apache 自带的 mod_proxy 模块使用代理技术来连接 Tomcat。在配置之前请确保是否使用的是 2.2.x 版本的 Apache 服务器。因为 2.2.x 版本对这个模块进行了重写，大大的增强了其功能和稳定性。</p>
<p>http_proxy 模式是基于 HTTP 协议的代理，因此它要求 Tomcat 必须提供 HTTP 服务，也就是说必须启用 Tomcat 的 HTTP Connector。一个最简单的配置如下</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">ProxyPass /images !
            ProxyPass /css !
            ProxyPass /js !
            ProxyPass / http://localhost:8080/
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>在这个配置中，我们把所有 http://localhost 的请求代理到 http://localhost:8080/ ，这也就是 Tomcat 的访问地址，除了 images、css、js 几个目录除外。我们同样可以利用 mod_proxy 来做负载均衡，再看看下面这个配置</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">ProxyPass /images !
            ProxyPass /css !
            ProxyPass /js !
            ProxyPass / balancer://example/
            &lt;Proxy balancer://example/&gt;
            BalancerMember http://server1:8080/
            BalancerMember http://server2:8080/
            BalancerMember http://server3:8080/
            &lt;/Proxy&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>配置比 JK 简单多了，而且它也可以通过一个页面来监控集群运行的状态，并做一些简单的维护设置。</p>
<br />
<a name="N100EA"><strong>图 2：监控集群运行状态</strong></a><br />
<img height="427" alt="图 2：监控集群运行状态" src="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/images/image004.gif" width="553" border="0" /> <br />
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br />
            <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table class="no-print" cellspacing="0" cellpadding="0" align="right">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br />
                        </td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html#main" cmimpressionsent="1"><strong>回页首</strong></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<p><a name="N100FA"><span class="atitle">ajp_proxy</span></a></p>
<p>ajp_proxy 连接方式其实跟 http_proxy 方式一样，都是由 mod_proxy 所提供的功能。配置也是一样，只需要把 http:// 换成 ajp:// ，同时连接的是 Tomcat 的 AJP Connector 所在的端口。上面例子的配置可以改为：</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">ProxyPass /images !
            ProxyPass /css !
            ProxyPass /js !
            ProxyPass / balancer://example/
            &lt;Proxy balancer://example/&gt;
            BalancerMember ajp://server1:8080/
            BalancerMember ajp://server2:8080/
            BalancerMember ajp://server3:8080/
            &lt;/Proxy&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>采用 proxy 的连接方式，需要在 Apache 上加载所需的模块，mod_proxy 相关的模块有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.so， 其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加载 mod_proxy.so 和 mod_proxy_http.so；如果是 ajp_proxy 则需要加载 mod_proxy.so 和 mod_proxy_ajp.so这两个模块。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br />
            <img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table class="no-print" cellspacing="0" cellpadding="0" align="right">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br />
                        </td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html#main" cmimpressionsent="1"><strong>回页首</strong></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<p><a name="N1010F"><span class="atitle">三者比较</span></a></p>
<p>相对于 JK 的连接方式，后两种在配置上是比较简单的，灵活性方面也一点都不逊色。但就稳定性而言就不像 JK 这样久经考验，毕竟 Apache 2.2.3 推出的时间并不长，采用这种连接方式的网站还不多，因此，如果是应用于关键的互联网网站，还是建议采用 JK 的连接方式。</p>
<br />
<br />
<p><a name="resources"><span class="atitle">参考资料 </span></a></p>
<ul>
    <li>获得 <a href="http://httpd.apache.org/" cmimpressionsent="1">Apache Http Server</a>。 <br />
    <br />
    <li>获得 <a href="http://tomcat.apache.org/" cmimpressionsent="1">Apache Tomcat</a>。 <br />
    <br />
    <li><a href="http://tomcat.apache.org/connectors-doc/" cmimpressionsent="1">JK 文档</a>。 </li>
</ul>
<br />
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/283613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-06-22 17:08 <a href="http://www.blogjava.net/J2EEHOME/archive/2009/06/22/283613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>