日期:2014-05-16  浏览次数:21270 次

Apache+Tomcat 负载均衡、集群配置

本文是看了几位前辈关于Apache+Tomcat 负载均衡、集群的相关文章整理出的一份以便查阅的文章。

?

有关说明是负载均衡,集群以及他们的优点在这里就不加论述了。

?

在Apache2以前的版本中是没有集成和tomcat通信的jk模块,所以要单独下载mod_jk.so文件,再加以配置

?

准备:apache(1个)、tomcat(2个或2个以上)、mod_jk.so文件

?

这种配置方式见 http://www.iteye.com/topic/615307

?

Apache2之后的版本中集成了mod_jk后配置简单了许多,准备的东西和上面一样。

?

安装好apache后,找到\conf下的httpd.conf? 用文本编辑器打开

在110行处将

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

这6行的注释放开(即去掉#)

?

在462行附近把

Include conf/extra/httpd-vhosts.conf 行前的注释放开

?

然后再该文档的最下方加入

ProxyRequests Off 
<proxy balancer://jqname> 
        BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=tomcat1
        BalancerMember ajp://127.0.0.1:7009 loadfactor=1 route=tomcat2
</proxy>

?配置apache的反向代理

?

balancer://jqname 配置在集群中所有的tomcat节点

?

下面配置2个集群的tomcat apache与tomcat通信是通过ajp协议,由于我是在一台机器上部署的2个tomcat

所以这里都是127.0.0.1,后面是ajp通信端口在tomcat里面配置,下面会提到。

?

loadfactor是类似一个权值的东西1:1就是各处理50%的请求,以此类推

?

route对应在tomcat中配置的通道路径

?

这样httpd.conf就配置完毕了

?

?

然后打开\conf\extra下的httpd-vhosts.conf 在最后加入

<VirtualHost *:80> 
         ServerAdmin zhanghaifeng212@yahoo.com.cn
         ServerName  192.168.12.65
         ServerAlias localhost 
         ProxyPass / balancer://jqname/ stickysession=jsessionid nofailover=On 
         ProxyPassReverse / balancer://jqname/ 
         ErrorLog "logs/zhanghf-error.log"
         CustomLog "logs/zhanghf-access.log" common
</VirtualHost>

ServerAdmin 管理员邮箱

ServerName 域名(可以用ip)

ServerAlias 别名

balancer://jqname 需要负载均衡 “jqname” 集群名称,需要和httpd.conf中的集群名称一致

?

httpd-vhosts.conf 配置完毕

?

?

tomcat的配置(这里用的是2个tomcat在同一台机器)

?

分别将tomcat1和tomcat2的conf 中的 server.xml 修改如下

?

在99行附近把

<!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">         
    --> 
放开注释,把下面的<Engine name="Catalina" defaultHost="localhost"> 加上注释;
或直接在这句上加入 jvmRoute节点

?

jvmRoute和httpd.conf中的route保持一致

?

再将107行附近的

<!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->    放开注释

?放开注释,这个是配置集群的,我们测试用的是tomcat 的默认集群配置

?

?

因为我用的是同一台机器放2个tomcat,需要改一个tomcat 的配置 (如tomcat2的server.xml修改如下)

?

22行附近

<Server port="8005改为7005或其他" shutdown="SHUTDOWN">

?

69行附近

?<Connector port="8080改为7080或其他" protocol="HTTP/1.1"
?????????????? connectionTimeout="20000"
?????????????? redirectPort="8443" />

?

90行附近

<Connector port="8009改为7009或其他" protocol="AJP/1.3" redirectPort="8443" />

?

这里的ajp端口要和httpd.conf中的端口对应。

?

tomcat配置完毕

?

?

最后将项目分别部署到tomat1,和tomcat2中,启动 apache,tomcat1,tomcat2

?

访问http://localhost/yourProjectName/index.jsp 如果加了后台输出语句即可看到,每次请求是轮流使用

tomcat1和tomcat2,在session中保存几个变量输出,也可看见session的同步。把其中一个tomcat关闭,也不

影响另一个。

?

欢迎大家批判!

?

1 楼 lgdlgd 2010-03-19  
不错,是简单一些,提点建议:
1、下面这几句看着有些糊涂,是不是可重新组织一下。