【博文推薦】如何進行 OpenStack 的性能測試及平臺功能性測試
本博文出自51CTO博客再生細胞博主,有任何問題請進入博主頁面互動討論! |
一、OpenStack Rally 性能測試
1.注意點
在測試nova,在配置文件里面如果不指定網(wǎng)絡(luò)id,那么默認是外網(wǎng)的網(wǎng)絡(luò)(該網(wǎng)絡(luò)是共享的),如果想要指定網(wǎng)絡(luò),那么該網(wǎng)絡(luò)必須是共享的狀態(tài),否則將會報錯:無法發(fā)現(xiàn)網(wǎng)絡(luò)。如果測試多于50臺的虛擬機需要修改默認值,因為默認值是有限制的可用如下命令查看:
- [root@rally nova]# nova absolute-limits
- +-------------------------+---------+
- | Name | Value |
- +-------------------------+---------+
- | maxServerMeta | 128 |
- | maxPersonality | 100 |
- | maxImageMeta | 128 |
- | maxPersonalitySize | 10240 |
- | maxTotalRAMSize | 5120000 |
- | maxSecurityGroupRules | 20 |
- | maxTotalKeypairs | 100 |
- | totalRAMUsed | 58960 |
- | maxSecurityGroups | 10 |
- | totalFloatingIpsUsed | 0 |
- | totalInstancesUsed | 24 |
- | totalSecurityGroupsUsed | 1 |
- | maxTotalFloatingIps | 10 |
- | maxTotalInstances | 200 |
- | totalCoresUsed | 51 |
- | maxTotalCores | 500 |
- +-------------------------+---------+
修改默認值可以在界面,管理員->默認值,進行修改;其次可以在運行nova-api服務(wù)的節(jié)點上修改配置文件nova.conf
#p#
2.安裝rally:
- [root@rally nova]#git clone https://github.com/stackforge/rally.git
- [root@rally rally]# /usr/bin/easy_install pip (安裝pip,有就不需要裝了)
- [root@rally rally]# mkdir /root/.pip
- [root@rally rally]# vim /root/.pip/pip.conf (設(shè)置pip源,加快安裝速度)
- [global]
- [root@rally nova]#pip install -U virtualenv 安裝虛擬環(huán)境(可裝可不裝,一般為了系統(tǒng)的干凈還是裝個虛擬環(huán)境)
- [root@rally nova]#virtualenv .venv
- [root@rally nova]#. .venv/bin/activate
- [root@rally nova]#yum install gcc-c++ (安裝編譯工具)
- [root@rally nova]#cd rally
- [root@rally rally]#./install_rally.sh
- ....
======================================================================
Information about your Rally installation:
* Method: system
* Database at: /var/lib/rally/database
* Configuration file at: /etc/rally
======================================================================
安裝完成,數(shù)據(jù)庫的配置這里暫時沒做。
創(chuàng)建一個隨便命名的.json格式文件:
- [root@rally rally]# : :
- [root@rally rally]# rally deployment create --file=existing.json --name=existing
+--------------------------------------+----------------------------+----------+------------------+--------+
| uuid | created_at | name | status | active |
+--------------------------------------+----------------------------+----------+------------------+--------+
| 15ef811a-6460-407c-b391-c0f435f1ae54 | 2015-03-05 10:09:36.468176 | existing | deploy->finished | |
+--------------------------------------+----------------------------+----------+------------------+--------+
Using deployment: 15ef811a-6460-407c-b391-c0f435f1ae54
- [root@rally rally]# rally deployment check
- keystone endpoints are valid and following services are available:
- +------------+-----------+-----------+
- | services | type | status |
- +------------+-----------+-----------+
- | ceilometer | metering | Available |
- | cinder | volume | Available |
- | cinderv2 | volumev2 | Available |
- | glance | image | Available |
- | keystone | identity | Available |
- | neutron | network | Available |
- | nova | compute | Available |
- | nova_ec2 | ec2 | Available |
- | novav3 | computev3 | Available |
- +------------+-----------+-----------+
#p#
如此便可繼續(xù)往下進行OpenStack基準測試了。
舉個測試啟動虛擬機的例子:boot.json文件內(nèi)容如下:
doc/samples/tasks/scenarios/nova/boot.json
- [root@rally nova]# cat boot.json
- {
- "NovaServers.boot_server": [
- {
- "args": {
- "flavor": {
- "name": "m1.large"
- },
- "image": {
- "name": "Windows_Server_2008R2_SP1_Standard_64bit"
- },
- "nics":[{"net-id": "c7048568-c966-4d57-a927-90dd8830fb96"}],(默認是沒有這行的)
- },
- "runner": {
- "type": "constant",
- "times": 100, (測試次數(shù)100) "concurrency": 2 (并發(fā)數(shù))
- },
- "context": {
- "users": {
- "tenants": 3,
- "users_per_tenant": 2
- }
- }
- }
- }
- }
- [root@rally nova]# . /root/rally/.venv/bin/activate
- [root@rally nova]# rally -v task start boot.json(/root/rally/doc/samples/tasks/scenarios/nova這是當前的目錄)
以上的圖是測試結(jié)果。
相關(guān)鏈接:https://wiki.openstack.org/wiki/Rally
https://rally.readthedocs.org/en/latest/tutorial/step_0_installation.html
https://rally.readthedocs.org/en/latest/tutorial/step_1_setting_up_env_and_running_benchmark_from_samples.html
#p#
社區(qū)對OpenStack平臺功能性的測試工具采用Tempest,性能測試采用Rally。
二、OpenStack平臺功能性的測試工具Tempest
1、什么是Tempest
1).Tempest
- api # API的測試集
- cli # OpenStack的命令行工具測試集
- common # 一些公共的工具類和函數(shù)
- scenario # 對OpenStack的常用場景進行測試,包括基本的啟動VM,掛載volumn和網(wǎng)絡(luò)配置等
- services # tempest自己實現(xiàn)的OpenStack API Client,自己實現(xiàn)是為了不讓一些bug隱藏在官方實現(xiàn)的Client里面。
- stress # 壓力測試集,利用multiprocessing來啟動多個進程來同時對OpenStack發(fā)起請求。
- thirdparty # EC2兼容的API測試集
- whitebox # 白盒測試集,主要是對DB操作,然后發(fā)起請求,然后比對結(jié)果
2).tempest是通過nose驅(qū)動的,python語言編寫,使用testtools和testresources等幾個測試工具庫
3).tempest.test.BaseTestCase,BaseTestCase聲明config屬性,讀取配置文件
4).tempest.test.TestCase聲明很多工具函數(shù),供調(diào)用
5).每個測試可以分別測試JSON格式和XML格式
#p#
2.安裝Tempest
下載源碼
- git clone https:
查看python版本
- python --version
如若是2.6執(zhí)行如下,2.7不需要
- wget https://pypi.python.org/packages/source/u/unittest2/unittest2-0.5.1.tar.gztar zxvf unittest2-0.5.1.tar.gz
- cd unittest2-0.5.1python setup.py install
查看xslt-config命令是否存在
- [root@controller001 ~]# whereis xslt-config
- xslt-config: /usr/bin/xslt-config(代表存在)
如果沒有執(zhí)行安裝命令
- [root@controller001 ~]#yum install libxslt-devel
檢查是否有g(shù)cc環(huán)境,沒有則安裝
- [root@controller001 ~]#yum install gcc-c++
安裝一些相關(guān)的包
- [root@controller001 ~]#yum install libevent-devel openssl-devel libffi-devel python-devel
- [root@controller001 ~]#/usr/bin/easy_install pip
進入tempest目錄進行安裝(沒有安裝虛擬機環(huán)境)
- [root@controller001 ~]#python setup.py install
(可選)如果不想將tempest安裝在真實環(huán)境中那么執(zhí)行如下命令
- [root@controller001 ~]#pip -U virtualenv
- [root@controller001 ~]#virtualenv .venv
- [root@controller001 ~]#. .venv/bin/activate
- [root@controller001 ~]#python setup.py install
安裝junitxml,是測試報告輸出為xml格式
- [root@controller001]#pip install junitxml
由于tempest在Icehouse時期上使用是有bug的,bug如下:
在/root/tempest/tempest/openstack/common/log.py文件下添加
注意:在Juno版本時期,此bug已修復,故而可以跳過。
修改tempest.conf文件,注意創(chuàng)建外網(wǎng)的時候不要共享,否則在測試啟動虛擬機以及進行網(wǎng)絡(luò)測試的時候會報錯
- cp etc/tempest.conf.sample etc/tempest.conf
- [root@controller001 etc]# == /usr/bincatalog_type===53f6877e-2f46-43e3-93b7-7e22786cacb2
- flavor_ref = 1
- = = ./= 7e4b08b4-d7a1-4eff--= 7e4b08b4-d7a1-4eff--=== =-====-feature-= = = = = = = = http:login_url = http:============= http:uri_v3 = .=-feature-= = === http:region =-feature-= =
- public_router_id =ac4a4d9b-27c7-492b-824a-ae384710ab2a
- region =RegionOne
- tenant_network_cidr = 10.100.0.0/16
- tenant_network_mask_bits = 28
- tenant_networks_reachable = true
- [network-feature-enabled]
- [object-storage]
- [object-storage-feature-enabled]
- [orchestration]
- [scenario]
- [service_available] (這里配置需要測試哪些模塊)
- ceilometer = false
- cinder = true
- glance = true
- heat = false
- horizon = true
- ironic = false
- neutron = true
- nova = true
- sahara = false
- swift = false
- trove = false
- zaqar = false
- [stress]
- [telemetry]
- [volume]
- [volume-feature-enabled]
- multi_backend =true (測試cinder的后端存儲有多個backend)
修改好配置文件之后,進行測試(以測試keystone當中token為例)
- [root@controller001 tempest]# nosetests tempest/api/identity/admin/test_tokens.py --with-xunit --xunit-file=/root/keystone_test_tokens.xml
----------------------------------------------------------------------
Ran 2 tests in 1.532s
OK
- [root@controller001 ~]# cat keystone_test_tokens.xml
- <?xml version="1.0" encoding="UTF-8"?><testsuite name="nosetests" tests="2" errors="0" failures="0" skip="0"><testcase classname="tempest.api.identity.admin.test_tokens.TokensTestJSON" name="test_create_get_delete_token[gate]" time="0.270"><system-out><![CDATA[I want to the url'value and body's value tenants,{"tenant": {"enabled": true, "name": "tenant--1612865724", "description": ""}}
- I want to the url'value and body's value users,{"user": {"tenantId": "b8f636519ff949d19405e59fce2f78ac", "password": "pass--1460623961", "name": "user--1945966900", "email": ""}}
- I want to the url'value and body's value http://172.16.100.162:35357/v2.0/tokens,{"auth": {"tenantName": "tenant--1612865724", "passwordCredentials": {"username": "user--1945966900", "password": "pass--1460623961"}}}]]></system-out></testcase><testcase classname="tempest.api.identity.admin.test_tokens.TokensTestJSON" name="test_rescope_token[gate]" time="0.526"><system-out><![CDATA[I want to the url'value and body's value users,{"user": {"password": "pass--46178537", "name": "user--996425809", "email": ""}}
- I want to the url'value and body's value tenants,{"tenant": {"enabled": true, "name": "tenant--781047271", "description": ""}}
- I want to the url'value and body's value tenants,{"tenant": {"enabled": true, "name": "tenant--1886860973", "description": ""}}
- I want to the url'value and body's value OS-KSADM/roles,{"role": {"name": "role--684861165"}}
- I want to the url'value and body's value http://172.16.100.162:35357/v2.0/tokens,{"auth": {"passwordCredentials": {"username": "user--996425809", "password": "pass--46178537"}}}I want to the url'value and body's value http://172.16.100.162:35357/v2.0/tokens,{"auth": {"token": {"id": "MIIDLgYJKoZIhvcNAQcCoIIDHzCCAxsCAQExCTAHBgUrDgMCGjCCAYQGCSqGSIb3DQEHAaCCAXUEggFxeyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNS0wMS0yMlQwNTo1MDowNy42NDg5NjIiLCAiZXhwaXJlcyI6ICIyMDE1LTAxLTIyVDA2OjUwOjA3WiIsICJpZCI6ICJwbGFjZWhvbGRlciIsICJhdWRpdF9pZHMiOiBbIkpIZ0U0eDgwVFJXSkJORjJFUjdXV3ciXX0sICJzZXJ2aWNlQ2F0YWxvZyI6IFtdLCAidXNlciI6IHsidXNlcm5hbWUiOiAidXNlci0tOTk2NDI1ODA5IiwgInJvbGVzX2xpbmtzIjogW10sICJpZCI6ICI4OGQwNGVkZmU0YWE0MmEyYWUzZWQxZjAyNzVmYWQ3NCIsICJyb2xlcyI6IFtdLCAibmFtZSI6ICJ1c2VyLS05OTY0MjU4MDkifSwgIm1ldGFkYXRhIjogeyJpc19hZG1pbiI6IDAsICJyb2xlcyI6IFtdfX19MYIBgTCCAX0CAQEwXDBXMQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVW5zZXQxDjAMBgNVBAcMBVVuc2V0MQ4wDAYDVQQKDAVVbnNldDEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tAgEBMAcGBSsOAwIaMA0GCSqGSIb3DQEBAQUABIIBAAjoxz4e-hnwHy45cd+o3tgQI1SdvidiOIfRrDAg5hMc0Fn9pGxnt-fYmZIBRH9b0LMjkjJa32OO2M0xmlcwCmaALsMMpBk5ouaECzNEJNGb2UyFW6Lpi5r5seM5HBO40brE0muMraOnzoRqkmGijEXf0RDn84iFrX40pvwo-htACNsB9fm1BkqUg8A+ANOJNHRGnqY80fIj+ipp5-53drN0VxbakHZvYJHAut5GsOdK-+TThj3fvbDA1fM-wa-SmZNV7xl-X8F9NChbe7VV3AFdE4XQHpdFZr+c4ZEDGlcq6VVRyD0OpeM2Nt9GbN8gevNWJpK2qjVJ2dxXgCZnDZg="}, "tenantName": "tenant--781047271"}}I want to the url'value and body's value http://172.16.100.162:35357/v2.0/tokens,{"auth": {"token": {"id": "MIIDLgYJKoZIhvcNAQcCoIIDHzCCAxsCAQExCTAHBgUrDgMCGjCCAYQGCSqGSIb3DQEHAaCCAXUEggFxeyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNS0wMS0yMlQwNTo1MDowNy42NDg5NjIiLCAiZXhwaXJlcyI6ICIyMDE1LTAxLTIyVDA2OjUwOjA3WiIsICJpZCI6ICJwbGFjZWhvbGRlciIsICJhdWRpdF9pZHMiOiBbIkpIZ0U0eDgwVFJXSkJORjJFUjdXV3ciXX0sICJzZXJ2aWNlQ2F0YWxvZyI6IFtdLCAidXNlciI6IHsidXNlcm5hbWUiOiAidXNlci0tOTk2NDI1ODA5IiwgInJvbGVzX2xpbmtzIjogW10sICJpZCI6ICI4OGQwNGVkZmU0YWE0MmEyYWUzZWQxZjAyNzVmYWQ3NCIsICJyb2xlcyI6IFtdLCAibmFtZSI6ICJ1c2VyLS05OTY0MjU4MDkifSwgIm1ldGFkYXRhIjogeyJpc19hZG1pbiI6IDAsICJyb2xlcyI6IFtdfX19MYIBgTCCAX0CAQEwXDBXMQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVW5zZXQxDjAMBgNVBAcMBVVuc2V0MQ4wDAYDVQQKDAVVbnNldDEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tAgEBMAcGBSsOAwIaMA0GCSqGSIb3DQEBAQUABIIBAAjoxz4e-hnwHy45cd+o3tgQI1SdvidiOIfRrDAg5hMc0Fn9pGxnt-fYmZIBRH9b0LMjkjJa32OO2M0xmlcwCmaALsMMpBk5ouaECzNEJNGb2UyFW6Lpi5r5seM5HBO40brE0muMraOnzoRqkmGijEXf0RDn84iFrX40pvwo-htACNsB9fm1BkqUg8A+ANOJNHRGnqY80fIj+ipp5-53drN0VxbakHZvYJHAut5GsOdK-+TThj3fvbDA1fM-wa-SmZNV7xl-X8F9NChbe7VV3AFdE4XQHpdFZr+c4ZEDGlcq6VVRyD0OpeM2Nt9GbN8gevNWJpK2qjVJ2dxXgCZnDZg="}, "tenantName": "tenant--1886860973"}}]]></system-out></testcase></testsuite>
若有不足之處,歡迎批評指正!