apache与tomcat负载集群的3种方法(转)

2015/04/15 1960点热度 0人点赞 0条评论

花了两天时间学习apache与tomcat的集成方法,现在把学习成果记录下来。

apache与tomcat负载集群集成方法有3种jk、jk_proxy、http_proxy

本次集成软件版本:

AppServ2.5.10.exe
tomcat:apache-tomcat-6.0.18.zip
jdk:jdk-7u67-windows-x64.exe

本次测试是1个apache集成两个tomcat。

安装apache http server省略,访问地址为http://127.0.0.1

安装tomcat,解压apache-tomcat-6.0.18.zip,两个tomcat是放在同一台机内,server.xml可能还需要修改其它端口,请确认两个tomcat能正常启动。

两个tomcat分别命名为tomcat1和tomcat2

tomcat配置

先说tomcat.tomcat1的配置:

server.xml

(1)配置http监听端口,这里端口设为8080,该步骤非必要,只要不冲突就行了。

    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443"  URIEncoding="utf-8"
			   compression="on" 
               compressionMinSize="2048" 
               noCompressionUserAgents="gozilla, traviata" 
               compressableMimeType="text/html,text/xml,text/plain,text/css, text/javascript,text/json,application/x-javascript, application/javascript,application/json,image/png,image/jpeg"/>

(2)配置AJP监听端口,这里端口设为8077,该步骤非必要,只要不冲突就行了。

 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

(3)配置服务器标识,这里标识名配置为:tomcat1,添加jvmRoute="tomcat1",该步骤必须。

<!--配置服务器标识 jvmRoute-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

在Engine节点启用集群配置,只需去掉Cluster节点前的注释就行了,该步骤必须,配置了集群才能实现Session复制,如果只有一个集群,只按我下边的配置就行了,如果多个集群,则不能按此配置,tomcat服务器内的帮助文档/docs/cluster-howto.html,/docs/config/cluster.html有介绍,需要的可以参考下。

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
   <!--实现session复制-->  
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
...

要实现session复制,还需要在context.xml添加属性distributable="true",如下:

<Context distributable="true">

如果不想在context.xml中添加distributable="true",还有另一方法是在应用程序的web.xml中添加<distributeable/>,不过这方法我没有测试。

配置完成,访问地址为:http://127.0.0.1:8080

另一个tomcat.tomcat2的配置

server.xml

 <Connector port="8090" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8445"  URIEncoding="utf-8"
   compression="on" 
               compressionMinSize="2048" 
               noCompressionUserAgents="gozilla, traviata" 
               compressableMimeType="text/html,text/xml,text/plain,text/css, text/javascript,text/json,application/x-javascript, application/javascript,application/json,image/png,image/jpeg"/>
<Connector port="8011" protocol="AJP/1.3" redirectPort="8445" />
<!--配置服务器标识 jvmRoute-->
  <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2" >   
<!--实现session复制-->  
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
  ...

context.xml配置tomcat.tomcat1一样。

配置完成,访问地址为:http://127.0.0.1:8090

在tomcat.tomcat1和tomcat.tomcat2的webapps文件夹ROOT目录下添加同样的测试文件"index.jsp

<html>
<head>
  <title>helloapp</title>
</head>
<body>
<%
System.out.println("call tomcat1/2 test.jsp");
%>   
SessionID: <%=session.getId() %>  
</body>
</html>

访问http://127.0.0.1:8080/index.jsp和http://127.0.0.1:8090/index.jsp,确保能成功访问。

现在开始apache和tomcat的不同方式集成

jk方式集成

下载mod_jk-1.2.31-httpd-2.2.3.so,请下载合适的mod_jk版本,改名为mod_jk.so放进modules文件夹内

修改conf/httpd.conf配置

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount  /*.action loadbalancer #要和 workers.properties里的worker.list=loadbalancer相同
JkMount  /*.jsp loadbalancer

增加conf/workers.properties文件,添加内容

worker.list=loadbalancer  
worker.tomcat1.port=8009   #ajp的监听端口
worker.tomcat1.host=127.0.0.1
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat2.port=8011
worker.tomcat2.host=127.0.0.1
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2 #这里在的tomcat1、tomcat2为需要与上边tomcat设置的别名一致
worker.loadbalancer.sticky_session=1

配置完成任务,访问http://127.0.0.1/index.jsp,检查是否能正常访问。当打开多个浏览器的时候会发现访问的tomcat不同,就配置成功了。

第二种方案:ajp_proxy 

去掉httpd.conf文件中下面内容的注释(删掉#号),开启下边的配置

Include conf/extra/httpd-vhosts.conf
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

注意:

除了mod_proxy.so,mod_proxy_balancer.so,mod_proxy_connect.so

如果是采用ajp_proxy,需要加载mod_proxy_ajp.so这个模块;

如果是采用http_proxy,需要加载mod_proxy_http.so这个模块;

httpd.conf,删除刚才jk方式的配置内容,增加下边的配置

ProxyRequests Off

<proxy balancer://loadbalancer> 
 BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=tomcat1
 BalancerMember ajp://127.0.0.1:8011 loadfactor=1 route=tomcat2
</proxy>

conf/extra/httpd-vhosts.conf增加配置

<VirtualHost *:8081>
         ServerAdmin xxxx@xxx.com
         ServerName localhost
         ServerAlias localhost
         ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On
         ProxyPassReverse / balancer://loadbalancer/
         ErrorLog "logs/loadbalancer-error.log"
         CustomLog "logs/loadbalancer-access.log" common
</VirtualHost>

配置完成任务,访问http://127.0.0.1/index.jsp,检查是否能正常访问。

第三种方案:http_proxy

http_proxy的配置与ajp_proxy类似,修改方法2的httpd.conf配置如下,其它不变

ProxyRequests Off

<proxy balancer://loadbalancer> 
  BalancerMember http://127.0.0.1:8080 loadfactor=1 route=tomcat1
  BalancerMember http://127.0.0.1:8090 loadfactor=1 route=tomcat2
</proxy>

配置完成任务,访问http://127.0.0.1/index.jsp,检查是否能正常访问。

apache_tomcat配置文件下载:apache_tomcat

转自:http://www.blogjava.net/pengo/archive/2011/04/15/348331.html

yxkong

这个人很懒,什么都没留下

文章评论