标签归档:cluster

Tomcat 6.x 和 Apache 2.2.11 集群负载均衡搭建

本文根据 http://www.cnblogs.com/shiyangxt/archive/2009/02/26/1398902.html 整理,如有不明,请参阅原文。
  1. 所需软件:
  • Apache 2.2.11
  • Tomcat 6.x压缩版(.zip, .tar等压缩格式的版本)。

2. 配置步骤:

1) 安装Apache 2.2.11tomcat 集群负载均衡需要apache服务器来配合实现,所以我们需要安装apache。另外,由于apache 2.2.11已经集成了jk2等负载工具,这将简化我们的配置。可以用安装版或解压版安装apache

    • 如果用windows下安装版安装,根据向导填写相应参数即可完成。
    • 如果用压缩版,需要将apache解压到一个目录下面,然后打开$APACHE_HOME/conf/httd.conf, 根据实际配置下面参数:

#apache安装根目录

ServerRoot "D:/devCenter/cluster_lab/Apache2.2 "

#端口

Listen 80

#

ServerAdmin 邮件

#http文档根目录

DocumentRoot "D:/devCenter/cluster_lab/Apache2.2/htdocs"

#

# This should be changed to whatever you set DocumentRoot to.

#

<Directory "D:/devCenter/cluster_lab/Apache2.2/htdocs">

#

# Possible values for the Options directive are "None", "All",

# or any combination of:

# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

#

# Note that "MultiViews" must be named *explicitly* — "Options All"

# doesn't give it to you.

#

# The Options directive is both complicated and important. Please see

# http://httpd.apache.org/docs/2.2/mod/core.html#options

# for more information.

Options Indexes FollowSymLinks

#

# AllowOverride controls what directives may be placed in .htaccess files.

# It can be "All", "None", or any combination of the keywords:

# Options FileInfo AuthConfig Limit

#

AllowOverride None

 

#

# Controls who can get stuff from this server.

#

Order allow,deny

Allow from all

</Directory>

<IfModule alias_module>

# directives as to Alias.

ScriptAlias /cgi-bin/ "D:/devCenter/cluster_lab/Apache2.2/cgi-bin/"

</IfModule>

#

# "D:/devCenter/cluster_lab/Apache2.2/cgi-bin" should be changed to whatever your ScriptAliased

# CGI directory exists, if you have that configured.

#

<Directory "D:/devCenter/cluster_lab/Apache2.2/cgi-bin">

AllowOverride None

Options None

Order allow,deny

Allow from all

</Directory>

2) 启动apache, 然后通过http://localhost/来测试,检查apache是否已经启动。

3) 启用负载均衡相关的module, 打开$APACHE_HOME/conf/httd.conf,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块:

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

4)配置IfModule dir_module节点:找到<IfModule dir_module>节点,在DirectoryIndex index.html后加上index.jsp,这一步只是为了待会配置完tomcat后能看到小猫首页,可以不做。

5)配置httpd-vhosts.conf中的虚拟主机:打开$APACHE_HOME/conf/extra/httpd-vhosts.conf, 在最下面添加以下信息:

<VirtualHost *:80>

ServerAdmin 管理员邮箱

ServerName localhost

ServerAlias localhost

ProxyPass / balancer://sy/ stickysession=jsessionid nofailover=On

ProxyPassReverse / balancer://sy/

ErrorLog "logs/sy-error.log"

CustomLog "logs/sy-access.log" common

</VirtualHost>

然后在$APACHE_HOME/conf/httd.conf, 启用下面配置:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf

6)打开$APACHE_HOME/conf/httd.conf,在最下面添加以下信息:

ProxyRequests Off

<proxy balancer://sy>

BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1

BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2

</proxy>

ProxyRequests Off 是告诉Apache需要使用反向代理,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口。loadfactor是负载因子,Apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都是1Apache就按11的比例转发,如果是21就按21的比例转发。这样就可以使配置更灵活,例如可以给性能好的服务器增加处理工作的比例,如果采取多台服务器,只需要修改ip地址和端口就可以了。route参数对应后续tomcat配置中的引擎路径(jvmRoute)。

7) 解压tomcat 到一个目录,并复制一份。然后打开两个tomcat下面conf/server.xml

注意:如果tomcat在不同机器上面,端口可以使用默认值。

o 配置关闭端口:其中一个tomcat<Server port="8005" shutdown="SHUTDOWN">保持不变,将另一个的端口修改为9005.

o 配置Connector的端口:找到non-SSL HTTP/1.1 Connector,即tomcat单独工作时的默认Connector,保留第一台默认配置,在8080端口侦听,而把第二台设置为在9080端口侦听。往下找到AJP 1.3 Connector<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />,这是tomcat接收从Apache过来的ajp连接请求时使用的端口,保留第一台默认设置,把第二台端口改为9009

o 配置jvmRoute:第一台tomcatserver.xml中找到<Engine name="Catalina" defaultHost="localhost">,去掉这段或改为注释,把上方紧挨的<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">注释符去掉,对于第二台,去掉注释符并把jvm1改为jvm2

o 配置Cluster:将两个tomcatserver.xml<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />的注释去掉。这里的配置是为了可以在集群中的所有tomcat节点间共享会话(Session)。如果仅仅为了获得一个可用的tomcat集群,Cluster只需要这么配置就可以了。

8) 测试:

       只需要简单的几步就配置完成,然后可以测试一下是否配置成功。引用网上的一个测试方法,就是在webapps目录下新建test目录,在test目录下新建test.jsp文件,代码我稍作改动如下:

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>shiyang</title></head>
<body>
服务信息:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br />");%>
<%
out.println("<br> ID " + session.getId()+"<br />");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}

out.print("<b>Session 列表</b><br />");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br />");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
名称:<input type=text size=20 name="dataName">
<br/>
:<input type=text size=20 name="dataValue"> <br/> <input type=submit value="提交">
</form>
</body>
</html>

       在test目录下继续新建WEB-INF目录和web.xml,在<web-app>节点下加入<distributable />,这一步非常重要,是为了通知tomcat服务器,当前应用需要在集群中的所有节点间实现Session共享。如果tomcat中的所有应用都需要Session共享,也可以把conf/context.xml中的改为<Context>改为<Context distributable="true">,这样就不需对所有应用的web.xml再进行单独配置。测试代码完成! 先启动Apache服务,在先后启动两台tomcat,分别点startup.bat批处理。如果一切顺利的话,就会启动成功。再次访问http://localhost,可以看到小猫页面。访问http://localhost/test/test.jsp。可以看到包括服务器地址,端口,session等信息在内的页面。然后你可以测试一下容错功能,关闭一个tomcat,看看服务是否正常,然后重启tomcat,关掉另一台tomcat,看看是否也可以继续提供服务。当然你也可以配置多台tomcat,但是原理都一样。

 

其它更加详细的配置可以参考 http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 和  http://tomcat.apache.org/tomcat-6.0-doc/balancer-howto.html

 

作者:豆博草堂