分享

OpenStack Performance Testing——Rally入门

xioaxu790 发表于 2014-12-17 13:27:25 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 2 48869
问题导读
1、什么是Rally?
2、如何使用OpenStack与Rally结合?
3、如何使用rally进行测试?





OpenStack测试这个话题,一直以来貌似在国内一直没什么人关注,更多的兄弟还是关注OpenStack哪些功能。最近也有一些基于OpenStack兄弟们的公有云要上线了,终于想起来要做测试了。对于测试这块,国内Intel算最早就把Tempest这个项目搞的风声水起。对于Performance这块,Tempest也支持,但效果如何还没有测试过。应该一年前,Mirantis在这块还是给出了一些比较的建议,后续也起了一个孵化项目Rally做OpenStack性能测试这块。当然,就性能测试这块,OpenStack只能算刚刚起步,但相信测试这块的不断完善也是OpenStack向更加可用迈进的标志。接下来简单讲讲Rally入门。

Rally结构
Rally架构图
1.png

  • 部署引擎
  • 环境验证
  • 标准测试引擎



Rally安装
Python项目的安装还是相对比较简单,这里就不详细说明python pip、virtualenv这块。直接进行安装,如有看不懂的,自行学习Python。

注意:如果你是Mac用户,建议不要在里面试了,巨痛苦,老老实实安装一个虚拟机,开Linux为上(以CentOS 6.5为例).

从github克隆代码:
  1. kevinzhang:~ kevin$ git clone https://github.com/stackforge/rally.git && cd rally
复制代码


安装python的依赖包(这里用virtualenv):
  1. kevinzhang:~ kevin$ ./rally/install_rally.sh -v
复制代码


rally提供了安装脚本,直接加-v参数即可。

这样基本的安装就OK了。

Rally配置和初始化数据库
Rally的配置文件为/etc/rally/rally.conf,主要需要修改的为数据库连接字段,其它默认即可。
  1. kevinzhang:~ kevin$ vim /etc/rally/rally.conf
  2. # Change the "connection" parameter, For example to this:
  3. connection=sqlite://///opt/rally/database/rally.sqlite
复制代码


初始化数据库:
  1. kevinzhang:~ kevin$ rally-manage db recreate
复制代码


如何使用Rally
Rally的使用,初步看了一下,发现和dashboard很像,需要给出一个KEYSTONE_AUTH_URL,可以对已经部署的OpenStack做测试。当然,根据架构设计来看,貌似Rally还能调用Mirantis Fuel去部署,在测试。这里我仅对已部署的OpenStack环境做一个keystone 创建-删除用户场景做压力测试。

根据已有的OpenStack环境初始化Rally
根据目前已有的OpenStack环境生成一个如下的json文件,type类型为ExistingCloud(注意需要用admin的权限):
  1. (rally)[root@dev ~]# cat existing.json
  2. {
  3.     "type": "ExistingCloud",
  4.     "endpoint": {
  5.         "auth_url": "http://192.168.1.170:5000/v2.0",
  6.         "username": "admin",
  7.         "password": "admin",
  8.         "tenant_name": "admin"
  9.     }
  10. }
复制代码


采用rally的deployment命令根据json文件创建测试环境:
  1. (rally)[root@dev ~]# rally deployment create --filename=existing.json --name=existing
  2. (rally)[root@dev ~]# rally deployment list
  3. /opt/rally/lib/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
  4.   _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
  5. +--------------------------------------+----------------------------+----------+------------------+--------+
  6. |                 uuid                 |         created_at         |   name   |      status      | active |
  7. +--------------------------------------+----------------------------+----------+------------------+--------+
  8. | 33c843c1-de28-4d9e-b30d-b91120ca9770 | 2014-05-05 21:41:16.957229 | existing | deploy->finished |   *    |
  9. +--------------------------------------+----------------------------+----------+------------------+--------+
复制代码


部署完成后可以采用deployment check进行测试:
  1. (rally)[root@dev ~]# rally deployment check
  2. /opt/rally/lib/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
  3.   _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
  4. keystone endpoints are valid and following services are available:
  5. +----------+----------+-----------+
  6. | services |   type   |   status  |
  7. +----------+----------+-----------+
  8. |   nova   | compute  | Available |
  9. | neutron  | network  | Available |
  10. | cinderv2 | volumev2 | Available |
  11. |  glance  |  image   | Available |
  12. |  cinder  |  volume  | Available |
  13. |   ec2    |   ec2    | Available |
  14. | keystone | identity | Available |
  15. +----------+----------+-----------+
复制代码

如果仅对keystone相关的服务进行测试,如上的配置即可。

测试案例
先来试一把,用5个并发,100次请求,先压一下keystone,需要从sample中选择需要测试用例的json文件,并修改测试参数如下:
  1. (rally)[root@dev code]# cp rally/doc/samples/tasks/keystone/create-and-delete-user.json ~
  2. (rally)[root@dev ~]# cat create-and-delete-user_5client_100.json
  3. {
  4.     "KeystoneBasic.create_delete_user": [
  5.         {
  6.             "args": {
  7.                 "name_length": 10
  8.             },
  9.             "runner": {
  10.                 "type": "constant",
  11.                 "times": 100,
  12.                 "concurrency": 5
  13.             }
  14.         }
  15.     ]
  16. }
复制代码



使用rally进行测试:
  1. (rally)[root@dev ~]# rally -v task start create-and-delete-user_5client_100.json
复制代码


上面也有输出,省略了输出结果。

查看结果:
  1. (rally)[root@dev ~]# rally -vd task detailed 3bc63cfb-89ec-400e-b5bc-ecc68ff96733
  2. /opt/rally/lib/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
  3.   _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
  4. 2014-05-06 16:59:45.773 43898 DEBUG rally.cmd.cliutils [-] INFO logs from urllib3 and requests module are hide. run /opt/rally/lib/python2.6/site-packages/rally/cmd/cliutils.py:116
  5. ================================================================================
  6. Task 3bc63cfb-89ec-400e-b5bc-ecc68ff96733 is finished.
  7. --------------------------------------------------------------------------------
  8. test scenario KeystoneBasic.create_delete_user
  9. args position 0
  10. args values:
  11. {u'args': {u'name_length': 10},
  12. u'runner': {u'concurrency': 5, u'times': 100, u'type': u'constant'}}
  13. +--------------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
  14. | action                   | min (sec) | avg (sec) | max (sec) | 90 percentile | 95 percentile | success | count |
  15. +--------------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
  16. | keystone.create_user     | 1.518     | 2.725     | 4.331     | 3.513         | 3.891         | 100.0%  | 100   |
  17. | keystone.delete_resource | 0.255     | 1.142     | 2.012     | 1.524         | 1.634         | 100.0%  | 100   |
  18. | total                    | 2.572     | 3.868     | 5.762     | 4.918         | 5.150         | 100.0%  | 100   |
  19. +--------------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
  20. HINTS:
  21. * To plot HTML graphics with this data, run:
  22.         rally task plot2html 3bc63cfb-89ec-400e-b5bc-ecc68ff96733 --out output.html
  23. * To get raw JSON output of task results, run:
  24.         rally task results 3bc63cfb-89ec-400e-b5bc-ecc68ff96733
复制代码



可以看到一些详细的数据分析,目前来看,低负载情况下,创建用户相对删除用户要慢一倍左右。

在试试更多的并发和请求数目,这次用100个并发,1000个访问请求,需要修改测试json如下:
  1. (rally)[root@dev code]# cp rally/doc/samples/tasks/keystone/create-and-delete-user.json ~
  2. (rally)[root@dev ~]# cat create-and-delete-user_100client_1000.json
  3. {
  4.     "KeystoneBasic.create_delete_user": [
  5.         {
  6.             "args": {
  7.                 "name_length": 10
  8.             },
  9.             "runner": {
  10.                 "type": "constant",
  11.                 "times": 1000,
  12.                 "concurrency": 100
  13.             }
  14.         }
  15.     ]
  16. }
复制代码



使用rally进行测试:
  1. (rally)[root@dev ~]# rally -v task start create-and-delete-user_100client_1000.json
复制代码


上面也有输出,省略了输出结果。

查看结果:
  1. (rally)[root@dev ~]# rally -vd task detailed c05a7725-b646-4d58-a54a-43d66341d90d
  2. /opt/rally/lib/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
  3.   _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
  4. 2014-05-06 17:06:54.338 43914 DEBUG rally.cmd.cliutils [-] INFO logs from urllib3 and requests module are hide. run /opt/rally/lib/python2.6/site-packages/rally/cmd/cliutils.py:116
  5. ================================================================================
  6. Task c05a7725-b646-4d58-a54a-43d66341d90d is finished.
  7. --------------------------------------------------------------------------------
  8. test scenario KeystoneBasic.create_delete_user
  9. args position 0
  10. args values:
  11. {u'args': {u'name_length': 10},
  12. u'runner': {u'concurrency': 100, u'times': 1000, u'type': u'constant'}}
  13. +--------------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
  14. | action                   | min (sec) | avg (sec) | max (sec) | 90 percentile | 95 percentile | success | count |
  15. +--------------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
  16. | keystone.create_user     | 3.706     | 40.148    | 69.864    | 62.414        | 65.213        | 50.8%   | 1000  |
  17. | keystone.delete_resource | 0.594     | 12.071    | 28.795    | 25.412        | 26.431        | 50.8%   | 1000  |
  18. | total                    | 5.746     | 52.231    | 94.030    | 78.073        | 81.833        | 50.8%   | 1000  |
  19. +--------------------------+-----------+-----------+-----------+---------------+---------------+---------+-------+
  20. HINTS:
  21. * To plot HTML graphics with this data, run:
  22.         rally task plot2html c05a7725-b646-4d58-a54a-43d66341d90d --out output.html
  23. * To get raw JSON output of task results, run:
  24.         rally task results c05a7725-b646-4d58-a54a-43d66341d90d
复制代码


结果这个惨烈,基本上50%的失败,而且并发大的情况下,平均响应时间大大增加。这样看来keystone面对公有云也表示压力山大!后面会针对这个问题进行一些tunning,敬请期待…… 附keystone服务器配置:

CPU:E5520
内存:8G


已有(2)人评论

跳转到指定楼层
wangy151 发表于 2015-8-22 19:21:11
请问,如果不能连外网怎么安装rally?我把它下载下来了,但是执行脚本会提示:could not resolve:github.com!还望得到解答,非常感谢
回复

使用道具 举报

wangy151 发表于 2015-8-22 19:22:33

请问,如果不能连外网怎么安装rally?我把它下载下来了,但是执行脚本会提示:could not resolve:github.com!还望得到解答,非常感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条