作者: 趙怡
一、shaker簡介
Shaker是一款在OpenStack環境中使用的網絡性能測試工具, 可針對不同網絡場景進行性能測試。
主要原理是, 通過heat模板創建虛擬機, 並使用虛擬機中的iperf3,netperf工具進行虛擬機間互相打流測試網絡性能, 最終抓取測試結果, 通過網頁方式輸出給用戶。
二、shaker安裝
由於shaker依賴於heat編排組件用於自動創建虛擬機和網絡, 所以先要安裝openstack heat組件。
另外, shaker本身可以手動安裝, 也可以通過pip install pyshaker方式安裝
手動安裝
1. 從github上下載shaker軟件源代碼
# git clone https://github.com/openstack/shaker.git |
2. 安裝shaker時, 爲了依賴包不干擾現有環境的python庫, 可以把shaker安裝在virtualenv中
# pip install virtualenv # cd shaker # virtualenv .venv # source .venv/bin/activate (.venv) # (.venv) # yum install gcc libyaml zeromq-devel -y (.venv) # pip install pytz functools32 (.venv) # pip install -r ./requirements.txt (.venv) # python ./setup.py install |
3. 創建shaker要使用到的定製image
這裏會連接到客戶的openstack,自動生成shaker-flavor以及通過heat模板創建一個shaker會使用到的image(通過創建虛擬機, 執行下載/安裝腳本, 然後創建快照方式生成image),image中會下載iperf/netperf工具, 以及通過pip安裝pyshaker-agent代理。
由於涉及到下載, 安裝, 需要保證您的openstack中的外部網絡可以訪問外網。
(.venv) # source admin-openrc.sh (.venv) # shaker-image-builder |
4. 運行shaker, 這裏會使用heat根據用戶指定的場景創建一堆虛擬機, 並在虛擬機上執行shaker-agent來執行測試操作。結果輸出到report中。
(.venv) # shaker --server-endpoint 10.65.1.49:8033 --scenario /root/shaker/shaker/scenarios/openstack/full_l2.yaml --report ./shaker_report.html |
5. 測試結果樣例如下:
測試結果
三、shaker原理
製作Shaker-Image
命令:shaker-image-builder; 命令會執行默認配置,如果需要改變配置 (比如選擇不同的虛擬機鏡像模板)可以用 --help
創作shaker-image的過程實際上是調用heat建立一個stack, 利用配置userdata文件,在鏡像模板啓動虛擬機時,將pyshaker-agent,iperf, netperf這些測試工具都安裝在虛擬機裏。
由於Shaker這個項目還不成熟,可以利用devstack環境,將shaker-image先創建,然後註冊到測試環境的glance裏面,然後創建一個合適的shaker-flavor, 這樣可以避免很多錯誤。
具體原理
這個命令底層就調用了一個Python函數,“shaker/engine/image_builder.py”中的“build_image” 函數。
Shaker提供了三種製作“shaker-image”鏡像的模板:centos、debian、ubutnu,默認使用ubuntu,可以使用“--image-builder-template ”參數指定使用哪個鏡像,使用哪個鏡像對Shaker來說都一樣,Shaker在乎的是鏡像中的pyshaker-agent、iperf、netperf、flent工具,換句話說,“鏡像中只要有這幾款工具,任何系統都可以實現!”
“build_image”函數會創建名字爲“ shaker-flavor”的Flavor(1vcpu、512mb memory、3g disk),以及名字爲“shaker-image”的Glance鏡像,Shaker創建鏡像底層使用的技術是Heat,“build_image”函數讀取“shaker/resources/image_builder_templates/ ”目錄下的模板文件,默認是Ubuntu,然後由Heat創建需要的Network、Router,下載原始鏡像,然後通過“cloud-init”工具,安裝Shaker需要的工具,“build_image”函數會等待虛擬機關機,最後創建虛擬機的快照,上傳到Glance中。
“build_image”函數創建鏡像之前會檢查Glance是否存在名爲“shaker-image”的鏡像和名爲“shaker-flavor”的Flavor,如果已經存在,就不會再次創建了,所以不管使用哪個原始鏡像創建“shaker-image”鏡像,都只會創建一個不會重複。例如第一次使用Ubuntu,那麼第二次使用“centos、shaker-image-builder ”命令會直接返回!
測試
shaker --output output.json --verbose --server-endpoint 10.2.17.2:9999--scenario openstack/full_l2
--output 指定把Raw格式的報告存放到哪個文件
--server-endpoint 指shaker server運行時監聽的IP地址和端口,端口隨意,不衝突即可,虛擬機中的“shaker-agent”會連接到這個socket上,和shakerserver通訊,由shaker告知需要測試的項目以及相關節點信息(如IP)
--scenario Shaker 項目提供多種場景的模板進行測試,詳細可以查看
https://github.com/openstack/shaker/tree/master/shaker/scenarios/openstack
注: 由於Shaker相對於其他Rally等測試工具來講,操作,原理等都比較複雜,測試中外部依賴比較多,項目也不是很成熟。所以,可以先用Docker將所有依賴包括shaker-image,shaker-flavor全部打包,在到測試環境測試,這樣相對比較簡單,如果需要還可以,寫一些自動化腳本,將shaker-image, shaker-flavor這些自動註冊到測試環境的glance nova中,並簡化測試步驟。
四、常見問題
1. 如在shaker-image虛擬機中運行shaker-agent碰到問題: ImportError: version conflict:'/usr/lib64/python2.7/site-packages/psutil/_psutil_linux.so' C extension modulewas built for another version of psutil (different than 2.2.1)
通過以下操作解決: sudopip install psutil==2.2.1