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

发布于 2022-10-15 09:17:37 字数 7836 浏览 16 评论 0

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

花了两天时间学习apache与tomcat的集成方法,现在把学习成果记录下来。
apache与tomcat负载集群集成方法有3种jk、jk_proxy、http_proxy
本次集成使用的软件版本:

  1. apache:httpd - 2.2 . 17 - win32 - x86 - no_ssl.msi
  2. tomcat:apache - tomcat - 6.0 . 20 .zip
  3. jdk:jdk - 6u14 - windows - i586.exe
  4. 本次测试是1个apache集成两个tomcat。

复制代码安装apache http server省略,访问地址为http://127.0.0.1:8081
安装tomcat,解压apache-tomcat-6.0.20.zip,测试时我是把两个tomcat分开放在不同的虚拟机,其中一个是和apache同一台虚拟机。
两个tomcat分别命名为worker2和worker3
先说tomcat.worker2的配置:
server.xml
(1)配置http监听端口,这里端口设为8079,该步骤非必要,只要不冲突就行了。

  1. < Connector  port ="8079"  protocol ="HTTP/1.1"  connectionTimeout ="20000"  redirectPort ="8443"   />

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

  1. < Connector  port ="8077"  protocol ="AJP/1.3"  redirectPort ="8443"   />

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

  1. < Engine  name ="Catalina"  defaultHost ="localhost"  jvmRoute ="worker2" >

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

  1. < Engine  name ="Catalina"  defaultHost ="localhost"  jvmRoute ="worker2" >
  2.     < Cluster  className ="org.apache.catalina.ha.tcp.SimpleTcpCluster" />  

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

  1. < Context  distributable ="true" >

复制代码如果不想在context.xml中添加distributable="true",还有另一方法是在应用程序的web.xml中添加<distributeable/>,不过这方法我没有测试。
配置完成,访问地址为:http://127.0.0.1:8079

另一个tomcat.worker3的配置
server.xml

  1. < Connector  port ="8078"  protocol ="HTTP/1.1"  connectionTimeout ="20000"  redirectPort ="8443"   />
  2. < Connector  port ="9009"  protocol ="AJP/1.3"  redirectPort ="8443"   />
  3. < Engine  name ="Catalina"  defaultHost ="localhost"  jvmRoute ="worker3" >
  4.     < Cluster  className ="org.apache.catalina.ha.tcp.SimpleTcpCluster" />

复制代码context.xml配置tomcat.worker2一样。
配置完成,访问地址为:http://127.0.0.1:8078
注意:如果两个tomcat是放在同一台机内,server.xml可能还需要修改其它端口,请确认两个tomcat能正常启动。

在tomcat.worker2和tomcat.worker3的webapps文件夹添加同样的测试文件test"test.jsp

  1. < html >
  2. < head >
  3.    < title > helloapp </ title >
  4. </ head >
  5. < body >
  6. <%
  7. System.out.println( " call test.jsp " );
  8. %>   
  9. SessionID:  <% = session.getId()  %>   
  10. </ body >
  11. </ html >

复制代码访问http://127.0.0.1:8078/test/test.jsphttp://127.0.0.1:8079/test/test.jsp,确保能成功访问。

现在开始apache和tomcat的不同方式集成
1、jk方式集成
下载mod_jk-1.2.31-httpd-2.2.3.so,请下载合适的mod_jk版本,改名为mod_jk.so放进modules文件夹内
修改conf/httpd.conf配置

  1. LoadModule jk_module modules/mod_jk.so
  2. JkWorkersFile conf/workers.properties
  3. JkLogFile logs/mod_jk.log
  4. JkLogLevel debug
  5. JkMount  /*.do loadbalancer
  6. JkMount  /*.jsp loadbalancer

复制代码增加conf/workers.properties文件,添加内容

  1. worker.list=loadbalancer
  2. worker.worker2.port=8077   #ajp的监听端口
  3. worker.worker2.host=108.88.3.105
  4. worker.worker2.type=ajp13
  5. worker.worker2.lbfactor=1
  6. worker.worker3.port=9009
  7. worker.worker3.host=127.0.0.1
  8. worker.worker3.type=ajp13
  9. worker.worker3.lbfactor=1
  10. worker.loadbalancer.type=lb
  11. worker.loadbalancer.balance_workers=worker2,worker3 #这里在的worker2、worker3为需要与上边tomcat设置的别名一致
  12. worker.loadbalancer.sticky_session=1

复制代码配置完成任务,访问http://127.0.0.1:8081/test/test.jsp,检查是否能正常访问。

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

  1. Include conf/extra/httpd-vhosts.conf
  2. LoadModule proxy_module modules/mod_proxy.so
  3. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
  4. LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
  5. LoadModule proxy_connect_module modules/mod_proxy_connect.so
  6. LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
  7. 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方式的配置内容,增加下边的配置

  1. ProxyRequests Off
  2. < proxy  balancer://loadbalancer >  
  3. BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=worker3
  4. BalancerMember ajp://108.88.3.105:8077 loadfactor=1 route=worker2
  5. </ proxy > conf/extra/httpd-vhosts.conf增加配置
  6. < VirtualHost  *:8081 >
  7.          ServerAdmin xxxx@xxx.com
  8.          ServerName localhost
  9.          ServerAlias localhost
  10.          ProxyPass / balancer://loadbalancer/ stickysession=jsessionid nofailover=On
  11.          ProxyPassReverse / balancer://loadbalancer/
  12.          ErrorLog "logs/loadbalancer-error.log"
  13.          CustomLog "logs/loadbalancer-access.log" common
  14. </ VirtualHost >

复制代码配置完成任务,访问http://127.0.0.1:8081/test/test.jsp,检查是否能正常访问。

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

  1. ProxyRequests Off
  2. < proxy  balancer://loadbalancer >  
  3. BalancerMember http://127.0.0.1:8078 loadfactor=1 route=worker3
  4. BalancerMember http://108.88.3.105:8079 loadfactor=1 route=worker2
  5. </ proxy >

复制代码配置完成任务,访问http://127.0.0.1:8081/test/test.jsp,检查是否能正常访问。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文