由于性能测试所需并发量大,压力机不止一台,所以考虑使用MeterSphere的分布式部署方案。
准备3台虚拟机当做压力机slave,ip分别为192.1.1.11,192.1.1.12和192.1.1.13。一台虚拟机当做控制器Web端master,ip为192.1.1.10。
去MeterSpere官网下载离线安装包,访问网址https://github.com/metersphere/metersphere/releases,本次选择v1.8.0版本进行安装。链接:https://pan.baidu.com/s/1LNquYhdZ-I4Q586j0Ifl9A,提取码:lgnz。
下载一份metersphere-release-v1.8.0-offline.tar.gz到虚拟机192.1.1.10目录/var/softwares下面,然后远程拷贝到192.1.1.11,192.1.1.12和192.1.1.13下面。
这个是把metersphere-release-v1.8.0-offline.tar.gz去解压/var/softwares/metersphere目录,要把权限掩码设置为0022:
# umask 0022
加这个参数可以看清楚是什么权限:
# umask -S
u=rwx,g=rx,o=rx
运行完可以看出:所有者是读写执行权限,组用户是读执行权限,其它用户是读执行权限
解压metersphere-release-v1.8.0-offline.tar.gz文件:
# tar -xvzf metersphere-release-v1.8.0-offline.tar.gz -C ./metersphere
如果运行ls -ll后发现文件夹metersphere-release-v1.8.0-offline没有执行权限,需要接着运行下面命令赋予执行权限:
# ls -ll /var/softwares/metersphere/
drwxr-xr-x 5 root root 4096 3月 30 13:35 metersphere-release-v1.8.0-offline
# sudo chmod -R 755 /var/softwares/metersphere/
首先在每个Linux虚拟机,运行ssh-keygen生成秘钥文件,~代表你Linux虚拟机上的个人登录home目录:
# cd ~/.ssh
# ssh-keygen
一路回车后可以看到有私钥文件id_rsa,公钥文件id_rsa.pub生成。
接着是拷贝公钥到远程主机,当初因为没有留意这个问题,这是一个疏漏点,切记。如果配置不当,在v1.7.3版本安装后总是报错:
# Non HTTP response code: org.apache.http.conn.HttpHostConnectException
Master要给每个Slave发送调度命令和传输脚本,接着每个Slave要回传压测数据给Master上的Kafka,所以使用如下命令把Master和Slave的公钥互相拷贝至~/.ssh/authorized_keys里:
# ssh-copy-id <主机名或ip>
使用vi命令查看Master或Slave虚拟机里面的~/.ssh/authorized_keys文件里互相有对方公钥即可。
**注:**增加一个小知识,ssh会把你每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
在/var/softwares/metersphere/metersphere-release-v1.8.0-offline文件夹下,找到install.conf,打开后确定安装模式为allinone:
MS_MODE=allinone
然后执行命令:
# sudo sh quick_start.sh
控制台信息由于重启机器,没有保存下来,只有一个较早版本v1.7.3安装截屏
运行检查状态命令:
# sudo msctl status
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------
kafka /opt/bitnami/scripts/kafka ... Up (healthy) 0.0.0.0:19092->19092/tcp, 9092/tcp
ms-data-streaming /deployments/run-java.sh Up (healthy) 0.0.0.0:8084->8084/tcp, 0.0.0.0:8085->8085/tcp
ms-node-controller /deployments/run-java.sh Up (healthy) 0.0.0.0:8082->8082/tcp
ms-server /deployments/run-java.sh Up (healthy) 0.0.0.0:8081->8081/tcp
mysql docker-entrypoint.sh mysqld Up (healthy) 0.0.0.0:3307->3306/tcp, 33060/tcp
zookeeper /opt/bitnami/scripts/zooke ... Up (healthy) 2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp
**注:**状态显示healthy表示正常,如果是starting就需要等等,或是exited说明有问题。
在/var/softwares/metersphere/metersphere-release-v1.8.0-offline文件夹下,找到install.conf,打开后确定安装模式为allinone:
MS_MODE=node-controller
然后执行命令:
# sudo sh quick_start.sh
控制台信息如下:
--2021-03-31 18:06:08-- https://github.com/metersphere/metersphere/releases/latest/download/metersphere-release-.tar.gz
正在解析主机 github.com (github.com)... 52.74.223.119
正在连接 github.com (github.com)|52.74.223.119|:443... 失败:拒绝连接。
tar (child): metersphere-release-.tar.gz:无法 open: 没有那个文件或目录
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
quick_start.sh: 第 15 行:cd: metersphere-release-: 没有那个文件或目录
======================= 开始安装 =======================
time: 2021年 03月 31日 星期三 18:06:22 CST
[MeterSphere Log]: 检测到 Docker 已安装,跳过安装步骤
[MeterSphere Log]: 启动 Docker
Redirecting to /bin/systemctl start docker.service
[MeterSphere Log]: 检测到 Docker Compose 已安装,跳过安装步骤
[MeterSphere Log]: 加载镜像
Loaded image: registry.cn-qingdao.aliyuncs.com/metersphere/jmeter-master:5.3-ms15
Loaded image: registry.cn-qingdao.aliyuncs.com/metersphere/kafka:2
Loaded image: registry.cn-qingdao.aliyuncs.com/metersphere/metersphere:v1.8.0
Loaded image: registry.cn-qingdao.aliyuncs.com/metersphere/ms-data-streaming:v1.8.0
Loaded image: registry.cn-qingdao.aliyuncs.com/metersphere/ms-node-controller:v1.8.0
Loaded image: registry.cn-qingdao.aliyuncs.com/metersphere/mysql:5.7.25
Loaded image: registry.cn-qingdao.aliyuncs.com/metersphere/zookeeper:3
[MeterSphere Log]: 启动服务
Removing network metersphere_ms-network
Removing volume metersphere_ms-conf
Removing volume metersphere_ms-logs
Removing volume metersphere_ms-data
Removing volume metersphere_ms-jmeter-data
Creating network "metersphere_ms-network" with the default driver
Creating volume "metersphere_ms-conf" with default driver
Creating volume "metersphere_ms-logs" with default driver
Creating volume "metersphere_ms-data" with default driver
Creating volume "metersphere_ms-jmeter-data" with default driver
no such image: registry.cn-qingdao.aliyuncs.com/metersphere/ms-node-controller:: invalid reference format
Name Command State Ports
------------------------------
======================= 安装完成 =======================
请通过以下方式访问:
URL: http://$LOCAL_IP:8081
用户名: admin
初始密码: metersphere
您可以使用命令 'msctl status' 检查服务运行情况.
运行检查状态命令:
# sudo msctl status
Name Command State Ports
-------------------------------------------------------------------------------------
ms-node-controller /deployments/run-java.sh Up (healthy) 0.0.0.0:8082->8082/tcp
**注:**状态显示healthy表示正常,如果是starting就需要等等,或是exited说明有问题。
登录任何一台机器的浏览器,访问http://localhost:8081或http://
访问【系统设置】->【系统】->【测试资源池】,单击【创建资源池】,配置Jmeter HEAP的JVM运行参数和GC策略:
同时添加Slave压力机,填写IP,Port和最大并发数。
添加后,注意【测试资源池】页面会显示修改成功提示信息,如果发现【启用/禁用】选项没有高亮显示紫色,需要点击那个开关使刚才设置的压力资源生效,否则是不能在压测过程中使用刚才配置的压力资源的。
如果安装完之后有版本升级,可以通过运行以下命令升级Master和Slave:
# sudo msctl upgrade
因为我是全新安装的v1.8.0所以并没有进行升级。但是一定确保Master和Slave的版本要一致。
点击【性能测试】->【创建测试】:
点击【场景配置】->【加载JMX文件】->【上传JMX文件】添加压测脚本:
这里上传的是bzm - Concurrency Thread Group阶梯发压线程组脚本,令人惊奇的是MeterSphere居然自动识别出来了,然后点击【压力配置】标签页设置发压参数设置,比如选择资源池,并发用户数,时长等:
第3个标签页是【高级配置】,我暂时没有用到,以后会介绍这个,来个截图吧。
好了,点击【保存并执行】按钮,过一会MeterSphere切换至报告页面,展示压测实时数据如下:
【测试概览】标签页
【请求统计】标签页
【错误记录】标签页
【日志详情】标签页
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-
如果你想快速搭建一个压测平台,MeterSphere无疑是最有效的开源工具,感兴趣的朋友不妨试试!感谢MeterSphere的团队的无私奉献!