前端採用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 |
|