前端采用Apache mod_jk 实 现负载平衡
后端使用JDBC 存储 的永久会话管理器实现session 共享
1. 安 装Apche,Tomcat
http://httpd.apache.org/ 下载Apache 2.0.55
http://tomcat.apache.org/ 下载tomcat6.0.18 zip 版本(解压即 可,绿色版)
http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/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 配 置<Manager> 元素
向每个位于 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 测 试环境
设 备 | 硬件配置 | 软件配置 |
WEB 服务器 | Apache2.0 + Tomcat6.0 × 3 Apache 服务器和tomcat-137 位于物理机器一上(内存2G , 双核CPU ),tomcat-138 位于物理机器二上(内存2G , 双核CPU ),tomcat-139 位于物理机器三上(内存1G ,单核CPU )
| Windows Server 2003 |
数据库服务器 | Power Edge 2950 Cpu: INTEL XEON E5420 主频 2.5GHZ (2路四核) 内存:4G
| Oracle 10g |
负载产生设备及客户端 | 方正PC 机(一台) CPU :Intel(R)Celeron(R)D cup3.06GHz 内存:1.0G | Windows 2003 server LoadRunner9.5 Microsoft Office2003 |
网络环境 | 单位内网 |
6.2 测 试用例及脚本开发
用例编号 | 用例名称 | 开发情况 |
C01 | 并发访问首页 | 在事物中插入集合点 |
C02 | 并发登录 | 屏蔽用户重复登录 |
C03 | 答疑问题查询 | 单独做压力测试接口 |
6.3 、 测试方法&场景设计
1 、 模拟用户行为,录制用例的操作过程,
2 、模拟不同的用户数量:进行 并发测试100 、200 、400 、500 、. 。。。。
3 、压力持续5 分钟,10 分钟
6.4 、 执行用例
C01 (打开首页)
l 前置条件: Apache2.0 + Tomcat6.0 ×3
l 测试结果
<td style="padding-right: 5.4pt; border-top: #d4d0c8; padding-left: 5.4pt; padding-bottom: 0cm; border-left: #d4d0c8; width: 52.8pt; padding-top
用户数量 | 迭代次数 | Minimum | Average | Maximum | Pass | Fail | Stop | 测试结果 |
100 | 1 |
| 2 .29 |
| 100 |
|
|
|
200 | 1 |
| 2.80 |
| 200 |
|
|
|
400 | 1 |
| 5 .2 |
| 400 |
|
|
|
800 | 1 |
|