??xml version="1.0" encoding="utf-8" standalone="yes"?>一区二区三区日韩,爽好久久久欧美精品,国产一区二区三区综合 http://www.aygfsteel.com/J2EEHOME/category/40417.htmlOne Target,One Dreamzh-cnFri, 02 Apr 2010 19:32:35 GMTFri, 02 Apr 2010 19:32:35 GMT60W三ơApache tomcat集群ȝhttp://www.aygfsteel.com/J2EEHOME/archive/2009/08/04/289826.htmlJ2EE Home工作?/dc:creator>J2EE Home工作?/author>Tue, 04 Aug 2009 10:32:00 GMThttp://www.aygfsteel.com/J2EEHOME/archive/2009/08/04/289826.htmlhttp://www.aygfsteel.com/J2EEHOME/comments/289826.htmlhttp://www.aygfsteel.com/J2EEHOME/archive/2009/08/04/289826.html#Feedback2http://www.aygfsteel.com/J2EEHOME/comments/commentRss/289826.htmlhttp://www.aygfsteel.com/J2EEHOME/services/trackbacks/289826.html      W一ơ做集群时架好后在启?span lang="EN-US">tomcat时报了一大堆错误Q内存溢出呗。我q闷了怎么会出现这样错误,服务器配|是4G内存Q查了一通资料,发现原来tomcat在启动时要加载已l编译好?span lang="EN-US">.class文gQ默认内存区大小?span lang="EN-US">128MQ如果文件较多,q个错误也是必然的。咋办?调内存呗Q我的几?span lang="EN-US">tomcat都是以服务Ş式安装的Q整得我要改注册表,改q个地方QHKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat62\Parameters\Java
然后调整里边JavaMs?span lang="EN-US">JavaMx的|前者表C行时加蝲的最内存,后者表C可利用的最大内存,单位?span lang="EN-US">MQ要换到十进制下L。这个问题搞了三个周才找到解军_法,W一ơ就败在此处Q?span lang="EN-US">
    W二ơ什么错误是其中一台机器上tomcat启动报错Unable to start cluster. org.apache.catalina.tribes.ChannelException: java.net.SocketException: error set ting options; No faulty members identified. Q搞了一天没有找到解军_法,弃之Q那位仁兄如果有解决办法Ƣ迎赐教Q?span lang="EN-US">
    W三ơ集方式和前两ơ没什么区别,都是采用http_proxy形式作ؓApache?span lang="EN-US">tomcat之间q接的桥梁,q次把成功的配置详细的说明下Q?span lang="EN-US">
1.Lapache?span lang="EN-US">httpd.conf目录中以下几行的注释

#change here start
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

 #end

# Virtual hosts

# change here two step 是L了注释,主要用于配置虚拟机文?span lang="EN-US">
Include conf/extra/httpd-vhosts.conf

2. ?span lang="EN-US">httpd.conf最下边加上q些东东

ProxyRequests Off

<proxy balancer://cluster>

BalancerMember ajp://192.168.0.22:9001 loadfactor=1 route=jvm3

BalancerMember ajp://192.168.0.22:9003 loadfactor=1 route=jvm4

BalancerMember ajp://192.168.0.22:9090 loadfactor=1 route=jvm5

</proxy>

 

ProxyRequests Off

<proxy balancer://cluster2>

BalancerMember ajp://192.168.0.1:8009 loadfactor=1 route=jvm1

</proxy>

 

ProxyRequests Off

<proxy balancer://cluster3>

BalancerMember ajp://192.168.0.1:9009 loadfactor=1 route=jvm2

</proxy>


具体什么意思就不说了,W一行表格是做集用Q下边两个仅作ؓ负蝲均衡之用Q可以说没均衡负蝲Qؓ啥?׃?span lang="EN-US">tomcat你做什么负载啊Q呵c重点关注这?/span>

<proxy balancer://cluster2>

Cluster2 才是关键所在,他表CZ你的站点要在那个集内做负蝲均衡或者集,我们q里用到了集和负蝲均衡Q其实就是一回事说白了,?/span> cluster 做集, cluster2 ?/span> cluster3 仅做负蝲均衡之用Q不?/span> session 复制和绘M持?/span>

2 下边我们看下 extra 目录?/span> httpd-vhosts.conf 文g的修改吧

以上边说?/span> cluster,cluster2,cluster3 Z各配|一个虚拟机

<VirtualHost *:80>

        ServerAdmin cxccma@163.com

        ServerName *****.com

        ServerAlias www.*****.com

         ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On

         ProxyPassReverse / balancer://cluster/

</VirtualHost>

<VirtualHost *:80>

         ServerAdmin cxccma@163.com

         ServerName *****.cn

         ServerAlias www. *****.cn

         ProxyPass / balancer://cluster2/

         ProxyPassReverse / balancer://cluster2/

</VirtualHost>

<VirtualHost *:80>

         ServerAdmin cxccma@163.com

         ServerName *****.com

         ServerAlias www. *****.com

         ProxyPass / balancer://cluster3/

         ProxyPassReverse / balancer://cluster3/

</VirtualHost>

以上明白了,是说是三个站点分别在不同的集内,Z么要q样做?主要是因为我们前期用的是 tomcat5.5 版本的,后期开发中友用C 6.x 版本的,所以整了两个群集以兼容前期和后期的站点Q当然如果你需要在 cluster2, 或?/span> cluster3 中再加一?/span> tomcat 做负载均衡用 ,OK, 很简单,直接复制下就可以

3.apache 说完了,接下来说?/span> tomcat ?/span>

Tomcat 中不用做什么大的改动,首先?/span> server.xml 文g中部|你的虚拟主机啊

<Host name="www.******.com" appBase="webapps"

       unpackWARs="true" autoDeploy="true"

       xmlValidation="false" xmlNamespaceAware="false">

               <Context path="" docBase="D:\lejie"

         debug= "0" reloadable="false" crossContext="false" verbosity="DEBUG">

     </Context>

</Host>

OK Q如果需要做全局集群Q那׃?/span> content.xml 文g?/span> Context 元素Q加上这句就?/span>

distributable="true"

或者在单独的文件中?/span> web.xml 文g中加入这句话

< distributable/>

到这应该都说完了吧,谈下个h的想法: apache ?/span> tomcat 有三U连接方法: JK Q?/span> mod_proxy,http_proxy Q前两者的配置都是繁琐,在可l护性和模块化上也没什么优点,我一直用W三U连接方法,采用 AJP 直连Q?/span> AJP1.3 在连接上表现出明昄优点Q所以我也徏议采用第三种q接?/span>

是一个工作ȝ吧,Ƣ迎各位不吝赐教Q如果有什么疑问请通过以下方式联系本h



]]>
Windowsq_上的Apache+Tomcat配置指南http://www.aygfsteel.com/J2EEHOME/archive/2009/06/30/284733.htmlJ2EE Home工作?/dc:creator>J2EE Home工作?/author>Tue, 30 Jun 2009 02:51:00 GMThttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/30/284733.htmlhttp://www.aygfsteel.com/J2EEHOME/comments/284733.htmlhttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/30/284733.html#Feedback0http://www.aygfsteel.com/J2EEHOME/comments/commentRss/284733.htmlhttp://www.aygfsteel.com/J2EEHOME/services/trackbacks/284733.html本文主要讲述如何在windowsq_上搭Z个用于javaq_的web服务器过E?br />     整个q程中用到的软g包括QApache的http服务器、JDK6、Tomcat 6、mod_jk。实现的目标是配|完成一个由Apache担当80端口的web服务器,Tomcat担QJava的Web应用容器Q两者通过mod_jk的连接完成对外提供服务的工作。现在我们开始配|过E:
    1、下载Apache的http服务?br />     下蝲地址Qhttp://httpd.apache.orgQ在本文~写Ӟhttpd的服务器当前最新发行版本是2.2.11Q我们称2.2版本Q,我们选在windowsq_的二q制版本下蝲Q我们最好选择Win32 Binary including OpenSSL 0.9.8i (MSI Installer) Q因个版本只是SSLQ也怽来需要提供SSL的功能,所以这里有备无患?br />     2、安装Apache的http服务?br />     q个步骤的Q务非常简单,对于windowsq_Q你只需要按照安装向g步一步完成安装Q务就可以了,在过E你可以会被要求填写一些信息,比如服务器的域名Q你可以Ҏ你的服务器实际的域名填写Q如果你只是试Qƈ没有甌q域名的话,你可以随便填写一个)Q管理员的电子邮件等{。在q个q程中记住你的Y件的安装目录Q接下来的步骤中我们会用到q个目录。我们将q个安装q程中的每一步截图记录如下:

 

 

 





    3、下载安装JDK6
    下蝲地址Qhttp://java.sun.com/javase/downloads/?intcmp=1281Q下载Java SE Development Kit (JDK) 6 Update 11?br />     安装JDK的过E非常简单,你只需要依ơ下一步就可以完成d了,安装q程注意选择安装目录Q我们这里假讑֮装目录ؓd:\java\jdk1.6?br />     4、下载Tomcat 6
    下蝲地址Qhttp://tomcat.apache.org/download-60.cgiQ选择windowsq_的tomcat软gQ你可以选在Windows Service Installer 版本?br />     5、安装Tomcat 6
    q个q程中也是近乎傻瓜型的,q里Tomcat 6的安装过E截囑֦下:

 

 

 

 

 




    6、下载和配置mod_jk
    下蝲地址Qhttp://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.27/mod_jk-1.2.27-httpd-2.2.10.soQ这里大安要注意一点,你应该更具你的apache的版本来选择mod_jk的版本。当你现在so文g之后Q接下来的Q务就是要so模块配置到apache服务器当中去?br />     首先mod_jk-1.2.27-httpd-2.2.10.so复制到apache的安装目录中modules目录中,你会在这个目录(C:\Program Files\Apache Software Foundation\Apache2.2\modulesQ中看到很多的so文g。然后打开apache的配|文ӞC:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.confQ,在其中找到包含LoadModule字样的内容,在这些内容的下方d一个新的LoadModuleQ其目的是ؓ了给Apache增加一个新的模块功能,q个模块是mod_jkQ它的目的是Z让apache能够和tomcatq行协作。在LoadModule下方d如下一行内容:
    LoadModule   jk_module   modules/mod_jk-1.2.27-httpd-2.2.10.so
    mod_jk模块要正工作,必须知道被它操控的tomcat服务器在哪里Q而这个内定w要被配置在另外一个文件中Q现在我们将q个文g命名为workers.propertiesQ将q个文g攑֜httpd.conf相同的地方(当然你可以放在Q何你希望的地方)Q文件中的内容如下:
ps=\
worker.list=ojava
worker.ojava.port=8009
worker.ojava.type=ajp13
worker.ojava.host=localhost
worker.ojava.lbfactor=1
    有了q个配置文g之后Q我们必要告诉mod_jkq个文g的存在,所以需要再ơ打开httpd.conf文gQ在我们刚刚d的LoadModuleq一行的下方d如下一行内容:
    JkworkersFile  conf/workers.properties
    好了Q现在你已经完成了apache和tomcat的通讯方式和参数的配置Q接下来需要做的就是配|哪个web应用需要由apache转交ltomcatq行处理Q我们以虚拟LZQ?br /> 我们为apache增加新的虚拟L的配|,首先修改httpd.conf的配|,扑ֈ#Include conf/extra/httpd-vhosts.confQ将q一行前面的#去除掉,让这一行的配置生效。然后我们找到配|文件中如下的内容:
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
其修改为如下的内容Q?br /> <Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
其目的是Zlapache配置虚拟LQ指定其他目录作为web|站的目录时产生无权讉K的错误?br />     接着打开C:\Program Files\Apache Software Foundation\Apache2.2\conf\extra\httpd-vhosts.confQ去掉里面已l配|的虚拟L部分的内容,如下所C:
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.ojava.net
    DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host.ojava.net"
    ServerName dummy-host.ojava.net
    ServerAlias www.dummy-host.ojava.net
    ErrorLog "logs/dummy-host.ojava.net-error.log"
    CustomLog "logs/dummy-host.ojava.net-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.ojava.net
    DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/docs/dummy-host2.ojava.net"
    ServerName dummy-host2.ojava.net
    ErrorLog "logs/dummy-host2.ojava.net-error.log"
    CustomLog "logs/dummy-host2.ojava.net-access.log" common
</VirtualHost>
d我们自己配置的信息,配置内容如下Q?br /> <VirtualHost *:80>
    ServerAdmin steven@ojava.net
    DocumentRoot "e:/ojava/web_root"
    ServerName www.ojava.net

    JkMount  /*  ojava

    ErrorLog "logs/www.ojava.net-error.log"
    CustomLog "logs/www.ojava.net-access.log" common
</VirtualHost>
到这里我们已l将对www.ojava.net域名|站的访问请求{交给了tomcatq行处理了。此时如果你需要在tomcat中进行虚拟主机的配置Q那么你可以l箋修改tomcat的配|文Ӟ如果你不需要,那么到这里,你已l完成了所以的配置q程。恭喜你Q现在重新启动apache和tomcatQ可以测试了Q成功了吗?有问题欢q交?/p>

本文转蝲http://blog.csdn.net/stevencn76/archive/2008/12/22/3584925.aspx



]]>
tomcat 非root启动http://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284409.htmlJ2EE Home工作?/dc:creator>J2EE Home工作?/author>Sat, 27 Jun 2009 08:47:00 GMThttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284409.htmlhttp://www.aygfsteel.com/J2EEHOME/comments/284409.htmlhttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284409.html#Feedback0http://www.aygfsteel.com/J2EEHOME/comments/commentRss/284409.htmlhttp://www.aygfsteel.com/J2EEHOME/services/trackbacks/284409.html# addusr tomcat
# chown -R tomcat:tomcat /usr/local/tomcat
-------------------------------------
#vi /etc/rc.local
在最后加入:
su - tomcat -c '/usr/local/tomcat/bin/startup.sh'
------------------------------------
REBOOT试试QJSP用ROOT启动不安全的问题解决?br />
su - tomcat -c '/usr/local/tomcat/bin/shutdown.sh' ‘tomcat停止命o


]]>
Tomcat 6.18 Virtual Hosthttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284408.htmlJ2EE Home工作?/dc:creator>J2EE Home工作?/author>Sat, 27 Jun 2009 08:46:00 GMThttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284408.htmlhttp://www.aygfsteel.com/J2EEHOME/comments/284408.htmlhttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284408.html#Feedback0http://www.aygfsteel.com/J2EEHOME/comments/commentRss/284408.htmlhttp://www.aygfsteel.com/J2EEHOME/services/trackbacks/284408.html
conf/server.xml
 
<Engine name="Catalina" defaultHost="localhost">
 
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

</Host>

<Host name=" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

</Host>

<Host name="
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

</Host>
 
 
conf/Catalina/localhost/ROOT.xml:
    <Context path="" reloadable="false" docBase="" workDir="/tmp/tomcat" />

conf/Catalina/www.host01.com/ROOT.xml
    <Context path="" reloadable="false" docBase="" workDir="/tmp/host01" />

conf/Catalina/www.host02.com/ROOT.xml
<Context path="" reloadable="false" docBase="" workDir="/tmp/host02" />
 
 
 
 
参?www.ex-parrot.com/~pete/tomcat-vhost.html


]]>
Apache Java Tomcat Proxy-ajp(Linux)整合http://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284407.htmlJ2EE Home工作?/dc:creator>J2EE Home工作?/author>Sat, 27 Jun 2009 08:44:00 GMThttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284407.htmlhttp://www.aygfsteel.com/J2EEHOME/comments/284407.htmlhttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284407.html#Feedback0http://www.aygfsteel.com/J2EEHOME/comments/commentRss/284407.htmlhttp://www.aygfsteel.com/J2EEHOME/services/trackbacks/284407.html
前言Q?
安装软gQ?br /> 1. jdk-1_5_0_06-linux-i586.bin
2. httpd-2.2.0.tar.gz
3. apache-tomcat-6.0.13.tar.gz
q且攄?usr/local目录下?br />
一、安装JDK
大家从网上下载的JDK的LINUX版本一般是bin格式

1. 使bin文g可执行?
[root@localhost local]# chmod +x jdk-1_5_0_06-linux-i586.bin

2. 安装
[root@localhost loacl]# ./ jdk-1_5_0_06-linux-i586.bin

3. Z操作单,有必要ؓ刚刚安装的jdk1.5.0_06建立一个JDK的同步目?
[root@localhost local]# ln -s jdk1.5.0_06 jdk

4. 讄环境变量JAVA_HOMEQ这个变量会在后面的Tomcat中用刎ͼ?
[root@localhost local]# vi /etc/profile
在该文g的末֊上下面两?
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
保存退?

5. 验证该变量的讄。如果感觉安装顺利的话,可以跌此步?
[root@localhost local]# echo $JAVA_HOME
大家会发现返回的是空?
不要惊慌Q退出去重新dpȝ可以了
或者执行命令是环境变量立即生效
[root@localhost local]source /etc/profile
[root@localhost /]# echo $JAVA_HOME
/usr/ local /jdk
[root@localhost /]java –version
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
如果q回q行Q就说明讄成功。至此您的JDK安装完毕?

二、安装Tomcat
Tomcat的安装比较简单,解压后运行即可?

1. 安装包拯?usr/local目录下安装,
[root@localhost local]# tar -zxvf apache-tomcat-6.0.13.tar.gz

2. 压后得到的apache-tomcat-6.0.13创徏一个名为tomcat的同步目录?
[root@localhost local]# ln -s apache-tomcat-6.0.13 tomcat

3. 讄环境变量CATALINA_HOMEQƈ验证
[root@localhost local]# vi /etc/profile
在文件最后加入如下一?
export CATALINA_HOME=/usr/local/tomcat
保存退?
验证CATALINA_HOME的过E跟上面验证JAVA_HOME的过E相同?

4. 启动q测试安装结?
[root@localhost local]# cd ./tomcat/bin
[root@localhost bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JAVA_HOME: /usr/java/jdk
[root@localhost bin]# netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.254:53 0.0.0.0:* LISTEN
tcp 0 0 192.168.2.254:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN
tcp 0 0 :::8009 :::* LISTEN
tcp 0 0 :::8080 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN

port 8080 and 8009已经LISTEN?

6.打开览器,敲入L地址和端口号8080,回R
如:http://192.168.1.254:8080/
如果出现如下画面则说明,安装成功?/div>
 
从http://www.apache.org的网站上下蝲apache-2.2.0的源代码。apache-2.2.0的版本做了些改动大家需要注意一下。首先apr和apr-util需要单独的安装Q还有配|文件由原来的一个变为现在的多个不过q样也好Q可以清楚的知道那部分配|在那个配置文g里方便修攏V安装步骤如下:

解压apache的源代码
# tar xvjf httpd-2.2.0.tar.bz2
# cd httpd-2.2.0

安装apr
# cd srclib/apr
# ./configure --prefix=/server/soft/apr
# make
# make install

安装apr-util
# cd ../apr-util/
# ./configure --prefix=/server/soft/apr-util \
    --with-apr=/server/soft/apr
# make
# make install
# cd ../../

安装apache
# ./configure --prefix=/server/soft/apache \
    --enable-so \
    --enable-rewrite=share \
    --enable-proxy=share \
    --enable-proxy-ajp=share \
    --enable-dav=share \
    --with-apr=/server/soft/apr \
    --with-apr-util=/server/soft/apr-util/
# make
# make install

# /server/soft/apache/bin/httpd -l //看看是否有proxy-ajpq个模块
如果有这个模块证明proxy-ajp模块安装成功Q可以进行与tomcat的结合了?br />
# vi /server/soft/apache/conf/httpd.conf
?#Include conf/extra/httpd-vhosts.conf" 前面?#"L然后~辑
/server/soft/apache/conf/extra/httpd-vhosts.conf

~辑为如下的代码
<VirtualHost *:80>
    ServerAdmin admin@easyea.com
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/
    ServerName localhost
    ServerAlias www.easyea.com
    ErrorLog logs/easyea.com-error_log
    CustomLog logs/easyea.com-access_log common
</VirtualHost>

然后先启动tomcatQ再启动apache
# /server/soft/apache/bin/apachctl start
打开览器看看是否看Ctomcat的欢q页面,如果是说明apache和tomcat的结合成?


]]>
Tomcat集群Cluster实现原理剖析http://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284405.htmlJ2EE Home工作?/dc:creator>J2EE Home工作?/author>Sat, 27 Jun 2009 08:28:00 GMThttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284405.htmlhttp://www.aygfsteel.com/J2EEHOME/comments/284405.htmlhttp://www.aygfsteel.com/J2EEHOME/archive/2009/06/27/284405.html#Feedback0http://www.aygfsteel.com/J2EEHOME/comments/commentRss/284405.htmlhttp://www.aygfsteel.com/J2EEHOME/services/trackbacks/284405.html
引自Q?a >http://zyycaesar.javaeye.com/blog/296606
 
对于WEB应用集群的技术实现而言Q最大的隄是如何能在集群中的多个节点之间保持数据的一致性,会话QSessionQ信息是q些数据中最重要的一块。要实现q一点,大体上有两种方式Q一U是把所有Session数据攑ֈ一台服务器上或者数据库中,集群中的所有节炚w过讉Kq台Session服务器来获取数据Q另一U就是在集群中的所有节炚wq行Session数据的同步拷贝,M一个节点均保存了所有的Session数据。两U方式都各有优点Q第一U方式简单、易于实玎ͼ但是存在着Session服务器发生故障会D全系l不能正常工作的风险Q第二种方式可靠性更高,M节点的故障不会对整个pȝ对客戯问的响应产生影响Q但是技术实C更复杂一些。常见的q_或中间g如microsoft asp.net和IBM WAS都会提供对两U共享方式的支持Q?span class="hilite1">tomcat也是q样Q但是一般采用第二种方式?

 

     当采?span class="hilite1">tomcat默认集群配置Q?lt;Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>Q时Q配|的l节实际上被省略了,对于大多数应用而言Q用默认配|已l够,完整的默认配|应该是q样Q?/p>

 

     <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster

 

     下面W者对q里的配|项作详l解释,以下内容均是W者阅Mtomcat官方文档后自q理解Q有些可能不对,希望读者能带着批判的眼光阅读,q欢q指正笔者错误?/p>

    

     tomcat集群各节炚w过建立tcp链接来完成Session的拷贝,拯有同步和异步两种模式。在同步模式下,对客L的响应必dSession拯到其他节点完成后q行Q异步模式无需{待Session拯完成可响应。异步模式更高效Q但是同步模式可靠性更高。同步异步模式由channelSendOptions参数控制Q默认值是8Qؓ异步模式Q?是同步模式。在异步模式下,可以通过加上拯认QAcknowledgeQ来提高可靠性,此时channelSendOptions设ؓ10?/p>

 

     Manager用来在节炚w拯SessionQ默认用DeltaManagerQDeltaManager采用的一Uall-to-all的工作方式,即集中的节点会把Session数据向所有其他节Ҏ贝,而不其他节Ҏ否部|了当前应用。当集群中的节点数量很多q且部v着不同应用Ӟ可以使用BackupManagerQBackManager仅向部v了当前应用的节点拯Session。但是到目前为止BackupManagerq未l过大规模测试,可靠性不及DeltaManager?/p>

 

     Channel负责?span class="hilite1">tomcat集群的IO层进行配|。Membership用于发现集群中的其他节点Q这里的address用的是组播地址QMulticast addressQ了解更多组播地址详情请参?a >http://zyycaesar.javaeye.com/admin/blogs/296501Q,使用同一个组播地址和端口的多个节点同属一个子集群Q因此通过自定义组播地址和端口就可将一个大?span class="hilite1">tomcat集群分成多个子集。Receiver用于各个节点接收其他节点发送的数据Q在默认配置?span class="hilite1">tomcat会从4000-4100间依ơ选取一个可用的端口q行接收Q自定义配置Ӟ如果多个tomcat节点在一台物理服务器上注意要使用不同的端口。Sender用于向其他节点发送数据,具体实现通过Transport配置QPooledParallelSender是从tcpq接池中获取q接Q可以实现ƈ行发送,即集中的多个节点可以同时向其他所有节点发送数据而互不媄响。Interceptor有点cM下面要解释的ValveQvC个阀门的作用Q在数据到达目的节点前进行检或其他操作Q如TcpFailureDetector用于在数据的传输过E中是否发生了tcp错误。关于Channel的编E模型,请参?a >http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/tribes/Channel.html?/p>

 

     Valve用于在节点向客户端响应前q行或q行某些操作QReplicationValve是用于用于当前的响应是否涉及Session数据的更斎ͼ如果是则启动Session拯操作Qfilter用于qohQ如客户端对囄QcssQjs的请求就不会涉及SessionQ因此不需,默认状态下不进行过滤,监测所有的响应。JvmRouteBinderValve会在前端的Apache mod_jk发生错误时保证同一客户端的h发送到集群的同一个节点,tomcat官方文档q未解释如何实现q一点,而且W者认一讄gq无多大实用性?/p>

 

     Deployer用于集群的farm功能Q监控应用中文g的更斎ͼ以保证集中所有节点应用的一致性,如某个用户上传文件到集群中某个节点的应用E序目录下,Deployer会监到q一操作q把q一文g拯到集中其他节点相同应用的对应目录下以保持所有应用的一致。这是一个相当强大的功能Q不q很遗憾Q?span class="hilite1">tomcat集群目前q不能做到这一点,开发h员正在努力实现它Q这里的配置只是预留了一个接口?/p>

 

    Listener用于跟踪集群中节点发出和收到的数据,也有点类似Valve的功能?/p>

    在大体了解了tomcat集群实现模型后,可以对集群作出更优化的配置了,tomcat推荐了一套配|,使用了比DeltaManager更高效的BackupManagerQƈ且对ReplicationValve讄了请求过滤,注意在一台服务器部v多个节点旉要修改Receiver的侦听端口,另外Qؓ了更高效的在节点间拷贝数据,所?span class="hilite1">tomcat节点最好采用相同的配置Q具体配|如下:

 

     <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="6">

          <Manager className="org.apache.catalina.ha.session.BackupManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"
                   mapSendOptions="6"/>


          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="5000"
                      selectorTimeout="100"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

    

     Tomcat集群除了可以q行Session数据的拷贝,q可q行Context属性的拯Q通过修改context.xml的Context配置可以实现Q?lt;Context className="org.apache.catalina.ha.context.ReplicatedContext"/>替换默认Context卛_Q当然也可再加上distributable="true"属性?/p>

 

     下面通过假想的一l场景来描述tomcat集群如何工作Q集采用默认配|,由t1和t2两个tomcat例程l成Q场景按照时间顺序排列?/p>


1. t1启动

     t1按照标准?span class="hilite1">tomcat启动Q当Host对象被创建时Q一?span class="hilite2">Cluster对象Q默认配|下是SimpleTcpClusterQ也同时被关联到q个Host对象。当某个应用在web.xml中设|了distributableӞTomcatؓ此应用的上下文环境创Z个DeltaManager。SimpleTcpCluster启动membership服务和Replication服务Q用于徏立tcpq接Q?/p>


2. t2启动Q待t1启动完成后)
     首先t2会执行和t1一L操作Q然后SimpleTcpCluster会徏立一个由t1和t2l成的membership。接着t2向集中已启动的服务器即t1hSession数据Q如果t1没有响应t2的拷贝请求,t2会在60U后time out。在Session数据拯完成之前t2不会接收客户端的http或mod_jk/ajph?/p>


3. t1接收httphQ创建Session s1
     t1正常响应客户hQ但是在t1把结果发送回客户端时QReplicationValve会拦截当前请求(如果filter中配|了不需拦截的请求类型,q一步就不会q行Q默认配|下拦截所有请求)Q如果发现当前请求更CSessionQ调用Replication服务建立tcpq接把Session拯到membership列表中的其他节点即t2Q返回结果给客户端(注意Q如果采用同步拷贝,必须{拷贝完成后才会q回l果Q异步拷贝在数据发送到tcpq接p回结果,不等待拷贝完成)。在拯Ӟ所有保存在当前Session中的可序列化的对象都会被拯Q而不仅仅是发生更新的部分?/p>


4. t1崩溃
     当t1崩溃Ӟt2会被告知t1已从集群中退出,然后t2׃把t1从自qmembership列表中删除,发生在t2的Session更新不再往t1拯Q同时负载均衡器会把后箋的httph全部转发lt2。在此过E中所有的Session数据不会丢失?/p>


5. t2接收s1的请?br />      t2正常响应s1的请求,因ؓt2保存着s1的所有数据?/p>


6. t1重新启动
     按步??一L操作启动Q加入集,从t2拯所有Session数据Q拷贝完成后开放自qhttp和mod_jk/ajp端口接收h?/p>


7. t1接收hQs1失效
     t1l箋接收来自s1的请求,把s1讄期。这里的q期q因ؓs1处于非活动状态超q设|的旉Q而是执行cM注销的操作而引LSession失效。这时t1q发送s1的所有数据而是一个类似s1 expired的消息,t2收到消息后也会把s1设ؓq期?/p>


8. t2接收hQ创建Session s2
     和步?一栗?/p>


9. t1 s2q期
     对于因超时引LSession失效t1无需通知t2Q因为t2同样知道s2已经时。因此对?span class="hilite1">tomcat集群有一炚w帔R要,所有节点的操作pȝ旉必须一_不然会出现某个节点Session已过期而在另一节点此Session仍处于活动状态的现象?/p>



]]>
Apache server2.2.11+Tomcat6集群ȝQ一Q?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/J2EEHOME/archive/2009/06/22/283637.html</guid><wfw:comment>http://www.aygfsteel.com/J2EEHOME/comments/283637.html</wfw:comment><comments>http://www.aygfsteel.com/J2EEHOME/archive/2009/06/22/283637.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/J2EEHOME/comments/commentRss/283637.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/J2EEHOME/services/trackbacks/283637.html</trackback:ping><description><![CDATA[1.安装E序q行所需要的文gQJDK、Apache、Tomcat<br /> 2.另外q需要下载一个JK包,下蝲地址?a >http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28</a>Q这里需要的版本?a >mod_jk-1.2.28-httpd-2.2.3.so</a>  Q下载后其复制到apache安装目录的modules文g夹下Q可以不用改名?br /> 3.在httpd.conf所在的目录下新Z个文Ӟ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文g路径<br /> JkWorkersFile conf/workers.properties<br /> #指定那些h交给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  #server 列表</p> <p>#========tomcat1========<br /> worker.tomcat1.port=8009        #ajp13 端口P在tomcat下server.xml配置,默认8009<br /> worker.tomcat1.host=localhost  #tomcat的主机地址Q如不ؓ本机Q请填写ip地址<br /> worker.tomcat1.type=ajp13<br /> worker.tomcat1.lbfactor = 1   #server的加权比重,D高,分得的请求越?/p> <p>#========tomcat2========<br /> worker.tomcat2.port=9009       #ajp13 端口P在tomcat下server.xml配置,默认8009Q不要写成tomcat的端口号<br /> worker.tomcat2.host=localhost  #tomcat的主机地址Q如不ؓ本机Q请填写ip地址<br /> worker.tomcat2.type=ajp13<br /> worker.tomcat2.lbfactor = 1   #server的加权比重,D高,分得的请求越?/p> <p>#========controller,负蝲均衡控制?=======<br /> worker.controller.type=lb<br /> worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担h的tomcat<br /> worker.controller.sticky_session=1<br /> </p> </td> </tr> </tbody> </table> <br /> 4.在httpd.conf的最后一行引入上辚w|的文gQInclude conf/mod_jk.confQ注意此文g量不要使用l对路径?br /> 5.修改tomcatQ如果多个tomcat不在同一台机器,则不用修攏V否则保持第一个tomcat 的配|不变,只需在server.xml文g中改?nbsp;<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">Q指定jvmRouteQؓ了在works.properties中调用,修改其他的tomcat的配|,修改server.xml文g?lt;Server port="8005" shutdown="SHUTDOWN">的端口号Qؓ了多个tomcat同时启动Q修?lt;Engine name="Catalina" defaultHost="localhost" >?lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">Qƈ修改 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />AJP的端口号?br /> 6到这基本上已l配|完了,在多个tomcat中部|同一个应用测试下效果Q如果文件较大,讉K数较多后׃发现tomcat是轮执行,q关掉其他tomcat后在只保留一个的情况下同栯够正常访问,实现在负载均衡和定w机制?br /> <span style="color: red">问题Q?br /> 1.apache怎么知道tomcat 的位|?在works.properties中ƈ没有指定tomcat 所在的位置,他是通过什么找到tomcat的?<br /> 2.AJPQ?br /> 3.关于tomcat的集配|问题随后补?/span> <img src ="http://www.aygfsteel.com/J2EEHOME/aggbug/283637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/J2EEHOME/" target="_blank">J2EE Home工作?/a> 2009-06-22 18:36 <a href="http://www.aygfsteel.com/J2EEHOME/archive/2009/06/22/283637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache HTTP Server ?Tomcat 的三U连接方式介l?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/J2EEHOME/archive/2009/06/22/283613.html</guid><wfw:comment>http://www.aygfsteel.com/J2EEHOME/comments/283613.html</wfw:comment><comments>http://www.aygfsteel.com/J2EEHOME/archive/2009/06/22/283613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/J2EEHOME/comments/commentRss/283613.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/J2EEHOME/services/trackbacks/283613.html</trackback:ping><description><![CDATA[<blockquote>整合 Apache Http Server ?Tomcat 可以提升寚w态文件的处理性能、利?Web 服务器来做负载均衡以及容错、无~的升应用E序。本文介l了三种整合 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>首先我们先介l一下ؓ什么要?Apache ?Tomcat 之间q行q接。事实上 Tomcat 本n已经提供?HTTP 服务Q该服务默认的端口是 8080Q装?tomcat 后通过 8080 端口可以直接使用 Tomcat 所q行的应用程序,你也可以该端口改ؓ 80?/p> <p>既然 Tomcat 本n已经可以提供q样的服务,我们Z么还要引?Apache 或者其他的一些专门的 HTTP 服务器呢Q原因有下面几个Q?/p> <p>1. 提升寚w态文件的处理性能</p> <p>2. 利用 Web 服务器来做负载均衡以及容?/p> <p>3. 无缝的升U应用程?/p> <p>q三点对一?web |站来说是非怹重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因ؓ某个 Tomcat 宕机或者是升E序D用户讉K不了Q而能完成q几个功能的、最好的 HTTP 服务器也只?apache ?http server 了,它跟 tomcat 的结合是最紧密和可靠的?/p> <p>接下来我们介l三U方法将 apache ?tomcat 整合在一赗?/p> <p><a name="N10058"><span id="wmqeeuq" class="atitle">JK</span></a></p> <p>q是最常见的方式,你可以在|上扑ֈ很多关于配置JK的网,当然最全的q是其官Ҏ提供的文档。JK 本n有两个版本分别是 1 ?2Q目?1 最新的版本?1.2.19Q而版?2 早已l废弃了Q以后不再有新版本的推出了,所以徏议你采用版本 1?/p> <p>JK 是通过 AJP 协议?Tomcat 服务器进行通讯的,Tomcat 默认?AJP Connector 的端口是 8009。JK 本n提供了一个监控以及管理的面 jkstatusQ通过 jkstatus 可以监控 JK 目前的工作状态以及对?tomcat 的连接进行设|,如下图所C:</p> <br /> <a name="N10066"><strong>?1Q监控以及管理的面 jkstatus</strong></a><br /> <img height="228" alt="?1Q监控以及管理的面 jkstatus" src="http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/images/image002.jpg" width="554" border="0" /> <br /> <p>在这个图中我们可以看到当前JK配了两个q接分别?8109 ?8209 端口上,目前 s2 q个q接是停止状态,?s1 q个q接自上ơ重启后已经处理?47 万多个请求,量辑ֈ 6.2 ?GQ最大的q发数有 13 {等。我们也可以利用 jkstatus 的管理功能来切换 JK C同的 Tomcat 上,例如?s2 启用Qƈ停用 s1Q这个在更新应用E序的时候非常有用,而且整个切换q程对用h说是透明的,也就辑ֈ了无~升U的目的。关?JK 的配|文章网上已l非常多了,q里我们不再详细的介l整个配|过E,但我要讲一下配|的思\Q只要明白了配置的思\QJK 是一个非常灵zȝlg?/p> <p>JK 的配|最关键的有三个文gQ分别是 </p> <p><strong>httpd.conf </strong><br /> Apache 服务器的配置文gQ用来加?JK 模块以及指定 JK 配置文g信息</p> <p><strong>workers.properties</strong> <br /> ?Tomcat 服务器的q接定义文g</p> <p><strong>uriworkermap.properties</strong> <br /> URI 映射文gQ用来指定哪?URL ?Tomcat 处理Q你也可以直接在 httpd.conf 中配|这?URIQ但是独立这些配|的好处?JK 模块会定期更新该文g的内容,使得我们修改配置的时候无需重新启动 Apache 服务器?/p> <p>其中W二、三个配|文件名都可以自定义。下面是一个典型的 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 目录下新Z个文件分别是 workers.properties、uriworkermap.properties。这两个文g的内容大概如?/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 配置是我们前面那个屏幕抓图的页面所用的配置。首先我们配|了两个cd?ajp13 ?worker 分别?s1 ?s2Q它们指向同一台服务器上运行在两个不同端口 8109 ?8209 ?Tomcat 上。接下来我们配置了一个类型ؓ lbQ也是负蝲均衡的意思)?workerQ它的名字是 DLOG4JQ这是一个逻辑?workerQ它用来理前面配置的两个物理连?s1 ?s2。最后还配置了一个类型ؓ status ?workerQ这是用来监?JK 本n的模块。有了这三个 worker q不够,我们q需要告?JKQ哪?worker 是可用的Q所以就?<strong>worker.list = DLOG4J, status</strong> q行配置?/p> <p>接下来便?URI 的映配|了Q我们需要指定哪些链接是?Tomcat 处理的,哪些是由 Apache 直接处理的,看看下面q个文g你就能明白其中配|的意义</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>怿你已l明白了一大半了:所有的h都由 DLOG4J q个 worker q行处理Q但是有几个例外Q?jkstatus h?status q个 worker 处理。另外这个配|中每一行数据前面的感叹h什么意思呢Q感叹号表示接下来的 URI 不要?JK q行处理Q也是 Apache 直接处理所有的囄、css 文g、js 文g以及静?html 文本文g?/p> <p>通过?workers.properties ?uriworkermap.properties 的配|,可以有各U各Ll合来满x们前面提出对一?web |站的要求。您不妨动手试试Q?/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" cmimpressionsent="1"><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N100C4"><span id="wmqeeuq" class="atitle">http_proxy</span></a></p> <p>q是利用 Apache 自带?mod_proxy 模块使用代理技术来q接 Tomcat。在配置之前L保是否用的?2.2.x 版本?Apache 服务器。因?2.2.x 版本对这个模块进行了重写Q大大的增强了其功能和稳定性?/p> <p>http_proxy 模式是基?HTTP 协议的代理,因此它要?Tomcat 必须提供 HTTP 服务Q也是说必d?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>在这个配|中Q我们把所?http://localhost 的请求代理到 http://localhost:8080/ Q这也就?Tomcat 的访问地址Q除?images、css、js 几个目录除外。我们同样可以利?mod_proxy 来做负蝲均衡Q再看看下面q个配置</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/ <Proxy balancer://example/> BalancerMember http://server1:8080/ BalancerMember http://server2:8080/ BalancerMember http://server3:8080/ </Proxy> </pre> </td> </tr> </tbody> </table> <br /> <p>配置?JK 单多了,而且它也可以通过一个页面来监控集群q行的状态,q做一些简单的l护讄?/p> <br /> <a name="N100EA"><strong>?2Q监控集运行状?/strong></a><br /> <img height="427" alt="?2Q监控集运行状? 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" cmimpressionsent="1"><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N100FA"><span id="wmqeeuq" class="atitle">ajp_proxy</span></a></p> <p>ajp_proxy q接方式其实?http_proxy 方式一P都是?mod_proxy 所提供的功能。配|也是一P只需要把 http:// 换成 ajp:// Q同时连接的?Tomcat ?AJP Connector 所在的端口。上面例子的配置可以改ؓQ?/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/ <Proxy balancer://example/> BalancerMember ajp://server1:8080/ BalancerMember ajp://server2:8080/ BalancerMember ajp://server3:8080/ </Proxy> </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.soQ?其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加?mod_proxy.so ?mod_proxy_http.soQ如果是 ajp_proxy 则需要加?mod_proxy.so ?mod_proxy_ajp.soq两个模块?/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" cmimpressionsent="1"><strong>回页?/strong></a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <br /> <br /> <p><a name="N1010F"><span id="wmqeeuq" class="atitle">三者比?/span></a></p> <p>相对?JK 的连接方式,后两U在配置上是比较单的Q灵zL方面也一炚w不逊色。但q定性而言׃?JK q样久经考验Q毕?Apache 2.2.3 推出的时间ƈ不长Q采用这U连接方式的|站q不多,因此Q如果是应用于关键的互联|网站,q是采用 JK 的连接方式?/p> <br /> <br /> <p><a name="resources"><span id="wmqeeuq" class="atitle">参考资?</span></a></p> <ul> <li>获得 <a cmimpressionsent="1">Apache Http Server</a>?<br /> <br /> <li>获得 <a cmimpressionsent="1">Apache Tomcat</a>?<br /> <br /> <li><a cmimpressionsent="1">JK 文档</a>?</li> </ul> <br /> <img src ="http://www.aygfsteel.com/J2EEHOME/aggbug/283613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/J2EEHOME/" target="_blank">J2EE Home工作?/a> 2009-06-22 17:08 <a href="http://www.aygfsteel.com/J2EEHOME/archive/2009/06/22/283613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ӯ</a>| <a href="http://" target="_blank">ֺ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̰</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ף</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">÷</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">޽</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³ľ</a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank">찲</a>| <a href="http://" target="_blank">³</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>