使用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上升级安装的,则配置有所不同,详情参考官方文档。):
#for mod_cluster#加载必要的.so模块LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule slotmem_module modules/mod_slotmem.soLoadModule manager_module modules/mod_manager.soLoadModule proxy_cluster_module modules/mod_proxy_cluster.soLoadModule advertise_module modules/mod_advertise.so #设置监听主机IP和端口Listen 192.168.11.24:6666 #配置虚拟主机<VirtualHost 192.168.11.24:6666> <Directory /> Order deny,allow Deny from all #Allow from 127.0.0.1 Allow from all </Directory> KeepAliveTimeout 60 MaxKeepAliveRequests 0 #声明一个负载均衡器 ManagerBalancerName mycluster AdvertiseFrequency 5 ServerAdvertise On AllowDisplay On</VirtualHost> #设置代理转发,这里为将所有请求都转发至mycluster负载均衡器ProxyPass / balancer://mycluster/ #配置mod_cluster-manager,这样才可以访问到mod_cluster-manager管理页面<Location /mod_cluster-manager>SetHandler mod_cluster-managerOrder Deny,AllowDeny from allAllow from all</Location>
<Listener className="org.jboss.modcluster.catalina.ModClusterListener" advertise="true"/> //添加此行配置 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> //在此行配置中添加jvmRoute属性
<Listener className="org.jboss.modcluster.catalina.ModClusterListener" advertise="true"/>
import org.apache.catalina.Lifecycle;import org.apache.catalina.LifecycleEvent;import org.apache.catalina.LifecycleListener;import org.apache.catalina.Server;import org.apache.tomcat.util.IntrospectionUtils;import org.apache.tomcat.util.modeler.Registry;