随着web应用的交互性越来越强,其占用的网络带宽问题也日益凸显,最近正好要上线一个web应用,压力测试下的网络流量大的惊人,于是开始考虑http压缩的问题。
首先考虑的是mod_jk + jboss的环境,测试了一圈下来,发现mod_jk仅支持ajp协议,无法使用http压缩。后来了解到生产系统中用的是mod_cluster,于是又重新进行了测试,这次顺利搞定,压缩效果明显。
相关配置方法如下:
1、mod_cluster-1.1.3
下载mod_cluster,jboss官网下载对应平台的binaries,解压缩后里面就是一个apache httpd,初始的时候是没有httpd.conf文件的,运行bin目录下的installconf.bat,即可生成默认配置,该配置已经包含基本的mod_cluster配置,只需要修改对应的主机ip即可。具体如下:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule manager_module modules/mod_manager.so
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule advertise_module modules/mod_advertise.so
# MOD_CLUSTER_ADDS
# Adjust to you hostname and subnet.
<IfModule manager_module>
Listen 172.27.15.7:6666
ManagerBalancerName mycluster
<VirtualHost 172.27.15.7:6666>
<Location />
Order deny,allow
Deny from all
Allow from all
</Location>
KeepAliveTimeout 300
MaxKeepAliveRequests 0
AdvertiseFrequency 5
#下面这两行会让管理界面显示的信息更详细
ServerAdvertise On
AllowDisplay On
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from all
</Location>
</VirtualHost>
</IfModule>
这里需要注意的是,mod_cluster的管理界面是这样写的:Location /mod_cluster_manager,网上搜到的很多配置里面都是mod_cluster-manager,就是最后一个下划线和横线的区别,如果你按照网上的写法http://ip:6666/mod_cluster-manager访问,那就坑爹了(始终打不开界面,还以为是httpd的配置有问题)。
配置好以后启动,访问http://ip:6666/mod_cluster_manager,就可以看到mod_cluster的管理界面了,详细信息里面有Protocol supported: http AJP,说明同时支持http协议和AJP协议。
另外,将上面的这段配置拷贝到已有的apache中也是一样的。
2、jboss-eap-5.0
下载mod_cluster的java bundles,解压缩后里面有:
mod_cluster.sar - 用于jboss配置
JBossWeb-Tomcat - 用于Tomcat环境下的jar包(这里不需要)
demo - mod_cluster的负载均衡测试demo,包括server和client
将mod_cluster.sar拷贝到JBOSS_HOME/server/default/deploy目录下,为了测试简单,将mod_cluster.sar\META-IN\mod_cluster-jboss-beans.xml里面ModClusterListener的ContainerEventHandler由HAModClusterService改为ModClusterService,这样就可以不用配置更复杂的HA了。
修改JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml,添加一个listener:
<Listener className="org.jboss.modcluster.catalina.ModClusterListener" advertise="true"/>
在<Service name="jboss.web">节点下添加:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node0">
注:上面这一步是可选的,如果加了,在mod_cluster管理界面看到的就是“node0”,不加的话,看到的就是“node随机数”。
如果想用demo做测试的话,还可以将demo/server/load-demo.war拷贝到jboss的deploy目录。
启动jboss,启动完成后,刷新mod_cluster管理界面,可以看到,下面多了一个节点node0,说明配置成功了。但是这时仔细看节点的信息,可以看到节点名称后面写着mod_cluster连接jboss的url,默认是使用ajp协议的。比如,我的节点信息就是:
Node node0 (AJP://ip:8209)。
3、http压缩
如果想使用http压缩,则首先需要解决上面的问题,即让mod_cluster通过http协议连接jboss,而不是通过AJP协议。我查了mod_cluster的User Guide发现上面是这样说的:
Unlike mod_jk and mod_proxy_balancer, mod_cluster is not confined to AJP, but can use HTTP as well. While AJP is generally faster, an HTTP connector can optionally be secured via SSL. If multiple possible connectors are defined in your server.xml, mod_cluster uses the following algorithm to choose between them:
1. If an native (APR) AJP connector is available, use it.
2. If an AJP connector is available, use it.
3. Otherwise, choose the HTTP connector with the highest max threads.
显然就是说,虽然mod_cluster支持AJP、http,但是这个不是可配置的,而是由mod_cluster根据the following algorithm选择的,这个算法就是,如果有AJP则优先选择AJP,否则才会选择http。
因此,如果想利用jboss的http压缩,则需要让mod_cluster选择http,也就是说需要屏蔽掉所有的AJP connector。那么接下来的配置就简单了。首先注释掉AJP connector,然后在http connector上启用压缩,如下:
<Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}"
connectionTimeout="20000" redirectPort="8443"
compression ="on" compressionMinSize ="2048"
noCompressionUserAgents ="gozilla, traviata"
compressableMimeType ="text/html,text/xml,text/javascript,text/css,text/plain"/>
<!--<Connector protocol="AJP/1.3" port="8009" address="${jboss.bind.address}"
redirectPort="8443" />-->
至此,所有的配置都配好了,重启jboss,利用网络流量查看工具或firefox + firebug之类的工具测试一下网络流量,发现和直接在jboss上配置压缩效果是一样的。
分享到:
相关推荐
在大型部署中,为了提高系统的可扩展性和可靠性,通常会使用负载均衡技术,而mod_cluster就是这样的工具,它可以与Java应用服务器(如JBoss AS或WildFly)配合工作,自动发现和管理应用服务器实例,透明地将HTTP请求...
2. **配置负载均衡器**:如Apache HTTPD服务器,并安装mod_jk模块,设置mod_jk配置文件(`workers.properties`和`jk.conf`)以连接到各个JBoss实例。 3. **配置session复制**:在JBoss的`jboss-service.xml`和`jboss...
java代理服务器源码mod_cluster 项目 mod_cluster 是一个智能负载均衡器。 它使用通信通道将来自反向代理服务器的请求转发到一组应用程序服务器节点之一。 与 mod_jk 和 mod_proxy 不同,mod_cluster 利用应用服务器...
集群配置的关键在于使用域模式,并结合httpd(Apache HTTP服务器)和mod_cluster模块。mod_cluster是由JBoss开发的专为集群环境设计的HTTP代理模块,它可以自动检测和负载均衡到不同的JBoss实例。在JBoss7.1.1.Final...
同时,Apache HTTP Server会根据mod_cluster的配置动态感知JBoss EAP服务器的状态,实现请求的负载均衡。 总结来说,Linux下JBoss EAP 6.4.0的集群搭建涉及以下步骤: 1. 安装JDK 1.8并配置环境变量。 2. 下载并...
`mod_proxy`模块提供了基础的代理功能,`mod_proxy_balancer`模块负责负载均衡策略,而`mod_proxy_http`则使得Apache能够支持HTTP协议的代理。 接下来,配置负载均衡器: 1. 关闭直接的代理请求,以防外部直接访问...
9. **mod_cluster**: 如果涉及到负载均衡和集群,mod_cluster是JBoss与Apache HTTP Server集成的关键组件,它的配置会涉及到端口、监听器和路由策略。 10. **JNDI**: Java Naming and Directory Interface,JBoss...
2. **httpd.conf配置**:编辑Apache的`httpd.conf`文件,在其中加入`Include conf/mod_jk.conf`,确保Apache加载了mod_jk模块。 3. **mod_jk.conf配置**:编辑`mod_jk.conf`文件,进行以下配置: - 加载mod_jk模块...
3. 配置mod_cluster模块,调整`Maxhost`参数以适应Jboss集群的规模,例如设置为`ManagerBalancerNode maxhost=45`,这通常基于Jboss组的数量(这里是6)乘以一个系数(这里是6)。 在集群环境中,Apache作为负载...
1. **修改JBOSS_HOME/server/all/deploy/jbossweb-tomcat55.sar/server.xml**:配置负载均衡器,如mod_jk或mod_cluster模块。 2. **配置jboss-service.xml**:添加集群相关的MBean,如ha-policy、jgroups配置等。 3....
文档是介绍基于apache和modjk在jboss下实现负载均衡。
8. **Apache 配置**:对于 Apache 2.2.4,需要配置 mod_jk 或 mod_proxy 模块来进行 JBoss 集群的集成。这涉及到定义 Worker(表示 JBoss 实例)、设置负载均衡策略、配置虚拟主机和路径映射等。 9. **安全性**:在...
6. **部署配置**:在`server.xml`或`standalone.xml`配置文件中,添加集群相关的配置,如`jboss.bind.address`、`jboss.cluster.node.name`等属性,以及集群的组名(group-name)。 7. **集群服务启动**:配置完成...
首先需要下载并安装相应的软件包,然后配置 Apache 以加载 mod_jk 模块,并为每个工作节点设置相应的配置。 - **HTTP 会话状态复制**:为了确保 HTTP 会话的一致性,JBoss 支持会话状态的复制。这种方式可以避免由于...
2. **Mod_cluster**:这是一个可选的模块,特别适用于JBoss应用服务器,它提供了一种高级的负载均衡解决方案,能够动态检测后端节点的状态并相应地调整流量分配。 3. **KeepAlive**:这个特性允许客户端与服务器...
4. **Mod_jk模块**:用于Apache与JBoss之间的请求转发,需要下载对应Apache版本的`mod_jk-apache-2.0.59.so`。 #### 三、JBoss集群配置步骤 ##### 1. 安装JBoss - 解压`jboss-4.0.4.GA.zip`至指定路径,假设为`C:...
1. **Apache配置**:Apache可以作为反向代理和负载均衡器,需要配置mod_proxy、mod_proxy_balancer等模块,以根据预设策略将请求分发到Jboss集群的各个节点。 2. **Tomcat配置**:如果Jboss与Tomcat联合使用,需要...
薄客户端使用前端负载均衡器(如Apache+mod_jk或mod_proxy,或者F5 Big IP),而胖客户端则通过JNDI获取智能代理,该代理具备负载均衡和故障转移能力,可以根据用户需求定制策略。 总结来说,JBoss集群提供了一套...
mod_cluster允许Web服务器(如Apache)与JBoss Server集群之间进行交互。 4. **同步应用部署**:在domain模式下,只需将应用部署到Group上,该Group中的所有JBoss Server实例将会自动同步部署。 #### 七、总结 通过...