Apache+2Tomcat 集群及调优

来源:互联网 发布:淘宝店铺押金怎么交 编辑:程序博客网 时间:2024/05/29 02:29

一、集群配置

1.1 所需软件

  a) apache_2.2.4-win32-x86-no_ssl.msi;

  b) apache-tomcat-6.0.28.rar

  c) mod_jk-apache-2.2.4.so

1.2 Apache的配置

1.  在apache安装目录下conf目录中找到http.conf,在文件最后加上下面一句话就可以了,如下图:

include conf/mod_jk.conf

2.  将mod_jk-apache-2.2.4.so文件放入如下文件夹中

路径:C:\Apache\Apache2.2\modules

3.  http.conf同目录下新建mod_jk.conf文件,内容如下:  

#加载mod_jk Module

LoadModule jk_module modules/mod_jk-apache-2.2.4.so

 

#指定 workers.properties文件路径

JkWorkersFile conf/workers.properties

 

#指定请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器

 

JkMount /* controller

4.  在http.conf同目录下新建 workers.properties文件,内容如下:  

worker.list = controller   #server列表

 

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

 

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

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

worker.tomcat1.type=ajp13

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

 

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

 

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

worker.tomcat2.host=10.2.121.234 #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

worker.controller.recovery_options=3

 

#worker.controller.socket_keepalive=1

#worker.controller.connection_pool_size=50

#worker.controller.connection_pool_minsize=25

#worker.controller.connection_pool_timeout=600

#worker.controller.socket_timeout=20

说明:

recovery_options属性说明了web server在检测到Tomcat失败后如何进行恢复工作。默认情况下,web server将转发请求给处于负载平衡模式中的另一个Tomcat。属性值为0,说明全部恢复;属性值为1,说明如果在Tomcat接到请求后出现失败状况,则不进行恢复;属性值为2,说明如果在Tomcat发送http头给客户端后出现失败状况,则不进行恢复;属性值为3,说明如果在Tomcat接到请求后出现失败状况或者在Tomcat发送http头给客户端后出现失败状况,则不进行恢复。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认为全部恢复。

因在默认的情况下,JK检测tomcat的工作情况,所以浪费了很多资源,这个资源多到比tomcat正常工作所需的资源的1.6倍还多。如果不检测恢复,则效率高了,处理的请求数可以是原来的2.6倍多,而且tomcat还不死--没响应,反而使出错的数量比检测恢复之后出错的数量还少,性能还加强了

1.3 Tomcat的配置

  修改tomcat1/tomcat2配置文件server.xml,设置jvmRoute:

l 在184服务器的Tomcat 配置文件server.xml配置,如下图:

l 在234服务器的Tomcat 配置文件server.xml配置,如下图:

1.4集群测试

1. 在184服务器的tomcat 默认首页index.html

(路径:%TOMCAT_HOME%\webapps\ROOT\index.html),在页面的顶部增加:

Access tomcat1

2. 在234服务器的tomcat 默认首页index.html

(路径:%TOMCAT_HOME%\webapps\ROOT\index.html),在页面的顶部增加:

Access tomcat2

3. 启动apache,tomcat1,tomcat2,进行测试:

通过http://localhost访问,访问到Tomcat 欢迎界面显示访问的是 234的tomcat节点;再刷新一次,显示访问的是 184的tomcat节点,可以看到请求会被tomcat1,tomcat2轮流处理,实现了负载均衡

  如图:

  

二、Apache负载均衡调优

1.         Httpd.conf 释放httpd-mpm.confhttpd-default.conf

打开httpd.conf配置文件

l  #Include conf/extra/httpd-mpm.conf前的 # 注释去掉

l  #Include conf/extra/httpd-default.conf前的 # 注释去掉

2.         配置httpd-mpm.conf

通过  httpd -l可以,查看自己的Apache部署的是哪个模块。

C:\Apache\Apache2.2\bin\httpd -l
  Complied in modules:
    core.c
    mod_win32.c
    mpm_winnt.c
    http_core.c
    mod_so.c

看到里面有mpm_winnt.c,我们就在httpd-mpm.conf<IfModule mpm_winnt_module>进行配置

l  配置mpm_winnt_module模块

<IfModule mpm_winnt_module>
    ThreadLimit  350    
    ThreadsPerChild     350
    MaxRequestsPerChild    10000
    Win32DisableAcceptEx
    EnableMMAP off
    EnableSendfile off
</IfModule>

3.         配置httpd-default.conf

Timeout50
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

备注:timeout设置apache等待一个连续读写操作的时间长度,也就是连接后,apache等待客户端完成请求发送的时间,或者相应开始之后,apache写出数据到客户端连接的时间长度,
无论对于那种应用来说,300秒的缺省值都有些过长了,意味着,如果客户端发生某种未知因素导致的迟滞连接,服务器的一个连接和与之对应的所有资源都要维持300秒,这个对于重载服务器来说实在是有些过长了,建议将此值设置得小一些,这个长度只要足够保证各种客户端的应用能够正常传递数据即可。视各种客户端的连接状况和服务器的繁忙程度。一般来说设置3-5
KeepAlive On
//
使用保持连接功能,即客户一次请求只能响应一个文件,建议用户将此参数的值设置为on,即允许保持连接的功能;如果同一页面包含大量的静态文件的应用,设置为on,以提高性能;如果用于主要为动态页面的应用,设置为off,以节约内存资源;如果服务器前跑有squid或者其他七层设备,设置为On
MaxKeepAliveRequests 100 
//
在使用保持连接功能时,设置客户一次请求连接能响应文件的最大上限;也就是每个连接允许请求的数量(最多保持多少个活动的长链接)。如果将此设置为“0”,将不限制请求的数目。建议将此值设为100-500之间的一个值,以确保最优的服务器性能。
 KeepAliveTimeout 5
在使用保持连接功能时,两个相邻的连接时间间隔超过5秒就切断连接;也就是设置持久连接中服务器在两次请求之间等待的秒数,对于高负荷服务器来说keeplivetimeout值较大会导致一些性能方面的问题,超时值越大,与空闲客户端保持的连接进程就越多;

三、Session 复制控制

对于大多数集群服务器为防止session丢失,需要考虑session复制,也就是说其中任何一个tomcat的添加的session,是要同步复制到其它tomcat,集群内的tomcat都有相同的session。具体的配置过程如下:

1.  去掉tomcat1和tomcat2中的注释:

2.  将tomcat中的4001端口修改成4002:

3.  增加jvmRoute,tomcat1和tomcat2都需要:

  

注意:tomcat1下jvmRoute=”tomcat1”,tomcat2下jvmRoute=”tomcat2”。

4.  测试session复制

l 在184服务器,%TOMCAT_HOME%\webapps\ROOT目录下,创建test.jsp,内容如下:  

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

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

 

 

Server Info:

<%

out.println(request.getLocalAddr()+" : "+ request.getLocalPort()+"

");%>

<%

 out.println("

ID "+ session.getId()+"

");

 

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

 String dataName= request.getParameter("dataName");

 if(dataName!=null&& dataName.length()>0){

    String dataValue= request.getParameter("dataValue");

    session.setAttribute(dataName, dataValue);

 }

 

 out.print("Session列表");

 

 Enumeration e = session.getAttributeNames();

 while(e.hasMoreElements()){

    String name =(String)e.nextElement();

    String value = session.getAttribute(name).toString();

    out.println( name+" = "+ value+"

");

        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 将test.jsp拷贝到234服务器%TOMCAT_HOME%\webapps\ROOT目录下下,

l 重启apache,tomcat1,tomcat2,输入网址http://localhost/ test.jsp

l 新建一个名称为 crazyiter ,值为 jiangge的session,提交查询,新开一个IE窗口,再提交查询,如图,可以看到,两个tomcat是负载均衡,并且session同步的

  说明:在没有联网的情况下,按照上面的配置启动tomcat要报错,如下图:

原创粉丝点击