apache服务器和 tomcat的连接方法其实有三种 :JK、 http_proxy和 ajp_proxy。本文主要介绍最为常见的 JK。
环境: PC2台: pc1(IP 192.168.1.179)安装了 apache和 tomcat3
pc2(IP 192.168.1.175)安装了 tomcat1
pc3(IP 192.168.1.180)安装了 tomcat2
系统 win server 2003
1. 安装 tomcat 、 apache 服务器及版本对应的 JK
这里需要注意的是 JK版本必须与 apache服务器版本号对应,可以直接从我参考附件下载。 apache_home表示 apache服务器安装目录 .
2. 配置 apache 服务器
2.1 httpd.conf 文件
apache_home目录下的 conf/httpd.conf文件中添加
AddDefaultCharset off
LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkLogFile logs/mod_jk.log
ServerAdmin localhost
ServerName localhost
DocumentRoot C:/wwwRoot
JkWorkersFile conf/workers.properties
JkMount /*.jsp lbcontroller
JkMount /*.do lbcontroller
JkMount /ws/* lbcontroller
具体的说明如下:
LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
表示载入JK模块。
JkWorkersFile conf/workers.properties
tomcat实例配置,具体参见2.2。
JkMount /* lbcontroller
设置apache分发器,/*表示apache将所有文件都由分发器lbcontroller 进行分发,你可以自行设置*.jsp,*.do等
2.2 workers.properties 文件
在 apache_home下 conf目录中新建 workers.properties文件,输入以下内容
workers.tomcat_home=C:\Tomcat6
workers.java_home=C:\Program Files\Java\jdk1.6.0_20
worker.list=lbcontroller
#Tomcat1实例配置
worker.tomcat1.host=192.168.1.175
worker.tomcat1.port=8088
worker.tomcat1.type=ajp13
#分发权重 值越大负载越大
worker.tomcat1.lbfactor=1
#Tomcat2实例配置
worker.tomcat2.host=192.168.1.180
worker.tomcat2.port=9099
worker.tomcat2.type=ajp13
#分发权重 值越大负载越大
worker.tomcat2.lbfactor=1
#Tomcat3实例配置
worker.tomcat3.host=192.168.1.179
worker.tomcat3.port=8009
worker.tomcat3.type=ajp13
#分发权重 值越大负载越大
worker.tomcat3.lbfactor=1
#负载均衡分发控制器
worker.lbcontroller.type= lb
worker.lbcontroller.balance_workers=tomcat1,tomcat2,tomcat3
worker.lbcontroller.sticky_session=True
在这里就是 tomcat1和 tomcat2必须与之后 tomcat中的 server.xml中 jvmRoute值一致。
3.tomcat 集群配置
配置每个 tomcat目录下的 server.xml文件,具体修改内容如下
<Host name="localhost" appBase="C:/wwwRoot"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
3.1 Engine 配置
修改前
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改后
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
这里 tomcat的 port值必须与在 workers.properties中的 port值一致。
3.3 Cluster 配置
修改前
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" >
-->
修改后,去掉注释并添加一些内容如下
<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="4001"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<!-- timeout="60000"-->
<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=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
上述配置跟 tomcat官方建议的配置,去掉了
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
如果不去掉这部分,则 tomcat启动会报 "FarmWarDeployer can only work as host cluster subelement!."
3.4 session 复制配置
tomcat集群中的 session管理,主要有两种方式:
1).粘性 session
表示从同一窗口发来的请求都将有集群中的同一个 tomcat进行处理。配置方式是在上面 workers.properties文件中
worker.lbcontroller.sticky_session=True
粘性 session的好处在不会在不同的 tomcat上来回跳动处理请求,但是坏处是如果处理该 session的 tomcat崩溃,那么之后的请求将由其他 tomcat处理,原有 session失效而重新新建一个新的 session,这样如果继续从 session取值,会抛出 nullpointer的访问异常。
2).session复制
session复制是指 tomcat彼此之间通过组播方式将 session发到各个 tomcat实例上,如果其中一个访问出错,则另外 tomcat仍然具有有效的 session内容,从而能正常接管其 session。坏处是当 tomcat实例很多,或者用户在 session中有大量操作时,组播发送的信息量十分惊人。 session复制配置则是在发布的 web应用程序中的 web.xml中添加
<distributable/>
此外 ,session复制所需的 JDK必须是 JDK 5.0及其以上版本。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com