一、集群配置
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端口号,在tomcat下server.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端口号,在tomcat下server.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.conf、httpd-default.conf
打开httpd.conf配置文件
l 将 #Include conf/extra/httpd-mpm.conf 前的 # 注释去掉
l 将 #Include conf/extra/httpd-default.conf 前的 # 注释去掉
2. 配置httpd-mpm.conf
l 通过 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要报错,如下图: