Tomcat下应用负载均衡集群部署参考

Tomcat下应用负载均衡集群部署参考

 

配置环境与软件

Windows操作系统

jdk1.5以上版本

apache_2.0.63

       下载地址:http://httpd.apache.org/

Tomcat5.5

      下载地址:http://tomcat.apache.org/download-55.cgi

      下载Zip

mod_jk

      下载地址:http://apache.justdn.org/tomcat/tomcat-connectors/jk/ 

      下载与apache2.0.63相对应的版本,此处选择下载mod_jk-1.2.26-httpd-2.0.59.so

 

环境搭建和软件安装

安装jdk(请参阅jdk的相关安装配置)

特别提醒:设置系统环境变量:JAVA_HOMEPATH

安装apache

双击安装文件进行安装,一般按照默认设置即可,如果需要指定安装路径,可在相应的步骤中进行更改设置。下文中以“$apache_home”来替代说明apache的安装路径的根。

安装完毕,在任务栏应该可以看到一个Apache的快捷启动图标,试启动一下,如果正常启动,任务栏中小图标会变成绿色,可以通过http://localhost/进行访问,正常会出现欢迎页面。

 

 

 

负载均衡配置

结合mod_jk配置apache

1)、将下载的mod_jk-1.2.26-httpd-2.0.59.so拷贝到$apache_home/modules文件夹下

2)、在$apache_home/conf目录下新建文件:mod_jk.conf,文件中设置如下内容,这些内容一般不用变化。

LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.0.59.so

<IfModule mod_jk.c>

JkWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

JkLogLevel info

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

JkRequestLogFormat "%w %V %T"

</IfModule>

 

3)、在$apache_home/conf目录下新建文件:workers.properties,文件中设置如下内容:

#server 列表

worker.list = controller,tomcat1,tomcat2

 

#========tomcat1========

worker.tomcat1.port=8009     #ajp13 端口号,在tomcatserver.xml配置,默认8009

worker.tomcat1.host=10.20.0.193  #tomcat的主机地址,如不为本机,请填写ip地址

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor=1            #server的加权比重,值越高,分得的请求越多

#========tomcat2========

worker.tomcat2.port=9009     #ajp13 端口号,在tomcatserver.xml配置,默认8009

worker.tomcat2.host=10.20.0.193  #tomcat的主机地址,如不为本机,请填写ip地址

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor=1            #server的加权比重,值越高,分得的请求越多

 

#========controller,负载均衡控制器========

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2  #指定分担请求的tomcat

worker.controller.sticky_session=1

 

具体需要配置的Tomcat的数目,根据实际的部署情况进行设置,此处配置了两个,为tomcat1tomcat2,注意controller的名称对应以及各个Tomcat中的参数设置。有些参数的设置是要和后面各个Tomcat的设置对应的。

特别注意其中的端口和Ip设置,是需要按照实际情况配置的。

4)、打开$apache_home/conf目录下文件:httpd.conf,这个文件我们设置比较多,

其中包括一些与具体项目相关的优化设置。

 

找到“KeepAliveTimeout 15”所在行,在其下放添加内容:

<IfModule prefork.c>

StartServers 10

MinSpareServers 10

MaxSpareServers 15

ServerLimit 2000

MaxClients 1000

MaxRequestsPerChild 10000

</IfModule>

 

<IfModule worker.c>

StartServers 3

MaxClients 2000

ServerLimit 25

MinSpareThreads 50

MaxSpareThreads 200

ThreadLimit 200

ThreadsPerChild 100

MaxRequestsPerChild 0

</IfModule>

 

<IfModule mod_expires.c>

ExpiresActive on

ExpiresByType image/gif "acces plus 1 month"

ExpiresByType text/css "now plus 1 month"

ExpiresDefault "now plus 1 day"

</IfModule>

 

在“<IfModule mpm_winnt.c>”节点中,添加一行:

Win32DisableAcceptEx

 

设置Listen端口,默认情况下,是“Listen 80”,可以配置多个,比如:

Listen 80

Listen 8888

 

由“LoadModule access_module modules/mod_access.so”起始行开始替换所有LoadModule节点配置:

LoadModule access_module modules/mod_access.so

LoadModule actions_module modules/mod_actions.so

LoadModule alias_module modules/mod_alias.so

LoadModule asis_module modules/mod_asis.so

LoadModule auth_module modules/mod_auth.so

#LoadModule auth_anon_module modules/mod_auth_anon.so

#LoadModule auth_dbm_module modules/mod_auth_dbm.so

#LoadModule auth_digest_module modules/mod_auth_digest.so

LoadModule autoindex_module modules/mod_autoindex.so

#LoadModule cern_meta_module modules/mod_cern_meta.so

LoadModule cgi_module modules/mod_cgi.so

#LoadModule dav_module modules/mod_dav.so

#LoadModule dav_fs_module modules/mod_dav_fs.so

LoadModule dir_module modules/mod_dir.so

LoadModule env_module modules/mod_env.so

#LoadModule expires_module modules/mod_expires.so

#LoadModule file_cache_module modules/mod_file_cache.so

LoadModule headers_module modules/mod_headers.so

LoadModule imap_module modules/mod_imap.so

LoadModule include_module modules/mod_include.so

#LoadModule info_module modules/mod_info.so

LoadModule isapi_module modules/mod_isapi.so

LoadModule log_config_module modules/mod_log_config.so

LoadModule mime_module modules/mod_mime.so

#LoadModule mime_magic_module modules/mod_mime_magic.so

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule negotiation_module modules/mod_negotiation.so

#LoadModule rewrite_module modules/mod_rewrite.so

LoadModule setenvif_module modules/mod_setenvif.so

#LoadModule speling_module modules/mod_speling.so

#LoadModule status_module modules/mod_status.so

#LoadModule unique_id_module modules/mod_unique_id.so

LoadModule userdir_module modules/mod_userdir.so

#LoadModule usertrack_module modules/mod_usertrack.so

LoadModule vhost_alias_module modules/mod_vhost_alias.so

#LoadModule ssl_module modules/mod_ssl.so

LoadModule deflate_module modules/mod_deflate.so

include conf/mod_jk.conf

 

在“DirectoryIndex index.html index.html.var”后面添加“index.jsp”,如果应用的起始页面为”index.jsp”的话,其他情况可以根据类似配置。

 

 

 

 

在最后,需要添加的VirtualHost设置,以127.0.0.1下配置两个端口为例:

NameVirtualHost 127.0.0.1:80

<VirtualHost 127.0.0.1:80>

DocumentRoot "D:/application/hbu_application"

ServerName 127.0.0.1

ServerAdmin [email protected]

JkMount /sepa/maxReportServices controller

JkMount /sepa/viewer/* controller

JkMount /sepa/admin/* controller

JkMount /*.action controller

JkMount /*.jsp controller

</VirtualHost>

 

NameVirtualHost 127.0.0.1:8888

<VirtualHost 127.0.0.1:8888>

DocumentRoot "D:/application/hbu_application"

ServerName 127.0.0.1

ServerAdmin [email protected]

JkMount /sepa/maxReportServices controller

JkMount /sepa/viewer/* controller

JkMount /sepa/admin/* controller

JkMount /*.action controller

JkMount /*.jsp controller

</VirtualHost>

 

DocumentRoot节点指定应用所在的目录,是apache需要处理一些不交给Tomcat处理的文件的放置,此处可以放置与Tomcat下部署的完全一样的应用。

JkMount配置指定交给Tomcat处理的文件,可以配置多个。

 

配置Tomcat实例,实现负载均衡

1)、将apache-tomcat-5.5.27.zip解压缩,复制两份,分别命名为:apache-tomcat-5.5.27_node1apache-tomcat-5.5.27_node2,下文中将这两个Tomcat的实例的根目录分别称为:$Tomcat_node1$Tomcat_node2

       2)、由于是在同一台机器上安装两个Tomcat实例来模拟实现多台机器部署,所以以下保持apache-tomcat-5.5.27_node1不变,来改变一些apache-tomcat-5.5.27_node2的配置参数。

       打开$Tomcat_node2/conf目录下的server.xml文件:

l         改变<Server port="8005" shutdown="SHUTDOWN">中的port设置,我们设定成9005.

l         改变<Connector port="8080" maxHttpHeaderSize="8192"

maxThreads="300" minSpareThreads="25" maxSpareThreads="150"

enableLookups="false" redirectPort="8443" acceptCount="150"

connectionTimeout="30000" disableUploadTimeout="true" />中的portredirectPort设置,我们分别设定为:90809443.

l         改变<Connector port="8009"

enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />中的portredirectPort设置,我们分别设定为:90099443.

              3)、打开$Tomcat_node1/conf目录下的server.xml文件,更改

<Engine name="Catalina" defaultHost="localhost">

       添加属性jvmRoute="tomcat1",其他参数不做变动。打开$Tomcat_node2/conf目录下的server.xml文件,更改

<Engine name="Catalina" defaultHost="localhost">

       添加属性jvmRoute="tomcat2",其他参数不做变动。

       4)、编写一个简单web测试,比如一个命名为“TestDemo”的web应用,放置到$Tomcat_node1/webapps目录。

l         设定其WEB_INF/web.xml的内容为:

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4">

<display-name>TestDemo</display-name>

<description>TestDemo</description>

<distributable/>

</web-app>

特别注意<distributable/>标签

l         TestDemo目录下创建index.jsp,其内容设置如下:

<%@ page contentType="text/html; charset=GBK" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

    System.out.println("<><><><><><><>Tomcat_Node_1");

    out.println(request.getServerName() + " : " + request.getLocalPort()+"<br>");

%>

<%

  out.println("<br> ID " + session.getId()+"<br>");

 

  // 如果有新的 Session 属性设置

  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="index.jsp" method="POST">

名称:<input type=text size=20 name="dataName">

<br>

    :<input type=text size=20 name="dataValue">

     <br>

    <input type=submit>

   </form>

</body>

</html>

l         TestDemo应用拷贝至$Tomcat_node2/webapps目录,更改index.jsp文件中的System.out.println("<><><><><><><>Tomcat_Node_1")System.out.println("<><><><><><><>Tomcat_Node_2")

4)、启动apachetomcat_node1tomcat_node2,打开网页访问http://localhost/TestDemo/Index.jsp,多次请求可以看到请求被均匀的分发到两个Tomcat节点上去处理。

 

 

其他

多个Tomcat应用指向同一文件源部署

比如有个应用,为:TestDemo,打包解压目录为:D:/TestDemo,现在有两个Tomcat节点:Tomcat_node1Tomcat_node2,在两个节点下部署指向同一文件源的应用很简单。

Tomcat_node1节点目录的conf/Catalina/localhost文件夹下,创建一个文件:TestDemo.xml,

其内容如下:

<Context path="/TestDemo" docBase="D:/TestDemo "

        debug="0" privileged="true">

</Context>

 

把这份文件拷贝放置到Tomcat_node1节点目录的conf/Catalina/localhost文件夹下,分别启动两个Tomcat,这样,TestDemo应用在两个节点下已经成功部署。

你可能感兴趣的:(Tomcat下应用负载均衡集群部署参考)