一、為什么要搭建集群?
主要原因單台服務器沒有辦法滿足系統的壓力,通過多台服務器來緩解壓力。
二、Jmeter 分布式原理
1.JMeter 分布式測試,選擇節點來做調度服務器,其他的節點作為執行節點,通過調度節點管理其他節點;
2.啟動服務時,調度服務器會把腳本發送到各個執行節點(腳本會發送到執行節點,但是數據不會發送),執行節點拿到腳本開始執行命令;
3.各個執行節點執行結束以后將結果回傳給調度節點,調度節點進行數據匯總;
原理圖:
三、環境搭建
1、每個節點安裝Jmeter。
2、進入Jmeter 調度節點(Jmeter Controller )bin目錄,編輯meter.properties
jmeter.properties文件中搜索關鍵字remote_hosts,來添加Slave 節點的IP,默認Jmeter Server的端口是1099,如果需要修改取消server_port注釋進行修改
注意:
如果你想Controller節點也參與施壓,remote_host 內容需要添加本機地址
3.編輯Salve 節點jmeter-server文件,將服務器的主機IP設置為固定值
4.啟動所有參與請求的節點jmeter-server,進入bin目錄啟動
./jmeter-server
注意: 1.如果你的Controller節點參與了請求,此時jmeter-server也需要啟動;
2.執行的腳本進行文件參數化,此時需要存放在jmeter-server啟動的相對位置路徑,而不是你腳本存儲的相對路徑,首先執行的時候,Controller節點會對腳本下發,他會下發到jmeter-server啟動的路徑,而不是你腳本存放的路徑
此時將Jmeter的分布式集群搭建完成,剩下的就是來運行測試腳本了
5.運行測試腳本
- 啟動所有Slave節點(添加參數-r)
jmeter -n -t osg-uus服務目標ping接口.jmx -l result/17-1-200-1/testResult.jtl -e -o result/17-1-200-1 -r
- 啟動指定Slave節點
jmeter -n -t osg-uus服務目標ping接口.jmx -l result/17-1-200-1/testResult.jtl -e -o result/17-1-200-1 -R 172.29.64.11
6.Jmeter 命令介紹
參數 | 解釋 |
-n | 非 GUI 模式 |
-t | 運行的 JMeter 測試腳本文件 |
-l | 指定記錄結果的文件 |
-r | 啟動所有Slave節點 |
-R | 指定啟動Slave節點,多個節點通過,分隔 |
四、遇見的坑
由於壓測的過程由於需要改變網絡環境,但是服務器域名映射依然是舊地址,在遠程請求的過程中無法連通,導致分析很久,最好將hostname映射關系添加在hosts文件避免這樣的錯誤
其實很早想記錄下Jmeter集群搭建,也不知道什么理由一直拖到了現在,疫情期間在家辦公,也不知道啥時候上班啥時候下班,趁着孩子睡覺,記錄下。