使用mod_cluster进行负载均

1.mod_cluster简介

        mod_cluster 和mod_jk,mod_proxy类似,是一个基于httpd的负载平衡项目能够代理请求给基于Tomcat 网络服务器集群(支持任何独立的Tomcat,独立的JBoss Web或者JBoss AS的嵌入JBoss Web)。mod_cluster与 mod_jk和mod_proxy的区别是,mod_cluster为web服务器和httpd服务器之间提供后台通道。web服务器使用后台通道给 httpd端提供当前状态信息。
2.mod_cluster优点

1.能够动态配置httpd 工作任务:无需在httpd端配置各个server的IP和端口,有自动发现机制。
2.提供服务器端负载权重因子计算:根据服务器节点的CPU、内存、jvm堆栈、数据库连接池、线程池使用率等,由web服务器端自动进行计算负载权重,可降低httpd服务器端的压力
3.更优粒度web应用管理(事件通知机制):web-app部署/卸载都会通知到httpd服务器,这样httpd服务器就不会将请求转发至已解部署该应用的Server,减少时间开支。并可对所有检测到的server下的应用进行Disable和Enable操作。
4.支持AJP、HTTP、HTTPS协议

3.mod_cluster使用的必要条件

    * httpd-2.2.8+
    * JBoss AS 5.0.0+ or JBossWeb 2.1.1+
    * 其它服务器不能直接使用,需要进行改造

4.mod_cluster工作原理
5.mod_cluster与Tomcat配置负载均衡示例

这里只简单说明mod_cluster+tomcat+ajp协议+session非亲和+load-demo.war场景,其它详细安装和配置 参考官方文档:http://docs.jboss.org/mod_cluster/1.1.0/html_single /#Quick_Start_Guide。
5.1安装httpd服务器(windows下安装一份全新的httpd,也可以在已有httpd上升级,这里是安装一份全新的httpd)

5.1.1.下载

http://www.jboss.org/mod_cluster/downloads/1-1-0.html下载最新mod_cluster 1.1.0.Final zip bundles

5.1.2.解压安装

解压mod_cluster-1.1.0.Final-windows-x86-ssl.zip,解压后会有一个httpd-2.2目录,执行其下bin目录下安装配置脚本installconf.bat
5.2配置httpd服务器

这个版本的httpd是完全绑定了mod_cluster组件了,所以只要往httpd_home/conf/httpd.conf添加一些 mod_cluster负载均衡配置了,内容和简单说明如下(如果是在已有httpd上升级安装的,则配置有所不同,详情参考官方文档。):

Xml代码  收藏代码
  1. #for mod_cluster  
  2. #加载必要的.so模块  
  3. LoadModule proxy_module modules/mod_proxy.so  
  4. LoadModule proxy_ajp_module modules/mod_proxy_ajp.so  
  5. LoadModule slotmem_module modules/mod_slotmem.so  
  6. LoadModule manager_module modules/mod_manager.so  
  7. LoadModule proxy_cluster_module modules/mod_proxy_cluster.so  
  8. LoadModule advertise_module modules/mod_advertise.so  
  9.   
  10.    
  11. #设置监听主机IP和端口  
  12. Listen 192.168.11.24:6666  
  13.    
  14. #配置虚拟主机  
  15.   
  16. <VirtualHost 192.168.11.24:6666>  
  17.    
  18.   <Directory />  
  19.     Order deny,allow  
  20.     Deny from all  
  21.     #Allow from 127.0.0.1  
  22.     Allow from all  
  23.   </Directory>  
  24.    
  25.   KeepAliveTimeout 60  
  26.   MaxKeepAliveRequests 0  
  27.    
  28. #声明一个负载均衡器  
  29.   ManagerBalancerName mycluster  
  30.   AdvertiseFrequency 5  
  31.   ServerAdvertise On  
  32.   AllowDisplay On  
  33. </VirtualHost>  
  34.    
  35. #设置代理转发,这里为将所有请求都转发至mycluster负载均衡器  
  36. ProxyPass / balancer://mycluster/   
  37.    
  38. #配置mod_cluster-manager,这样才可以访问到mod_cluster-manager管理页面  
  39. <Location /mod_cluster-manager>  
  40. SetHandler mod_cluster-manager  
  41. Order Deny,Allow  
  42. Deny from all  
  43. Allow from all  
  44. </Location>  


5.3安装server-side components

http://www.jboss.org/mod_cluster/downloads/1-1-0.html下载最新java mod_cluster 1.1.0.Final,解压后将JBossWeb-Tomcat下所有jar包拷贝至tomcat_home/lib下。
5.4配置server-side

修改tomcat_home/conf/server.xml:

Xml代码  收藏代码
  1. <Listener className="org.jboss.modcluster.catalina.ModClusterListener" advertise="true"/>  //添加此行配置  
  2.   
  3.  <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">  //在此行配置中添加jvmRoute属性  



5.5访问mod_cluster-manager查看配置结果

按照5.3、5.4说明,在多个tomcat下安装配置server-side components,注意jvmRoute须配置成不同标识。启动所有Tomcat Server及httpd,访问apache的mod_cluster-manager页面:http://ip:port/mod_cluster- manager ,<!--@import url(scrollbar.css); -->页面将显示mod_cluster一些状态信息,并且显示所有监测到的web服务器,以及各服务器下存在的应用,并可以对这些应用进行 Disable和Enable操作,并且web服务器的启停和web-app部署/卸载都能在该页面动态更新。如下图所示:


注:如果页面没有显示mod_cluster的状态信息,请检查一下是否在<VirtualHost></VirtualHost>中设置了AllowDisplay On
5.6 load-demo.war测试

http://www.jboss.org/mod_cluster/downloads/1-0-3-GA下载java mod_cluster 1.0.3.GA后解压出,将解压出的demo目录下的demo/server/load-demo.war部署至各个Tomcat Server,执行demo\client\run-demo.bat,会弹出一个类似于LoadRunner的图形界面小工具(具体使用参见官方文档 http://docs.jboss.org/mod_cluster/1.1.0/html/demo.html),从测试结果看,apache将模拟 的请求均匀的转发至各个Tomcat Server了。如下图:





特别注意:这里不要使用java mod_cluster 1.1.0.Final下的load-demo.war,这个版本的load-demo.war有bug,用不了,花了我不少时间,建议使用java mod_cluster 1.0.3.GA版本的demo。

6.某app-server与mod_cluster集成需要做的工作

1.配置一个Listerner组件

mod_cluster为web服务器和httpd服务器之间提供后台通道,该后台通道需要在web server服务器端安插一个Listerner组件(如tomcat server需要一个ModClusterListener组件)。该组件负责与httpd服务器进行交互:比如将计算出的负载权重因子、web-app 生命周期状态等信息推送至http服务器。现在tomcat和jboss都提供在server.xml中配置这个Listener:

Xml代码  收藏代码
  1. <Listener className="org.jboss.modcluster.catalina.ModClusterListener" advertise="true"/>  



现在TongWeb配置文件和管理控制台没有提供配置这个Listener的地方,但是com.tongweb.web.core.core.StandardServer中提供了addLifecycleListener()方法可以添加生命周期Listener。

2. 改造mod_cluster提供的server-side components

简单查看了一下mod_cluster提供的server-side components 的jar包源码,里面部分源码依赖于tomcat或jboss的一些源码,比如说ModClusterListener就具有一些依赖关系:
Java代码  收藏代码

 
  1. import org.apache.catalina.Lifecycle;  
  2. import org.apache.catalina.LifecycleEvent;  
  3. import org.apache.catalina.LifecycleListener;  
  4. import org.apache.catalina.Server;  
  5. import org.apache.tomcat.util.IntrospectionUtils;  
  6. import org.apache.tomcat.util.modeler.Registry;  
posted @ 2014-07-23 17:19  princessd8251  阅读(1107)  评论(0编辑  收藏  举报