由于公司项目做了巨大改动,需要重新测试性能,下面记录本次测试的过程:
1.准备环境
测试需要公司开阿里云机器测试花钱的,所以先在本地把数据准备好
- 测试数据
- 生成账户数据,使用jar包生成
- 再使用jar 生成payment 和insert 的签名数据
-
jmeter工具
打包Jmeter 镜像,先在本地创建一个目录jmeter_docker ,里面放jmeter文件夹,如下图:
创建一个Dockerfile文件,Dockerfile脚本如下:
FROM java:8
# 基础java版本
MAINTAINER cctester
# 作者
ENV http_proxy ""
ENV https_proxy ""
RUN mkdir /test && \
chmod -R 777 /test
# 创建/test目录,用于存放jmx脚本、jtl结果文件、html测试报告文件
ENV JMETER_VERSION=5.2.1
ENV JMETER_HOME=/usr/local/apache-jmeter-${JMETER_VERSION}
ENV JMETER_PATH=${JMETER_HOME}/bin:${PATH}
ENV PATH=${JMETER_HOME}/bin:${PATH}
# 设置JMeter环境变量
ADD apache-jmeter-${JMETER_VERSION}.tgz /usr/local
# 添加JMeter
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
再制作Jmeter镜像
执行命令 docker build -t jmeter .
注意不要忽略最后点
打完查看镜像,执行 docker images
再将JMeter 镜像保存本地
docker save -o jmeter.tar jmeter:latest
把 Jmeter.tar 复制到压测机器上,执行导入镜像
docker load -i jmeter.tar 即可
- 监控工具
本次性能测试采用node_exporter+promethus+granfan监控节点机器
使用jmeter+influxdb+granfan显示jmeter数据,都采用docker-compose方式来安装
docker_compose文件如下:
version: '2'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
hostname: prometheus
restart: always
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
# - ./node_down.yml:/etc/prometheus/node_down.yml
ports:
- "9090:9090"
networks:
- kong_net
grafana:
image: grafana/grafana
container_name: grafana
hostname: grafana
restart: always
ports:
- "3000:3000"
networks:
- kong_net
influxdb:
image: influxdb:1.8.4-alpine
container_name: influxdb
ports:
- "8083:8083"
- "8086:8086"
- "8090:8090"
networks:
kong_net:
2.测试过程
- 先安装测试机上的Docker环境
进入机器上,先执行如下命令:
apt-get update
apt-get upgrade
apt install docker.io
安装docker后,执行docker -v可查看版本号
再安装docker-compose 一般执行
https://get.daocloud.io
这个网址里面的命令就可以,但是测试的机器报443 不得已解决,直接将docker-compose 拷贝到节点机器的/usr/local/bin 目录下
进入docker_compose 目录下,执行 docker_compose up -d 命令启动promethus+grafana+influxdb容器
- 由于jmeter需要将数据写入influxdb中,需要先创建好数据库,如下步骤:
进入influxdb 容器中,创建数据库myDB 以便于jmeter写入数据
-
再需要先下载一个jmeter influxdb的插件,放到jmeter目录下的lib/ext目录下
-
jmeter 需要添加一个后置监听器
- 节点所在机器上需要启动node_exporter容器,监控节点资源,docker_compose文件内容如下:
version: '2'
services:
node-exporter:
image: prom/node-exporter
container_name: node-exporter
hostname: node-exporter
restart: always
ports:
- "9100:9100"
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: "root"
MYSQL_USER: 'test'
MYSQL_PASS: 'root'
restart: always
volumes:
- "./db:/var/lib/mysql"
- "./conf/my.cnf:/etc/my.cnf"
- "./init:/docker-entrypoint-initdb.d/"
ports:
- "3306:3306"
配置promethus.yaml 文件
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['8.130.12.208:9100']
- targets: ['8.130.8.46:9100']
grafana 容器启动起来后,使用浏览器打开 http://127.0.0.1:3000 会显示grafana界面,默认用户名和密码是admin/admin 。
进入grafana 界面后,先配置promethus数据源
再配置influxdb的数据源
infulxdb 需要配置事先创建好的数据库
再添加显示的模块,进入https://grafana.com/grafana/dashboards 查找需要的模板
有2种方式可以导入模板
1是直接上传下载好的json文件,2是再模板详情页面有一个id复制这个id 进行导入
- 如何在外部使用root连接这个mysql? 为了安全,首先需要设置root帐号的密码,先将当前库切到mysql
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
10. 设置root账户的密码为root
mysql> update user set authentication_string = password('root') where user = 'root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
11. 给所有root用户赋权,外部的电脑也能够通过root访问Docker中的mysql数据库
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)