性能工具之ngrinder區域配置小談
- 2019 年 12 月 24 日
- 筆記
背景
在日常的壓測過程中,不同服務可能部署在不同的機房,為了避免網路因素,通常會在同網路環境下部署相應的壓力機。理解原理才能做到《千山同一月,萬戶盡皆春。千江有水千江月,萬里無雲萬里天》
架構圖

決策分析圖一

知識複習:
第一層是業務指標,
- 響應時間
- TPS
- 錯誤率
第二層是作業系統
- CPU
- IO
- MEM
- NET
分析
因為現在用的ngrinder系統,集成的是所有機房的Agent,所以當對伺服器集群進行壓測時,ngrinder系統的Controller會隨機從集群中選取壓力機,這樣就有可能會出現壓測其他機房的服務使用的是另一個服務群壓力機,因為兩個機房的頻寬並不足以支撐壓測,可能會導致壓測結果失真。
為了解決以上的問題,引入ngrinder系統區域的概念,即壓測XX服務集群,只會用本身機房的5台壓力機,壓測其他服務集群,只會使用本身的5台壓力機,實現結果如下:

通過在場景中簡單的配置解決以上問題。
第一步 重命名war包並啟動control服務
將ngrinder的war包上傳到伺服器(/usr/local),為了方便訪問我們這裡將war包重命名

啟動control服務: java -XX:MaxPermSize=200m-jar ROOT.war

出現2018-11-30 12:01:56.326:INFO:oejs.Server:main: Started @18683ms即表示服務啟動成功,ps:這裡啟動服務是為了解壓,如果不啟動則不會有下一步的h2-1.3.168.jar包生成。
第二步 修改資料庫模式
因為之前ngrinder使用了中間件tomcat啟動,tomcat啟動的資料庫模式是使用的內嵌模式,而配置region需要使用Server模式,所以我們需要把內嵌模式改成Server模式。
1、將資料庫jar包複製一份至/usr/local下
cp -R /root/.ngrinder/tmp/webapp/WEB-INF/lib/h2-1.3.168.jar /usr/local/
2、在usr/local下啟動資料庫,這裡為了便於復用,我們將啟動資料庫的命令放到一個shell文件里
vim h2start.sh nohup java -cp "h2-1.3.168.jar:$H2DRIVERS:$CLASSPATH" org.h2.tools.Server -tcpAllowOthers -webAllowOthers -baseDir /root/.ngrinder -webPort 9092 -tcpPort 9083 "$@" & chmod 777 h2start.sh //賦予許可權 ./h2start.sh //啟動資料庫
在nohup.out里出現如下資訊表示資料庫啟動成功

ps: tcpAllowOthers表示允許其他成員連接
webPort:資料庫web頁面的埠號,可通過ip+埠號訪問資料庫的web頁面
tcpPort:資料庫連接埠號
第三步 重新啟動control
1、切換到urs/local下,先載入環境變數再啟動應用服務
載入環境變數:
sudo su
source /etc/profile
啟動服務,這裡為了便於復用,同樣也是放到一個shell文件里
vim lugu8080.sh nohup java -jar -XX:MaxPermSize=500m -jar ROOT.war -p 8080 -cm easy -clp 10010 -r lugu -cp 9001 -dh XX.XX.XX.XXX -dp 9083 & chmod 777 lugu8080.sh //賦許可權 ./lugu8080.sh
再啟動阿里雲的區域,同上
vim aliyun8081.sh nohup java -jar -XX:MaxPermSize=500m -jar ROOT.war -p 8081 -cm easy -clp 10011 -r aliyun -cp 9002 -dh XX.XX.XX.XXX -dp 9083 & chmod 777 aliyun8081.sh //賦權 ./aliyun8081.sh //啟動應用程式 -p:web訪問埠號,不同的region對應不同的埠號 -cm:control模式,這裡配置的是簡易集群模式 -r:區域名稱 -dh:連接資料庫的地址 -dp:連接資料庫的埠號,這裡的埠號與上一步資料庫的tcpPort保持一致 -cp:控制埠,這個後續Agent配置里會用到該埠
2、登錄後新建場景即可看到區域選項

至此region區域配置完成
第四步 數據遷移部分(如果不需要數據遷移可跳過此部分)
由於之前一直使用的是內嵌資料庫,應用程式會將數據存儲在/root/.ngrinder/db/ h2.h2.db資料庫中,而使用Server模式則會存放在/root/.ngrinder/db/ngrinder.h2.db目錄下,所以需要保存之前的壓測數據。
1.將現在使用的資料庫備份:
cd /root/.ngrinder/db mv ngrinder.h2.db ngrinder.h2.db.bak
2.將h2.h2.db重命名為ngrinder.h2.db
mv h2.h2.db ngrinder.h2.db
3.重新啟動服務
驗證:
1.在內嵌模式下添加一個腳本和場景


2.切換至Server模式,查看場景和腳本是否存在


從上圖可知,場景和腳本中的數據均未丟失,數據保持完整性。
其他 Agent配置:
Agent的默認存放位置為/usr/local
sudo su //切換超級用戶
source /etc/profile //載入環境變數
/usr/local/ngrinder-agent //進入到該目錄下
vim __agent.conf //編輯Agent的配置文件
修改agent.controller_port與agent.region和第三步啟動應用時設置的埠號、區域一致

修改後如下:

./run_agent_bg.sh -o //啟動Agent並載入配置文件
使用admin用戶登錄,在代理管理下看到該Agent表示啟動成功
至此lugu區域Agent配置完成。
阿里雲配置與其他類似,保證埠號配置一致即可

長江後浪推前浪,世上新人趕舊人,
江山代有人才出,下一句是各領風騷數百年。

