文档库 最新最全的文档下载
当前位置:文档库 › Apache 2+Tomcat 6负载均衡与集群配置及性能测试详解

Apache 2+Tomcat 6负载均衡与集群配置及性能测试详解

Apache 2+Tomcat 6负载均衡与集群配置及性能测试

负载均衡,就是apache将客户请求均衡的分给tomcat1,tomcat2....去处理,Tomcat中的集群使一组局域网上的Tomcat实例在用户看起来是单一的服务器,是实现系统资源高利用率的有效解决方案。该文章描述了一个实际的Tomcat6集群的配置,此集群包含独立的三个Tomcat6实例。

前端采用Apache mod_jk实现负载平衡

后端使用JDBC存储的永久会话管理器实现session共享

1.安装Apche,Tomcat

https://www.wendangku.net/doc/da2957344.html,/下载Apache 2.0.55

https://www.wendangku.net/doc/da2957344.html,/下载tomcat6.0.18 zip版本(解压即可,绿色版)

https://www.wendangku.net/doc/da2957344.html,/tomcat/tomcat-connectors/jk/binaries/win3 2/jk-1.2.15/下载mod_jk,注意和apache版本匹配

安装Apache服务器到物理机器一(假设IP为59.73.195.137),安装路径为D:\Apace2

在物理机器一、二(假设IP为59.73.195.138)、三假设IP为59.73.195.139中解压下载的Tomcat压缩包,解压路径为D盘根目录。(为便于区分,可以分别重命名解压文件夹名称为tomcat-137,tomcat-138,tomcat-139)

2、配置Apache服务器

2.1 导入mod_jk模块

将下载的二进制文件mod_jk-1.2.28-httpd-2.0.52.so拷贝到物理机器一的:D:\Apache2\modules文件夹下

2.2修改Apache配置文件http.conf

在apache安装目录下conf目录中找到http.conf

在文件最后加上下面一句话:include "D:\Apache2\conf\mod_jk.conf",如下所示

2.3 新建mod_jk.conf文件

在物理机器一下D:\Apache2\conf\ 新建mod_jk.conf文件,文件内容如下:

#加载mod_jk Module

LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.0.52.so

#指定workers.properties文件路径

JkWorkersFile conf/workers.properties

#告知mod_jk将自己日志写到哪里

JkLogFile logs/mod_jk_cluster.log

#控制日志级别,info为正常的日志级别,error和debug级别将提供更多的日志细节

JkLogLevel debug

#记录Tomcat worker名称、网址、和每个请求的时间

JkRequestLogFormat "%w %U %T"

#指定那些请求交给tomcat处理,controller为在workers.propertise里指定的负载分配控制器JkMount /* ball

JkMount /jkstatus/ stat1

如下图所:

2.4新建worker.properties文件

在物理机器一下D:\Apache2\conf\ 新建worker.properties文件,文件内容如下:

worker.list =ball,stat1 #server 列表

#========tomcat-137========

worker.tomcat-137.type=ajp13 #ajp13 端口号,在tomcat下server.xml配置,默认8009

worker.tomcat-137.host=59.73.195.137 #tomcat的主机地址,如不为本机,请填写ip地址worker.tomcat-137.port=8009

worker.tomcat-137.lbfactor = 10 #server的加权比重,值越高,分得的请求越多

#========tomcat-138========

worker.tomcat-138.type=ajp13 #ajp13 端口号,在tomcat下server.xml配置,默认8009

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

worker.tomcat-138.port=8009

worker.tomcat-138.lbfactor = 10 #server的加权比重,值越高,分得的请求越多

#========tomcat-139========

worker.tomcat-139.type=ajp13 #ajp13 端口号,在tomcat下server.xml配置,默认8009

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

worker.tomcat-139.port=8009

worker.tomcat-139.lbfactor = 10 #server的加权比重,值越高,分得的请求越多

worker.ball.type=lb

worker.ball.sticky_session=1 #默认为1,表示同样的tomcat服务实例将服务来自同样会话的请求

worker.ball.balance_workers=tomcat-137,tomcat-138,tomcat-139

worker.stat1.type=status

如下图所示:

3、配置tomcat服务器

3.1启用AJP连接器

在每一个Tomcat相应目录下修改server.xml文件,在此以物理机器一为实例:

打开D:\tomcat-137\conf\server.xml文件,启用AJP连接器,即将默认注释的AJP链接器取消注释

3.2禁用默认的HTTP/1.1连接器

在3.1所属的文件中,注释掉所有Tomcat实例的HTTP连接器的配置,如下所示:

3.3在Catalina Engine中设置jvmRoute

在每一个Tomcat实例的server.xml文件中添加一个jvmRoute属性。该属性ID必须与workers.properties文件中唯一的jvmRoute ID一一对应。对应物理机一得tomcat-137,使用的条目如下所示:

添加前面的所示的Engine指令后,需要注释掉默认的Catalina Engine指令,如下所示:

3.4配置Web.xml文件

在每一个tomcat实例webapps下的应用程序的WEB-INF\web.xml添加

distributable属性,添加位置如下:

4、配置使用JDBC存储的永久会话管理器

在本配置中,一个oracle的RDBMS表用于存储共享信息并使用集群中的Tomcat实例能够通过经JDBC的永久会话管理器共享会话信息。

4.1 在Oracle数据库中创建一用户及相关数据表

新用户名empro密码 empass

给empro授予相关权限(略)

以empro用户登录,创建Tomcat_sessions表

create table tomcat_sessions(

session_id varchar2(100) not null primary key,

valid_session char(1) not null,

max_inactive integer not null,

last_access number(20) not null,

app_context varchar2(255),

session_data blob)

create index kapp_context on tomcat_sessions(app_context);

commit

4.2配置元素

向每个位于webapps/应用程序名/META-INF 目录(如果这个目录不存在,则创建它)下的集群节点添加一个context.xml文件,文件内容如下:

5、同步tomcat集群内部机器时钟

因为tomcat实例是部署在多台物理机器上,必须确保这些物理机器的时钟是同步的,在此通过通过以下配置实现时钟同步效果。每台物理机器都需进行配置操作。

Step1:

在“开始”菜单→“运行”项下(或按Win+R)输入“Regedit”进入注册表编辑器。

Step2:

展开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\ Parameters]分支,双击NtpServer将键值修改为国家授时中心服务器的IP地址:

210.72.145.44,然后点击“确定”按钮保存。

Step3:

展开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\ TimeProviders\NtpClient]分支,并双击SpecialPollInterval键值,将对话框中的“基数栏”选择到“十进制”上,输入框中显示的数字正是自动对时的间隔(以秒为单位),比如默认的604800就是由7(天)×24(时)×60(分)×60(秒)计算来的。设定时间同步周期(建议设为

900=15分钟或3600=1小时等周期值),填入对话框,点击确定保存关闭对话框。

6、性能测试现象比较

6.1测试环境

6.2测试用例及脚本开发

6.3、测试方法&场景设计

1、模拟用户行为,录制用例的操作过程,

2、模拟不同的用户数量:进行并发测试100、200、400、500、.。。。。

3、压力持续5分钟,10

分钟

6.4、执行用例

C01(打开首页)

● 前置条件:Apache2.0 + Tomcat6.0 ×3

C02(并发登录)

●前置条件:Apache2.0 + Tomcat6.0 ×3

●前置条件:Apache2.0 + Tomcat6.0 ×2

●前置条件:Apache2.0 + Tomcat6.0 ×1

C03、答疑问题查询测试结果

●前置条件:Apache2.0 + Tomcat6.0 ×3

6.5、测试总结

通过比较测试结果发现,Apache+Tomcat×3配置的性能明显高于Apache+Tomcat×2和Apache+Tomcat×1配置的性能,在Apache+Tomcat×3的配置条件下,打开首页的用户并发数达到800时,平均响应时间为10.6秒,登录的用户并发数为次数时,其中有789个用户能正常登录,11个并发用户登录失败,平均响应时间在35秒左右,答疑问题查询的用户并发数达到700时,平均响应时间为97秒,全部用户的查询操作都执行成功。根据一般规律,可得出,该配置可支持同时访问用户人数为10000左右。

7、相关问题解决方案

7.1

当并发用户数达到一定数量时,所有操作失败,检查数据库连接时,报一下错误:ORA-12519 TNS:no appropriate service handler found

原因:数据库当前连接数可能已经超过它能处理的最大值

select count(*) from v$process --当前的连接数

select value from v$parameter where name = 'processes' --数据库允许的最大连接数

通过执行以上查询发现确实是该原因所致

解决方法:

修改最大连接数:

alter system set processes = 300 scope = spfile;

重启数据库

7.2

当用户并发数过大,出现如下错误:

Users:Action.c(6): Error -27791: Server "59.73.195.137" has shut down the connection prematurely.

通过查看apache日志,发现如下错误日志

Child 9808: Process exiting because it reached MaxRequestsPerChild. Signaling the parent to restart a new child process.

原因:当子进程的当前请求数达到最大请求数时,对于新的请求,Apache将直接关闭该请求连接,同时重启父进程。

解决方法:

修改Apache配置文件http.conf的部分如下:

ThreadsPerChild 1500

MaxRequestsPerChild 5000

其中ThreadsPerChild 表示没个进程的线程数,该值最大只能为1920,MaxRequestsPerChild 表示每个进程能处理的最大请求数,当超过该值时,可能导致Apache关闭该该请求连接并重启,该值默认为0,表示无限。Apache错误日志出现上述信息时,可将MaxRequestsPerChlid 数适当提高,如果太高可能会消耗系统太多资源,导致Apache服务器性能反而降低。

7.3

Vusers:Action.c(6):Error-26610:HTTPStatus-Code=502(BadGateway)for"http://59.73.195.137/hs oronline/login.action"

由于连接过多,Apache是服务器的问题返回非法响应信息。

7.4

Vusers:Action.c(6): Error -26609: HTTP Status-Code=503 (Service Temporarily Unavailable) for "http://59.73.195.137/hsoronline/login.action"

原因:Tomcat服务器由于维护负载过重未能应答。可能是因为Servlet数据库连接池已满。

7.5

Tomcat 性能调优

——JVM参数调优

由于是在Windows环境下,修改各个tomcat实例下/Catalina.bat 并添加如下代码行:

Set JA VA_OPTS=%JA V A_OPTS% -Xms256m -Xmx512m -XX:MaxNewSize=512m -XX:MaxPermSize=512m

——关闭Web应用程序的自动部署和重载功能

编辑各个tomcat实例下sever.xml文件并设置相应的Host里的autoDeploy属性为false,示例如下:

unpackW ARs="true" autoDeploy="false"

xmlValidation="false" xmlNamespaceAware="false">

相关文档
相关文档 最新文档