構建用於JMeter分佈式性能測試測試基礎結構不是一件容易的事!前面已經介紹了Docker可以幫助我們建立基礎架構。
在進行實際性能測試時,我們可能會使用自己的服務器或雲,例如AWS-EC2。儘管Docker幫助我們使用JMeter + Java等創建了容器,但是多主機聯網並不是一件容易的事!
這裏查看如何使用RancherOS + Rancher服務:
RancherOS + Rancher Server
Rancher/OS:
RancherOS使在開發、測試和生產中大規模運行容器變得簡單,並且只包含運行Docker所需的服務,操作系統提供了一個非常可靠且易於管理的容器環境。不需要的庫和服務被淘汰,並默認運行最新版本的Docker,從而大大減少了佔用空間,並減少了更新、打補丁和維護容器主機操作系統的麻煩。RancherOS上的容器在幾秒內可啓動,使得團隊可以輕鬆快速地移動和擴展。
RancherOS是一個輕量級的操作系統,而Rancher是一個Docker容器管理平臺,可在RancherOS或安裝了docker的任何其他操作系統上運行。
RancherOS是一個輕量級OS + Rancher的docker-containers管理平臺,它運行在RancherOS或安裝了docker的任何其他OS上運行。
Rancher安裝
- 由於我們將在AWS- ec2中創建其他所有容器,因此首先讓我們在AWS中使用RancherOS創建一個實例。
- 不一定非要RancherOS,任何使用docker的系統都可以
- 也可以在AWS-EC2中創建Linux / Ubuntu實例並安裝docker
- 也可以在本地計算機上完成此操作——但要確保機器與docker沒有任何防火牆。
- 一旦你安裝了docker / RancherOS的本地或者雲系統,那麼我們就需要docker-container管理平臺,也就是Rancher服務器。
- 要啓動Rancher服務器,請運行此命令。
sudo docker run -d –restart=unless-stopped -p 8080:8080 rancher/server
- 等待2-5分鐘,然後訪問:http://aws-or-local-ip-where-rancher-installed:8080
- 你將看到如下的樣子:
AWS入站規則:
作爲本文的一部分,我將使用AWS-EC2。你還可以使用任何VM /Cloud/物理機。
Rancher主使用某些端口與Rancher代理進行通信。請確保以下端口打開:
添加最後3個端口(1099,50000和60000)用於JMeter master與slave通信。
Rancher – 創建環境:
在Rancher UI中創建一個單獨的環境——稱之爲jmeter-distributed-test環境。
Cattle是Rancher自己的容器編排模板,這是默認模板:
Rancher – 創建主機:
選擇環境模板後,下一步就是創建主機。我選擇了Amazon EC2。
- 輸入訪問和密鑰 (Access & Secret keys)
- 選擇區域 (Zone)
- 爲所有機器選擇相同的子網 (subnet )
- 選擇安全組(已經在AWS中創建——請檢查上方的入站規則)
- 選擇數量(我選擇了5個) (Quantity )
- 選擇實例類型和AMI(我選擇了Ubuntu微型實例)
- 一旦你點擊create, Rancher會立即爲你在EC2中創建實例,並在所有實例中設置docker。
所有主機準備就緒後,編輯其中一臺將成爲JMeter-Master的主機。
添加標籤“ io.rancher.host.name = master”。
在接下來的內容中,你將知道爲什麼。
Rancher –創建堆棧:
堆棧只是運行我們的應用程序的一組服務,要運行我們的JMeter-distributed測試,我們需要兩個服務。
1、master service,主服務(我們只需要一個主服務)
2、slave/server service,從屬服務(我們需要N個從屬節點,取決於需求)
-
創建一個堆棧,命名符合規範
-
在堆棧下創建一個master service主服務,如下所示,我們只需要一個容器,這裏我將重用已經創建的docker-image——vinsdocker / jmmaster
- 公開端口60000,並且必須與主機端口60000映射
- 公開端口60000,並且必須與主機端口60000映射
-
如果您點擊“Create”按鈕,Rancher將該容器中的一個主機——這將是隨機的。
這是我們創建的標籤將有用的地方。 -
轉到服務的“Scheduling–調度”部分;添加一個特定的規則來選擇具有你設置標籤的主機。
-
當rancher在特定主機上創建jmeter-master容器時,我們可以創建slave/server服務。
-
除master外,所有主機中都需要jmeter-slaves。
- 使用docker映像:vinsdocker/jmserver
- 公開端口1099和50000
-
調度規則將在除主機之外的所有主機上運行。
-
創建完成後,我們可以看到1個主容器和4個從屬容器。
Rancher 容器:
訪問Rancher的容器部分,查看目前爲止已創建的所有容器的列表,幷包含名稱和ip地址等詳細信息。如下圖,每個容器都在單獨的主機上運行,這纔是實際性能測試的正確設置。
JMeter -分佈式測試:
- 可以點擊主容器最右邊的三個圓點,查看“Execute Shell”選項,以便直接在主容器上運行特定的命令。
- 我執行以下命令,進入JMeter的bin目錄並下載示例測試。
cd /jmeter/apache-jmeter-2.13/bin
wget https://s3-us-west-2.amazonaws.com/dpd-q/jmeter/jmeter-docker-compose.jmx
- 一旦下載了測試,其餘的就很簡單了!
- 運行下面的命令來運行分佈式測試。
- 從機名稱爲
jmeter-server-1,jmeter-server-2,jmeter-server-3,jmeter-server-4
- 從機名稱爲
./jmeter -n -t jmeter-docker-compose.jmx -Rjmeter-server-1,jmeter-server-2,jmeter-server-3,jmeter-server-4
Rancher –導出服務配置:
第一次使用master主服務和slave從服務創建堆棧似乎有點麻煩!其實很簡單。 Rancher還提供了導出此配置的選項——以便您可以在下一次導入/與他人共享。
下次你可以複製粘貼配置/導入文件,你也可以使用下面的配置,因爲我已經導出。
總結
在此之前–設置此測試環境並非易事。我們需要確保所有機器上都安裝相同版本的JMeter + Java + jmeter-plugins +其他依賴項。除此之外,我們還需要確保適當的端口是打開的。有時,由於Java RMI,你仍然會面臨一個問題。
Rancher + Docker + EC2使我們的工作更輕鬆。一旦你上傳了配置——一切設置完畢,所有容器在一分鐘之內就可以運行測試了。
Rancher還公開了一組API以及CLI附帶的內容,可通過編程方式完成所有工作!!