首页 > 其他分享 >MeterSphere 分布式部署压测

MeterSphere 分布式部署压测

时间:2023-01-16 17:39:22浏览次数:64  
标签:压测 zookeeper kafka cluster usr MS MeterSphere local 分布式

1 整体部署规划

MeterSphere大规模的性能压测主要取决于三个组件:

  • Node Controller: 为性能测试提供独立节点类型的测试资源池, 接收来自系统的性能测试任务, 动态的启动 JMeter容器完成性能测试
  • Data Streaming: 从 Kafka 中获取性能测试结果数据进行处理后存入 MySQL 数据库
  • Kafka: 接收 JMeter 产生的性能测试结果数据

所以如果需要进行大规模(5000 VU以上)的性能测试,需要对上述三个组件进行水平扩容。具体架构如下:

MeterSphere 分布式部署压测_zookeeper

依据架构所示,需要独立部署 Kafka 集群和 Data-Streaming 集群(Kafka 和 Data-Streaming 可以部署在一起),如果采用独立主机压测,还需要部署 Node-Controller 集群。部署步骤:

  • 部署 Kafka 集群
  • 部署 Data-Streaming 集群
  • 部署 Node-Controller 集群

2 部署 kafka 集群

大致流程:

  • 先安装 JDK
  • 部署 Zookeeper 集群
  • 部署 Kafka 集群
  • 部署 Kafka-manager

2.1 部署 kafka 集群

2.1.1 关闭防火墙和 selinux

关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

关闭selinux

setenforce 0 (临时生效)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config(永久生效)

2.1.2 检查是否已经安装 JDK

rpm -qa|grep jdk  #如果安装先卸载jdk
下载jdk:
官网:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html

选择 jdk 版本上传到服务器解压,这里用的是 jdk1.8.0 版本

tar -xvf jdk-8u251-linux-x64.tar.gz
mv jdk1.8.0_251 /usr/local

vim /etc/profile

export JAVA_HOME=/usr/local/jdk1.8.0_251
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile

java -version (检查一下jdk版本查看是否安装成功)

2.1.3 搭建 Zookeeper 集群

2.1.3.1 集群节点选用三台linux主机

下载地址: ​​Zookeeper ​

或者 wget ​​​https://archive.apache.org/dist/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz​​

​2.1.3.2 新建一个zookeeper-cluster目录,将安装包上传zookeeper-cluster目录下

cd /usr/local
mkdir zookeeper-cluster

2.1.3.3 解压安装包

cd zookeeper-cluster
tar zxvf apache-zookeeper-3.5.5-bin.tar.gz

2.1.3.4 配置 zk1(先配一个节点,然后再复制修改相关配置)

1.修改解压包名称(直观区分)
mv apache-zookeeper-3.5.5-bin zk

2.新建data,logs 目录来存放数据和日志
cd zk
mkdir data logs

3.进入conf,将zoo_sample.cfg复制重命名zoo.cfg
cd zk/conf
cp zoo_sample.cfg zoo.cfg

4.修改conf下zoo.cfg
vi zoo.cfg
① 修改:dataDir=/usr/local/zookeeper-cluster/zk1/data
② 添加:dataLogDir=/usr/local/zookeeper-cluster/zk1/logs
③ clientPort=2181【clientPort是客户端的请求端口】
④ 在zoo.cfg文件末尾追加
server.1=10.1.240.150:2888:3888
server.2=10.1.240.151:2888:3888
server.3=10.1.240.152:2888:3888
5.在zk的data目录下创建一个myid文件,内容为1
cd ../data/
echo 1 > myid

2.1.3.5 其他节点配置 其他节点配置相同,除以下配置

echo 1 >/usr/local/zookeeper-cluster/zk/data/myid # echo 中的值需要唯一,节点1,输出1,节点2,就写2.保证唯一

2.1.3.6 启动

cd /usr/local/zookeeper-cluster/zk/bin
./zkServer.sh start

MeterSphere 分布式部署压测_zookeeper_02

查看集群状态

./zkServer.sh status

MeterSphere 分布式部署压测_zookeeper_03

可以看到,一台作为 leader,两台作为 follower,zookeeper 集群搭建成功。

2.1.4 kafka 集群安装

2.1.4.1 下载安装包

下载地址:  ​​kafka ​​​​​

或者 wget ​​​https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.6.2/kafka_2.12-2.6.2.tgz​​

​2.1.4.2 新建一个Kafka-cluster目录,将安装Kafka-cluster目录下

cd /usr/local
mkdir kafka-cluster

2.1.4.3 解压安装包,重命名

tar zxvf kafka_2.12-2.6.2.tgz
mv kafka_2.12-2.6.2 kafka

2.1.4.4 修改配置文件

cd /usr/local/kafka-cluster/kafka/config/
vi server.properties修改
broker.id=1 #唯一
listeners=PLAINTEXT://172.16.150.154:9092 #修改为本机地址
log.dirs=/Data/kafka-logs #数据目录,kafka-logs会自动采集
zookeeper.connect=172.16.150.154:2181,172.16.150.155:2181,172.16.150.156:2181 #zokeeper集群地址,以","为分割其他的不用改

2.1.4.5 其他节点配置相同,除以下内容:

broker.id=1  #唯一 (确定id值是唯一)
listeners=PLAINTEXT://172.16.150.154:9092 #修改为本机地址

2.1.4.6 启动

cd /usr/local/kafka-cluster/kafka/bin
./kafka-server-start.sh ../config/server.properties
可以发现在窗口启动之后是一个阻塞进程,会阻塞当前窗口,我们可以重新打开一个窗口进行接下来的操作,或者在启动kafka的时候使用 -daemon 参数将它声明为守护进程后台运行。
./kafka-server-start.sh -daemon ../config/server.properties

到这一步 kafka+zookeeper 已经是部署完成了

2.1.4.7 使用 JMX 监控 kafka

vim /usr/local/kafka-cluster/kafka/bin/kafka-server-start.sh
在这个字段加入export JMX_PORT="9999"

MeterSphere 分布式部署压测_zookeeper_04

2.1.4.8 服务设置开机自启,使用 systemctl 工具管理(在配置时,请先把原本服务关闭)

先设置zookeeper开机启动
cd /lib/systemd/system/
vim zookeeper.service 在当中输入一下内容
[Unit]
Description=zookeeper
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/zookeeper-cluster/zk/bin/zkServer.sh start
ExecReload=/usr/local/zookeeper-cluster/zk/bin/zkServer.sh restart
ExecStop=/usr/local/zookeeper-cluster/zk/bin/zkServer.sh stop
[Install]
WantedBy=multi-user.target

然后保存退出

echo $PATH 找到我们的 jdk 安装路径

MeterSphere 分布式部署压测_kafka_05

cd /usr/local/zookeeper-cluster/zk/bin
vim zkEnv.sh

MeterSphere 分布式部署压测_kafka_06

找到我们第一行的变量,把我们之前部署的java环境添加刷新一下进去在后面插入

export JAVA_HOME=/usr/local/jdk1.8.0_251,保存退出,然后刷新一下命令

systemctl daemon-reload 
systemctl start zookeeper #启动服务
systemctl enable zookeeper #加入开机自启
systemctl status zookeeper #检查服务状态

状态如下就是正确

MeterSphere 分布式部署压测_分布式部署_07

2.1.4.9 kafka自启动设置

cd /lib/systemd/system/
vim kafka.service
添加一下内容:
[Unit]
Description=kafka
After=network.target zookeeper.service

[Service]
Type=simple
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/jdk1.8.0_251/bin"
User=root
Group=root
ExecStart=/usr/local/kafka-cluster/kafka/bin/kafka-server-start.sh /usr/local/kafka-cluster/kafka/config/server.properties
ExecStop=/usr/local/kafka-cluster/kafka/bin/kafka-server-stop.sh
PrivateTmp=on-failure
[Install]
WantedBy=multi-user.target

保存退出,刷新一下

systemctl daemon-reload
systemctl start kafka
systemctl enable kfka
systemctl status kafka

MeterSphere 分布式部署压测_zookeeper_08

2.1.4.10 建议启动 kafka 时先重新启动一下 zookeeper,有时间可能会起不来。启动 kafka 前必须先要启动zookeeper。

2.2 部署kafka-manager

可以在任意一台 kafka 设备部署,kafka 可视化,yaml 如下(需要提前安装好 Docker 环境和 docker-compose 环境,并下载好 images)

version: '2'

services:

kafka-manager:
image: sheepkiller/kafka-manager:latest
restart: always
container_name: kafka-manager
hostname: kafka-manager
ports:
- 9000:9000
environment:
ZK_HOSTS: 10.1.240.154:2181,10.1.240.155:2181,10.1.240.156:2181 #修改为依据部署好的kafka集群
KM_ARGS: -Djava.net.preferIPv4Stack=true
networks:
- kafka-manager

networks:
kafka-manager:

3 部署 data-streaming 集群

准备好环境变量文件、compose文件,三台机器部署一样

​环境变量文件 .env

vim .env   #参考ms的.env文件进行修改

MS_KAFKA_TOPIC=JMETER_METRICS
MS_MYSQL_HOST=10.1.240.110 #修改MS的数据库
MS_KAFKA_LOG_TOPIC=JMETER_LOGS
MS_TAG=v1.9.3
MS_JMETER_DATA_PATH=metersphere/data/jmeter
MS_BASE=/opt
MS_KAFKA_TEST_TOPIC=LOAD_TESTS
MS_MYSQL_USER=root
MS_EXTERNAL_MYSQL=true
MS_PREFIX=registry.cn-qingdao.aliyuncs.com/metersphere
MS_MYSQL_DB=metersphere
MS_MYSQL_PASSWORD=Password123@mysql
MS_JMETER_TAG=5.4.1-ms3-jdk8
MS_MYSQL_PORT=3307

MS_KAFKA_BOOTSTRAP_SERVERS=10.1.240.154:9092,10.1.240.155:9092,10.1.240.156:9092 #新加

docker-compose-base.yml

vim docker-compose-base.yml #拷贝ms服务器的docker-compose-base.yml 

version: "2.1"
volumes:
ms-conf:
driver_opts:
type: none
device: ${MS_BASE}/metersphere/conf
o: bind
ms-logs:
driver_opts:
type: none
device: ${MS_BASE}/metersphere/logs
o: bind
ms-data:
driver_opts:
type: none
device: ${MS_BASE}/metersphere/data
o: bind

networks:
ms-network:

docker-compose-ds.yml

vim docker-compose-base.yml #拷贝ms服务器的docker-compose-base.yml 
vim docker-compose-ds.yml #新加ds yaml文件

version: "2.1"
services:

ms-data-streaming:
image: ${MS_PREFIX}/ms-data-streaming:${MS_TAG}
container_name: ms-data-streaming
environment:
HOST_HOSTNAME: $HOSTNAME
SPRING_DATASOURCE_URL: jdbc:mysql://${MS_MYSQL_HOST}:${MS_MYSQL_PORT}/${MS_MYSQL_DB}?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
SPRING_DATASOURCE_USERNAME: ${MS_MYSQL_USER}
SPRING_DATASOURCE_PASSWORD: ${MS_MYSQL_PASSWORD}
KAFKA_PARTITIONS: 60 #此处修改kafka分区
KAFKA_REPLICAS: 1
KAFKA_TOPIC: ${MS_KAFKA_TOPIC}
KAFKA_LOG_TOPIC: ${MS_KAFKA_LOG_TOPIC}
KAFKA_TEST_TOPIC: ${MS_KAFKA_TEST_TOPIC}
KAFKA_BOOTSTRAP-SERVERS: ${MS_KAFKA_BOOTSTRAP_SERVERS} #此处修改为kafka集群
ports:
- 8084:8084
- 8085:8085
healthcheck:
test: ["CMD", "nc", "-zv", "localhost", "8084"]
interval: 6s
timeout: 10s
retries: 20
restart: on-failure
volumes:
- ./conf/metersphere.properties:/opt/metersphere/conf/metersphere.properties
- ${MS_BASE}/metersphere/logs/data-streaming:/opt/metersphere/logs/data-streaming
networks:
- ms-network

启动 data-streaming,执行命令:

source .env 
docker-compose -f docker-compose-base.yml -f docker-compose-ds.yml up -d

4 部署node-controller集群

如采用独立主机压测,需要部署node-controller

部署过程可以参考: ​​安装部署​

install.conf 中将 MS_INSTALL_MODE=allinone 修改为 MS_INSTALL_MODE=node-controller(环境变量文件需要指向同一个 kafka 和 ms-server 服务),注意资源池中 JMeter 的内存配置,建议调整到4G以上

5 压测工作

  • 基于以上环境部署成功后,进行如下压测工作

5.1 修改 MeterSphere 的 docker-compose-server.yaml 文件

按照下图修改为连接 kafka 地址

MeterSphere 分布式部署压测_kafka_09

5.2 如果采用 k8s 集群压测,需要提前准备好 k8s 集群,创建好 SA 和 token,创建如下:

1、创建namespaces
kubectl create namespace metersphere

2、创建SA
kubectl create serviceaccount ms -n metersphere

3、创建namespace授权SA
kubectl create clusterrolebinding ms --clusterrole=admin --serviceaccount=metersphere:ms -n metersphere

4.查询SA token
kubectl describe sa/ms -n metersphere
kubectl describe secrets -n metersphere ms-token-xxxx

k8s 对接界面配置如下,注意需要调整 JMeter 配置,经过测试,2500 左右的 VU,在无大量错误的情况下需要消耗 2C4G 左右资源:

MeterSphere 分布式部署压测_zookeeper_10

5.3 开始运行压测任务,最终压测效果如下,错误率极低的情况下,打了 2.5 万并发 VU

MeterSphere 分布式部署压测_分布式部署_11

MeterSphere 分布式部署压测_kafka_12

5.4 此方案已经在客户现场进行了部署测试,验证了MS在不同大规模场景下可通过水平扩展的方式,弹性支持压测池的调度。

标签:压测,zookeeper,kafka,cluster,usr,MS,MeterSphere,local,分布式
From: https://blog.51cto.com/u_15922911/6010559

相关文章

  • MeterSphere UI 测试脚本的使用
    目前MeterSphereUI测试仅支持js脚本,设置的脚本将在浏览器中执行。以脚本有返回值和无返回值两种情况为例。1js脚本有返回值情况1.1脚本类型:同步,设置变量:有返回值(以下脚......
  • Windows离线安装MeterSphere
    1安装操作步骤​安装 WSL​设置 WSL2 为默认​安装 Ubuntu​检测 UbuntuWSL 版本​安装docker​docker设置​下载安装包(​​点击下载​​)​启动 Ubuntu​检查 D......
  • MeterSphere 接口测试环境/环境组+动态数据源使用
    MeterSphere接口测试支持环境配置,灵活配置运行环境,好多小伙伴在使用过程中,对http配置的搭配以及环境组的使用场景是有疑惑的,下面为大家介绍一下1.环境配置1.1通用配置......
  • Mac源码启动MeterSphere服务,并进行性能测试
    1环境准备1、首选要参考一下官方的开发文档 ​​https://metersphere.io/docs/dev_manual/​​2、Java环境,1.20以上版本需要jdk11,​3、maven环境4、vue环境,需要的看这里的......
  • 分布式文件系统seaweedfs搭建配置
    官方网站:https://github.com/chrislusf/seaweedfs/wiki/Getting-Startedseaweedfs是一个非常优秀的由golang开发的分布式存储开源项目。它是用来存储文件的系统,并且与......
  • MeterSphere 性能测试配置和参数说明
    1. 什么是性能测试性能测试即通过工具来模拟用户请求,达到查看服务性能是否能满足实际生产需求的目标。系统性能好坏是一个相对概念,核心思想是能满足生产需求,因此进行性能测......
  • 如何通过 API 触发 MeterSphere 测试计划
    1关于MS接口的API调用1、请求的HTTP头要设置两个值:accessKey和签名2、加密方式:对称加密3、加密算法:AES,加密模式:CBC,填充方式:PKCS5Padding4、签名中加了时间戳,也就是说......
  • MeterSphere接口测试模块中循环控制器的使用
    MeterSphere开源持续测试平台的“接口测试”模块具有灵活的接口场景编排设计,模块覆盖了多种接口协议,可自由组合接口自动化测试场景,为接口测试带来方便快捷的体验。其中,逻辑......
  • 聊聊分布式缓存
    缓存作为磁盘以外的一种存储数据的方式,它有着比磁盘更快的存取效率,因此,可以有效提高系统的性能。在单体系统中,一般会用到本地缓存。但在分布式系统中,本地缓存就显得不够用......
  • 分布式搜索引擎03
    分布式搜索引擎030.学习目标数据聚合:解决复杂的统计搜索问题自动补全:当用户在搜索框内输入相关的词条拼音首字母实时给与对应的提示数据同步: 当mysql中的数......