MeterSphere 1.20 LTS 版本自 2022 年4月份发布至今,已经维护了20多个小版本。同时,主线版本也更新到了2.10,实现了很多新功能和优化,并在2023年5月25号正式发布了 2.10 LTS 版本。本文简要说明两个版本架构上的差异以及详细的升级操作和注意事项。
1 版本变更说明
1.1 架构说明
与1.20 LTS 相比,2.10 LTS 使用了微服务架构,按功能模块拆分成了多个微服务,拆分前的架构如下:
拆分后的结构如下:
可以看到,原来的MeterSphere Backend和MeterSphere Frontend拆分为了Eureka+GateWay,以及工作台、测试跟踪、接口测试、UI测试、性能测试、报表统计、项目设置和系统设置8个功能组件,同时新增了Minio服务用于文件存储。
1.2 组件说明
● GateWay:API 网关;
● Eureka:服务注册中心;
● 工作台:MeterSphere 项目的工作台模块;
● 项目设置:MeterSphere 项目的项目设置模块;
● 测试跟踪:MeterSphere 项目的测试跟踪模块;
● 接口测试:MeterSphere 项目的接口测试模块;
● UI 测试:MeterSphere 项目的UI 测试模块;
● 性能测试:MeterSphere 项目的性能测试模块
● 系统设置:MeterSphere 项目的系统设置模块;
● 报告统计:MeterSphere 项目的报告统计模块;
● Node Controller:为接口或者性能测试提供独立节点类型的测试资源池;
● MySQL:MeterSphere 项目的主要数据均存储在 MySQL;
● Redis:MeterSphere 项目登录用户的 Session 和任务队列信息存储在 Redis;
● Minio:MeterSphere 项目的分布式对象存储模块;
● Kafka:接收 JMeter 产生的接口测试或者性能测试的结果数据;
● Prometheus:收集压力机及被测系统的监控数据;
● Data Streaming:从 Kafka 中获取接口测试或者性能测试结果数据进行处理后存入 MySQL 数据库;
● Selenium Grid:为 UI自动化测试提供运行环境,支持分布式拓展;
2 升级详细说明
2.1 升级步骤和操作
2.1.1 关闭定时任务
为避免在升级过程中产生过多定时任务累积以及影响正常的测试执行结果,建议在升级前关闭所有定时任务。
对于测试计划定时任务,在页面勾选所有测试计划,批量关闭定时任务即可。
接口测试、性能测试和UI测试定时任务需要在数据库中进行关闭,因为页面上暂时没有批量关闭定时任务的入口,例如:
#登录MySQL(以默认部署的MySQL为例) docker exec -it mysql sh mysql -uroot -pPassword123@mysql #关闭定时任务 use metersphere; update schedule set enable=0; #重启服务后生效 msctl restart |
2.1.2 磁盘空间检测
升级至2.10 lts版本,服务器最低要求8C 16G 200G磁盘。
需要查看MeterSphere服务已有数据的磁盘占用情况。已有数据量越大,数据备份时需要的存储空间也就越大,需要根据已有的数据来评估主机的磁盘空间是否充足。
#查看数据占用情况,--exclude代表无需备份的数据目录 cd /opt/metersphere/data du -sh --exclude=./kafka --exclude=./zookeeper --exclude=./redis --exclude=./prometheus |
2.10 lts离线安装包大小约4G,需依据数据目录大小和安装包大小预留足够的磁盘空间。例如:数据目录占用6G,安装包4G,至少需要预留20G磁盘才能保证后续的升级和使用。
2.1.3 下载离线安装包
由于UI测试selenium grid版本升级,对于docker和docker-compose版本有要求,通过飞致云开源社区下载MeterSphere离线安装包,因为安装包中已经包含高版本的docker和docker-compose安装包。
下载地址:https://community.fit2cloud.com/#/products/metersphere/downloads
2.1.4 备份数据
MeterSphere的使用数据默认存放在/opt/metersphere/data目录下,除data/kafka、data/redis、data/prometheus、/data/zookeeper外,data下的其他目录都需要备份,因为这些目录存放的是持久化数据,需要备份。而kafka、redis等服务存放的是临时数据,没有备份的必要。使用msctl stop命令停止服务,然后用cp命令将data目录下的内容复制到指定目录即可。
例如:
#备份数据目录 msctl stop cd /opt/metersphere rm -rf data/kafka/ data/redis/ data/prometheus/ data/zookeeper/ cp -r data/ /tmp/ #压缩和命名 cd /tmp tar -zcvf metersphere-v1.20.xlts-backup.tar.gz data/ |
需注意的是,数据备份是为了应对突发情况,用于版本回退。正常升级成功后,不需要将备份的数据还原到新的版本。为了预防服务器损毁的情况,可以将备份文件存放在本地电脑。
2.1.5 卸载docker和docker-compose
1.20.x-lts的docker和docker-compose版本,与2.10 LTS 版本中selenium grid组件对docker的版本的要求不匹配,需要进行升级。所以需要先将docker和docker-compose卸载删除,这样在升级时就会自动安装更高版本的docker和docker-compose。
#停止docker msctl uninstall systemctl stop docker #卸载docker和docker-compose rm -rf /usr/bin/docker* rm -rf /usr/bin/containerd* rm -rf /usr/bin/ctr rm -rf /usr/bin/runc rm -rf /etc/systemd/system/docker.service systemctl daemon-reload |
2.1.6 主服务升级
下载完成离线安装包之后解压,进入安装包即可执行升级命令。如果使用了UI测试,需要修改安装包中install.conf文件中MS_UI_ENABLE参数值为true。
#解压安装包 tar -zxvf metersphere-offline-installer-v2.10.0-lts.tar.gz #开启UI测试 cd metersphere-offline-installer-v2.10.0-lts vim install.conf 将 MS_UI_ENABLE 修改为 true #执行升级脚本 bash install.sh #msctl status查看状态 当所有容器状态都是healthy时,就升级完成了。 |
2.1.7 数据库编码修改
由于因 MeterSphere 从 2.0 开始默认使用MySQL V8版本,而 1.x 版本使用的是 5.7版本 ,MySQL v8 默认的字符集排序是 utf8mb4_0900_ai_ci ,而 5.7 的默认字符集排序是utf8mb4_unicode_ci。在升级的时候如果是外部数据库,需要手动修改数据表的字符集,详情见 MeterSphere 升级到 V2 版本后 MySQL 数据库字符集修改说明。如果是使用内置数据库,在升级脚本中已经进行了字符集的修改,不用再手动操作。
2.1.8 资源池升级
如果有额外的资源池节点,需要跟主服务版本保持一致,升级时将安装模式修改为node-controller即可。
#解压安装包 tar -zxvf metersphere-offline-installer-v2.10.0-lts.tar.gz #修改安装模式 cd metersphere-offline-installer-v2.10.0-lts vim install.conf #执行升级命令 bash install.sh |
2.2 注意事项
2.2.1 UI参数设置
MeterSphere v2.8.1版本之后将 seleniarm-grid-all 镜像拆分成 3 个镜像,见下图:
为了保证 MeterSphere 系统其它组件与 UI 测试服务组件正常通信,需要在系统设置-系统参数设置-基本配置中,将之前的 selenium-grid 地址手动修改为:http://selenium-hub:4444,不再是之前的 http://local-selenium-grid:4444,见下图:
2.2.2 同步修改配置
在升级过程中,会将原安装目录下的配置文件(如yml文件)重命名,并将新版本安装包中的配置文件复制到原安装目录下。如果原来配置文件中有自定义修改,需要在升级后将原先的修改内容同步到新的yml文件中,然后再重新加载。
例如,修改MySQL容器外部端口为3308。
#修改MySQL yml文件 cd /opt/metersphere vim docker-compose-mysql.yml :wq #重新加载 msctl reload |
2.2.3 恢复定时任务
如果服务在升级前关闭了定时任务,升级后要记得重新打开。对于测试计划定时任务,在页面上勾选并批量开启定时任务即可。
接口测试、性能测试和UI测试定时任务需要在数据库中进行开启,例如:
#登录MySQL(以默认部署的MySQL为例) docker exec -it mysql sh mysql -uroot -pPassword123@mysql #关闭定时任务 use metersphere; update schedule set enable=1; #重启服务后生效 msctl restart |
2.3 版本回退
升级后如遇数据丢失等异常情况,需要回退到旧版本的,回退流程分为三步:
● 卸载高版本
msctl uninstall rm -rf /opt/metersphere rm -rf ~/.msrc rm -rf /usr/local/bin/msctl |
● 安装旧版本(以1.20.22-lts为例)
cd metersphere-offline-installer-v1.20.22-lts bash install.sh msctl status 直至服务状态healthy |
● 还原旧版本备份数据
#还原数据 msctl uninstall rm -rf /opt/metersphere/data cd /tmp (根据实际情况,进入备份数据存放的目录) tar -zxvf metersphere-v1.20.22lts-backup.tar.gz mv data/ /opt/metersphere msctl reload |