搭建Jmeter容器集群平臺

基于大量虛擬機的Jmeter集群有個缺點汤纸,就是不方便管理衩茸,比如需要重啟Jmeter服務(wù),還需要一個個的連接到虛擬機上進行操作贮泞,而且安裝部署不方便(無法一鍵部署)楞慈,也不方便將集群封裝成整體應(yīng)用對外提供服務(wù)。這些缺點通過Rancher部署的容器云平臺就能夠解決啃擦。

一囊蓝、給各個節(jié)點的虛擬機安裝Docker

可以讓創(chuàng)建虛擬機時就自動帶上統(tǒng)一版本的Docker,就可以省掉這一步操作令蛉,網(wǎng)上還推薦使用DaoCloud進行Docker安裝和鏡像加速聚霜,我們是為了做實現(xiàn),就原始的方式安裝吧:

1珠叔、對于CantOS安裝Docker最好是CentOS7蝎宇,這樣可以保證內(nèi)核至少是3.10(通過uname -r 命令查看),低于這個版本的內(nèi)核無法安裝Docker祷安。

2姥芥、使用 root 權(quán)限登錄 Centos。確保 yum 包更新到最新(sudo yum update)汇鞭,我是沒有更新凉唐。

3庸追、卸載舊版本(如果安裝過舊版本的話)

sudo yum remove docker? docker-common docker-selinux docker-engine

4、安裝需要的軟件包台囱, yum-util 提供yum-config-manager功能淡溯,另外兩個是devicemapper驅(qū)動依賴的

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5、設(shè)置yum源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6玄坦、直接安裝最新版的docker(記住版本寧可最新血筑,也不要低于Rancher所要求的版本)

sudo yum install docker-ce

7、啟動并加入開機啟動

$ sudo systemctl start docker

$ sudo systemctl enable docker

二煎楣、Rancher安裝和配置

可以選擇一臺機獨立安裝,也可以和Jmeter的Master節(jié)點部署在一臺機上车伞。Rancher是一個開源的容器管理平臺(支持華人的產(chǎn)品)择懂,幫助構(gòu)建企業(yè)私有容器服務(wù),相當(dāng)于KVM里的Openstack另玖。

1困曙、直接調(diào)用Docker安裝

sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server

2、登錄Rancher

裝完后谦去,(等啟動完后)通過http://IP:8080登錄慷丽,可以選擇語言為中文版顯示,進行Rancher認證配置(我也不配了鳄哭,直接忽略)

3要糊、Rancher主機添加

Rancher提供了很多machine drivers批量添加主機,我們也簡單一點妆丘,直接選擇Custom手動添加吧

以上的兩標(biāo)簽可先不加锄俄,留后面再加也行,主要是為了標(biāo)識這是主節(jié)點勺拣,host.ip為指定IP(對于Slave節(jié)點不需要加標(biāo)簽io.rancher.host.name=master)奶赠,第4步的IP也可以不用配置,除非是某個節(jié)點主機與Rancher部署在一臺機器上(我就是)药有。最后奔向第5步毅戈,復(fù)制那一串代碼,到需要添加的主機上運行就可以(前提也是主機裝好了Docker愤惰,并且可以訪問Rancher苇经,避免訪問失敗連防火墻也可以先關(guān)了)。

添加完一個主機后羊苟,繼續(xù)添加其他Slave節(jié)點的主機塑陵,我是添加了一臺master(與Rancher共用)、兩臺slave(這三臺機的IP最好都是同網(wǎng)段的蜡励,不要用相鄰網(wǎng)段的令花,比如網(wǎng)段為172.16的虛擬機創(chuàng)建Docker后阻桅,其網(wǎng)橋的默認網(wǎng)段就變成172.17,這就導(dǎo)致和172.17網(wǎng)段的虛擬機會網(wǎng)絡(luò)沖突兼都,碰到?jīng)_突臨時的解決方式就是手動修改網(wǎng)橋docker0的網(wǎng)段并重啟機器)

逐臺主機登錄輸入命令添加Custom也挺頭疼嫂沉,可以使用expect編寫一個腳本來減輕部分工作量(我就添加三臺,用不上):

#!/usr/bin/expect

set timeout -1

set ip [lindex $argv 0]

spawn ssh root@$ip

expect {

? ? "*Are you sure you want to continue connecting (yes/no)?*" { send "yes\r" }

? ? "*password*" { send "123456\r" }

}

expect {

? ? "*password*" { send "123456\r" }

}

expect {

? ? "]# " { send "sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.2 http://123.207.234.119:8080/v1/scripts/EE431DCFC650693D335A:1483142400000:3FSEGIHT9rsY68RViGJGV8sBiBk\r" }

}

send "exit\r"

expect eof

exit

添加完三臺主機后的效果:

4扮碧、添加Jmeter應(yīng)用

添加應(yīng)用(Add Stack)就是填寫docker-compose.yml和rancher-compose.yml趟章。由于slave集群在壓測過程中往往由于壓力過大出現(xiàn)各種rmi異常導(dǎo)致崩潰,我們把主從分別建兩個應(yīng)用(Stack)慎王。

jmeter-master的docker-compose.yml配置如下(調(diào)用的是Docker Hub鏡像庫里的鏡像):

version: '2'

services:

? master:

? ? image: malfurionpd/jmeter-master

? ? stdin_open: true

? ? network_mode: host

? ? tty: true

? ? ports:

? ? - 60000:60000/tcp

? ? labels:

? ? ? io.rancher.scheduler.affinity:host_label: io.rancher.host.name=master

? ? ? io.rancher.container.pull_image: always

jmeter-master的rancher-compose.yml配置如下:

version: '2'

services:

? master:

? ? scale: 1

? ? start_on_create: true

jmeter-slaves的docker-compose.yml配置如下(包含多節(jié)點):

version: '2'

services:

? slave01:

? ? image: malfurionpd/jmeter-slave-ip

? ? environment:

? ? ? HOST_IP: 172.16.1.37

? ? stdin_open: true

? ? tty: true

? ? ports:

? ? - 1099:1099/tcp

? ? - 50000:50000/tcp

? ? labels:

? ? ? io.rancher.container.pull_image: always

? ? ? io.rancher.scheduler.affinity:host_label: host.ip=172.16.1.37

? slave02:

? ? image: malfurionpd/jmeter-slave-ip

? ? environment:

? ? ? HOST_IP: 172.16.1.140

? ? stdin_open: true

? ? tty: true

? ? ports:

? ? - 1099:1099/tcp

? ? - 50000:50000/tcp

? ? labels:

? ? ? io.rancher.container.pull_image: always

? ? ? io.rancher.scheduler.affinity:host_label: host.ip=172.16.1.140

jmeter-slaves的rancher-compose.yml配置如下:

version: '2'

services:

? slave01:

? ? scale: 1

? ? start_on_create: true

? slave02:

? ? scale: 1

? ? start_on_create: true

添加應(yīng)用時導(dǎo)入以上配置文件蚓土,點擊創(chuàng)建,順間就能創(chuàng)建jmeter集群(幾秒鐘的事情)赖淤。

創(chuàng)建好的集群各個節(jié)點蜀漆,就可以方便的進行管理(升級、重啟咱旱、停止服務(wù)确丢、查看日志、執(zhí)行命令行等操作)吐限,無需連接Linux鲜侥,就可直接進行各節(jié)點的命令操作:

通過以上ps查看,就能發(fā)現(xiàn)jmeter的從節(jié)點自動啟動了jmeter-server诸典,無需人為操作jmeter-server的啟動描函。

登錄到master主機,也能看到j(luò)meter-master容器和rancher服務(wù)

說明:以上的鏡像是用jmeter 3.2構(gòu)建的搂赋,如果覺得版本不滿足要求赘阀,可以自己構(gòu)建鏡像,可參考構(gòu)建代碼:

https://github.com/malfurionpd/docker-files

三脑奠、Jmeter集群應(yīng)用

到這一步就可以驗證上面的成果了基公,直接到一個腳本newTest.jmx進行測試:

jmeter -n -t /jmeter/apache-jmeter-3.2/bin/newTest.jmx -Djava.rmi.server.hostname=172.16.1.30 -Dclient.rmi.localport=60000 -R 172.16.1.140,172.16.1.37 -l /jmeter/apache-jmeter-3.2/DashReport/log-222.csv -e -o /jmeter/apache-jmeter-3.2/DashReport/htmlReport-222

將輸出的報告從容器中拷出用html查看,一切OK

四宋欺、擴展應(yīng)用

以上已經(jīng)實現(xiàn)了一套Jmeter的容器云平臺轰豆,但是為了讓腳本和報告集中管理,我們需要構(gòu)建一個文件服務(wù)器齿诞,通過nginx或是SVN都行酸休。在文件目錄下建立jmx,jtl祷杈,report三個子目錄斑司。

將本機編輯和測試通過的腳本,直接上傳到文件服務(wù)器上(需要配置SSH免密登錄)

scp newTest.jmx root@x.x.x.x:/data/jmetertest/jmx/

通master節(jié)點的jmeter可以直接連接文件服務(wù)器調(diào)用腳本但汞,并將生成的報告保存到文件服務(wù)器上宿刮。以下是jmeter的示例腳本:

#!/bin/bash

if [ ! -n "$1" ] ;then

? ? ? ? echo 'give me a parameter, ok?'

else

? ? ? ? now=`date --date='0 days ago' "+%Y%m%d%H%M%S"`

? ? ? ? echo "=====Start JMeter Test $1 on $now"

? ? ? ? echo "=====Step1 wget"

? ? ? ? cmd1="wget -P /jmeter/apache-jmeter-3.2/bin/ https://xxx.xxx.xxx/jmetertest/jmx/$1"

? ? ? ? eval ${cmd1}

? ? ? ? echo "=====Step2 makedir in local"

? ? ? ? #jmeter-jtl

? ? ? ? if [ ! -d "/jmeter-jtl" ]; then

? ? ? ? ? ? ? ? mkdir /jmeter-jtl

? ? ? ? fi

? ? ? ? #jmeter-jtl/xxx.jmx

? ? ? ? if [ ! -d "/jmeter-jtl/$1" ]; then

? ? ? ? ? ? ? ? mkdir "/jmeter-jtl/$1"

? ? ? ? fi

? ? ? ? #jmeter-report

? ? ? ? if [ ! -d "/jmeter-report" ]; then

? ? ? ? ? ? ? ? mkdir /jmeter-report

? ? ? ? fi

? ? ? ? #jmeter-report/xxx.jmx

? ? ? ? if [ ! -d "/jmeter-report/$1" ]; then

? ? ? ? ? ? ? ? mkdir "/jmeter-report/$1"

? ? ? ? fi

? ? ? ? echo "=====Step3 jmeter"

? ? ? ? cmd2="/jmeter/apache-jmeter-3.2/bin/jmeter -n -t /jmeter/apache-jmeter-3.2/bin/$1 -l /jmeter-jtl/$1/$now.jtl -e -o /jmeter-report/$1/$now -Djava.rmi.server.hostname=172.16.1.30 -Dclient.rmi.localport=60000 -R 172.16.1.37,172.16.1.140"

? ? ? ? eval ${cmd2}

? ? ? ? tip="10.135.147.74"

? ? ? ? echo "=====Step4 scp"

? ? ? ? #scp jtl

? ? ? ? tjtl="/data/jmetertest/jmetertest/jtl"

? ? ? ? cmd3="ssh root@${tip} \"[ -d ${tjtl}/$1 ] && echo ok || mkdir -p ${tjtl}/$1\""

? ? ? ? eval ${cmd3}

? ? ? ? cmd4="scp /jmeter-jtl/$1/$now.jtl root@${tip}:${tjtl}/$1/"

? ? ? ? eval ${cmd4}

? ? ? ? #scp report

? ? ? ? treport="/data/jmetertest/report"

? ? ? ? cmd5="ssh root@${tip} \"[ -d ${treport}/$1 ] && echo ok || mkdir -p ${treport}/$1\""

? ? ? ? eval ${cmd5}

? ? ? ? cmd6="ssh root@${tip} \"[ -d ${treport}/$1/$now ] && echo ok || mkdir -p ${treport}/$1/$now\""

? ? ? ? eval ${cmd6}

? ? ? ? cmd7="scp -r /jmeter-report/$1/$now root@${tip}:${treport}/$1/"

? ? ? ? eval ${cmd7}

? ? ? ? echo "=====End JMeter Test $1 on $now"

fi

備注說明:上面所用到的jmeter鏡像都是從DockerHub調(diào)用的互站,為了方便鏡像的分布式下發(fā)和運行,調(diào)用DockerHub的鏡像是個簡便的方式僵缺,我們也可以自己生成jmeter鏡像胡桃,申請個Docker Hub賬號后上傳到鏡像庫里。

由于Rancher還有很多其他功能磕潮,也可以做一些其他方面的集成翠胰,后續(xù)再做研究!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末自脯,一起剝皮案震驚了整個濱河市之景,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膏潮,老刑警劉巖闺兢,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異戏罢,居然都是意外死亡,警方通過查閱死者的電腦和手機脚囊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門龟糕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悔耘,你說我怎么就攤上這事讲岁。” “怎么了衬以?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵缓艳,是天一觀的道長。 經(jīng)常有香客問我看峻,道長阶淘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任互妓,我火速辦了婚禮溪窒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冯勉。我一直安慰自己澈蚌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布灼狰。 她就那樣靜靜地躺著宛瞄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪交胚。 梳的紋絲不亂的頭發(fā)上份汗,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天盈电,我揣著相機與錄音,去河邊找鬼裸影。 笑死挣轨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轩猩。 我是一名探鬼主播卷扮,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼均践!你這毒婦竟也來了晤锹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彤委,失蹤者是張志新(化名)和其女友劉穎鞭铆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焦影,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡车遂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了斯辰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舶担。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彬呻,靈堂內(nèi)的尸體忽然破棺而出衣陶,到底是詐尸還是另有隱情,我是刑警寧澤闸氮,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布剪况,位于F島的核電站,受9級特大地震影響蒲跨,放射性物質(zhì)發(fā)生泄漏译断。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一财骨、第九天 我趴在偏房一處隱蔽的房頂上張望镐作。 院中可真熱鬧,春花似錦隆箩、人聲如沸该贾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杨蛋。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逞力,已是汗流浹背曙寡。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寇荧,地道東北人举庶。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像揩抡,于是被迫代替她去往敵國和親户侥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容