性能测试环境搭建(一)
环境概况
docker 基础知识
docker 搭建数据库
性能测试环境搭建(二)
docker 搭建 tomcat 项目
docker 搭建 nginx 集群
jmeter 进行集群
性能测试性能测试环境搭建(三)
docker-link 搭建 tomcat-mysql
docker-link 搭建 tomcat-nginx 集群
一、性能测试环境搭建:虚拟机 + Linux + Docke + MySQL
1、环境概况
操作系统:linux
-
- 云服务器:自己购买
- 虚拟机:自行安装就好了;从给的百度网盘下载 ova 文件
数据库:mysql
应用中间件:tomcat + nginx(译:恩就死:反向代理,负载均衡的集群)
下图说明:Linux 服务器 里面装了 MySQL 和 Tomcat + nginx(实际的企业里面 MySQL 和 Tomcat + nginx 应用程序不会装在一个机器上)
tomcat 可以用很多个
环境搭建方式:
-
- 手工:经典、传统、用时比较长、需要一定基础工具
- docker:潮流、快捷----课程选用
二、环境搭建
1、安装虚拟机 vmware 自行安装
(安装了 vmware 之后 一定 要重启动电脑)
2、安装 CentOS linux 7 系统
1、打开位置:文件 --- 打开 --- 选择 ova (Linux系统)文件
2、点击“导入”,会提示失败,但是没有关系 点击 “重试”就可以
- 虚拟机已经安装了 Linux ,安装好了就可以使用
3、修改 “编辑虚拟机设置” 配置
4、如果出现 下图提示,不用管
5、如果出现 “ 此主机支持Intel VT-x,但Intel VT-x处于禁用状态”
修改配置:https://jingyan.baidu.com/article/59a015e3929235b695886539.html
6、设置 root 密码(输入密码时是看不到的123456);
- 使用 ifconfig 查看 ip地址(之后会用到)
- 使用 java -version 查看 jdk 版本
三、Docker 基本知识
1、Docker基础
Docker 是一个 开源 的应用容器引擎,基于 GO 语言,遵循 Apache2.0 开源协议
容器:是一个沙箱,相互之间没有任何接口,自身性能开销极低;相当于袋子
容器内部,其实是一个不全的 linux 内核系统 (cgroups\namespace\UnionFS:三个组成了容器)
2、Docker 特点:
linux 操作系统
资源开销极低
沙箱,容器闻相互隔离
3、应用:
容器组为应用中间件
同一个硬件上运行更多容器
4、Docker组成:
- 镜像 Image:从仓库中复制出来
- 文件镜像(就像纸张,它有不同的尺寸)
- 镜像:镜子中的图形
- 文件镜像(就像纸张,它有不同的尺寸)
- 容器 Container:
- 镜像运行的实体(由纸张组成的笔记本,不同尺寸纸张,构成不同大小笔记本)
- 仓库 Repository:
- 镜像仓库(纸张不同大小,尺寸标签)
Linux 环境下 Docker 安装
1、使用 Xshell 链接刚才创建的 Linux 系统
linux: centos7(root:123456)
reboot now:重启虚拟机
2、安装 docker 第一步:
安装 docker 相关依赖:yum install -y yum-utils device-mapper-persistent-data lvm2
3、安装 docker 第二步:
一键安装dicker:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
4、把安装的服务设置为 开机自启动
配置开机启动:systemctl enable docker
重启动 docker:systemctl restart docker
如果在公司里面不是 root 权限需要加(sudo):sudo systemctl enable docker
docker帮助命令:docker --help
6、docker 基本使用
直接 docker --help 帮助命令
-
- Usage: docker [OPTIONS] COMMAND
- docker + 【OPTIONS 选项】 + 命令
命令:
docker pull:我们从仓库里面拉取镜像
从 Daocloud 拉取镜像地址: https://hub.daocloud.io/
使用 docker 安装 Linux 系统
使用命令在 当前 Linux 系统下 在安装一个 Linux 系统,登录镜像地址,查找 centos
就可以看到最新的 镜像仓库地址 和 版本
docker images:查看镜像是否存在
docker rmi:删除镜像
可以根据 IMAGE ID 删除镜像
docker rm -f 容器名称 or 容器id:删除容器
拉取镜像:docker pull daocloud.io/library/centos:latest
创建容器:docker run -itd --name bbb_name daocloud.io/library/centos:centos8
docker start 容器名称 or 容器id:启动容器
docker restart 容器名称 or 容器id:重启容器
docker stop 容器名称 or 容器id:停止
docker exec:退出
docker ps -a:在加上 -a,查看所有运行和未运行的容器
docker pa:查看正在运行的容器;
docker exec -it 容器名称或ID /bin/bash:进入容器
exit:退出当前 容器
docker exec -it 容器名称或ID /bin/bash:进入容器
cat /etc/redhat-release:查看发行版本
容器与宿主机之间拷贝文件
从宿主机拷贝文件到容器
-
- docker cp 宿主文件路径 容器id:容器内路径
从容器拷贝文件到宿主机
-
- docker cp容器id:容器内路径 宿主文件路径
常用命令:
创建一个新容器并运行
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -itd --name=container_name -p 80:80 -v $PWD:/data nginx:latest
创建一个 名为 container_name 的容器,拉取的镜像地址
示例:
先拉取镜像:docker pull daocloud.io/library/centos:latest
在创建容器:docker run -itd --name bbb_name daocloud.io/library/centos:centos8
options 选项:
-i:以交互模式运行容器
-t:为容器重新分配一个伪输终端
-d:后台运行容器
-e username="value:设置环境变量
-p:指定端口映射主机端口:容器端口
-v:本地文件路径映射到容器路径
--name="":指定容器名称
--link=[ ]:添加链接到另一个容器(--link 容器 A 名称:别名).
Linux 系统安装 vi 命令
命令:yum install vim -y
验证vim 命令,创建文件:vim 2.txt
操作 2.txt 文件:i 进入编辑状态,随意输入内容,ESC 退出编辑状态,:wq 保存名退出
Docker 搭建 mysql 数据库
第一步:dockerhub 国内网站,确定要安装的版本
第二步:下载镜像
docker pull daocloud.io/library/mysql:5.7.4
第三步:创建 MySQL 数据库容器:
没有开机自启动
docker run -itd --name aaa_mysql_577 -p 3316:3306 -e MYSQL_ROOT_PASSWORD=root123456 daocloud.io/library/mysql:5.7.7
开机自启动命令
docker run -itd --restart always --name aaa_mysql_577 -p 3316:3306 -e MYSQL_ROOT_PASSWORD=root123456 daocloud.io/library/mysql:5.7.7
reboot now:重启虚拟机,可以验证是否是开机自启动
如果没有下载镜像:
开机自启动命令
docker run -itd --restart always --name aaa_mysql_576 -p 3317:3306 -e MYSQL_ROOT_PASSWORD=root123456 daocloud.io/library/mysql:5.7.6
会自行下载镜像
链接 MySQL 数据库
1、使用 ifconfig 查看 IP地址 + 创建MySQL 时的端口号
2、使用工具链接数据库,输入ip 地址、端口号
使用 Navicat Premium 链接 MySQL 数据库
新建数据库;在数据库 新建查询 ,执行表结构 SQL;
----------
查看表结构是否存在
创建第一个 tomcat 容器:8080端口:
下载镜像:
确定 tomcat 版本: tomcat8、tomcat9
从 dockerhub 中找到对网版本的tag: 8.5.60
下载镜像:docker pull tomcat:8.5.60
创建第1个 tomcat 容器与 mysql 数据库关联:
docker run -itd --name tomcat4 -p 8084:8080 --link mysql57:mysql -v $PWD/logs4:/usr/local/tomcat/logstomcat:8.5.60
-v:转机,本地的某个路径或者某个文件,映射到我的容器里面的某一个路径或者某一个 文件下面去
拷贝项目包到容器
docker cp erp.war tomcat4:/usr/local/tomcat/webapps
修改项目配置:application.yml
- 开发者节点数据库配置修改
- ip为:mysql
- 端口为:mysql 默认端口3306
从宿主机拷贝修改后的文件到容器:
docker cp application.yml tomcat4:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml
重启动tomcat1容器
docker restart tomcat4
1、拉取镜像:
docker pull daocloud.io/library/tomcat:9.0.0-jre8
-
- jre8:Java 运行环境
- jdk:Java 开发工具包,jdk 包含 jre
查看镜像是否存在:docker images
2、使用这个镜像创建容器 8080
docker run -itd --name tomcat_2 -p 8580:8080 daocloud.io/library/tomcat:9.0.0-jre8
3、拷贝项目包到容器根目录
4、移动后查看
5、拷贝项目包到容器:
docker cp erp.war tomcat_2:/usr/local/tomcat/webapps
验证是否拷贝进去了
进入 tomc :docker exec -it tomcat_2 /bin/bash
把项目 war 包放到 Tomcat 文件下 会自动解压 erp 文件夹
6、erp 项目配置修改
/webapps/erp/WEB-INF/classes/application.yml
具体路径:/usr/local/tomcat/webapps/erp/WEB-INF/classes
这个文件可以修改数据库配置,只需要修改开发环境,以及日志文件地址
编辑配置文件 application.yml 发现没有 vi 命令
1、可以在这里安装 vi 命令
2、也可 在这里(容器)拷贝出来 修改后 在拷贝到容器里面,这样 容器里面就不需要安装 vi 命令
7、从容器中拷贝配置文件到宿主机器:$PWD(表示当前 路径)
docker cp tomcat_2:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml $PWD
8、修改项目配置:application.yml
使用 vim 命令未找到命令:说明为安装 vim 命令
yum install vim -y
vi 和 vim 的区别:vim 有颜色,vi 是系统自带的
开发者节点数据库配置修改
- ip 为宿主机 ip
- 端口为 mysql 容器映射给宿主机的端口
- 修改数据库账号密码
9、从宿主机拷贝修改后的文件到容器:
docker cp application.yml tomcat_2:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml
10、修改后需要重启容器:Tomcat_2
docker restart tomcat_2
11、创建数据库 erp 表(上面已经创建了,省略)
12、验证项目:jmeter
方法1:查看 logs 文件夹中的日志
方法2:通过接口工具调接口
jmeter 验证注册接口请求成功
在数据库中查看表中是否存在数据
创建第二个 Tomcat 容器:
1、使用这个镜像创建容器 8080
docker run -itd --name tomcat_3 -p 8680:8080 daocloud.io/library/tomcat:9.0.0-jre8
2、拷贝项目包到容器:
docker cp erp.war tomcat_3:/usr/local/tomcat/webapps
3、从宿主机拷贝修改后的文件到容器:
docker cp application.yml tomcat_3:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml
4、修改后需要重启容器 Tomcat_2
docker restart tomcat_3
验证项目:
方法1:查看 logs 文件夹中的日志
方法2:通过接口工具调接口
jmeter 验证注册接口请求成功;以写入数据库
在数据库表中查看数据是否存在
nginx 基础
nginx 是一个高性能性能的HTTP和反向代理web服务器
-
主要用途:
- web服务器
- 反向代理
- 负载均衡
Docker 安装 nginx;实现容器间关联搭建Tomcat
先拉取镜像:docker pull daocloud.io/library/nginx:1.13.0-alpine
在创建 nginx 容器:docker run -itd --restart always --name docker-nginx -p 80:80 daocloud.io/library/nginx:1.13.0-alpine
现在我们存在两个公司 Tomcat 项目,想要配置为集群;
需要修改 nginx 配置文件
nginx 容器配置:
1、从nginx 容器中拷贝配置文件到宿主机
docker cp docker-nginx:/etc/nginx/nginx.conf $PWD
2、修改 nginx.conf 文件
网盘链接:https://pan.baidu.com/s/1oMtiAZ11vi747iQ8inKaPA 提取码:7yaw
先把网盘中修改好的配置文件,放到Linux环境根目录下,已经移动到root下
有两个 Tomcat 服务和在一起,修改 ip + 端口号 向外映射;
weight = 1:这两个服务的平均负载均衡,平均分配
3、拷贝修改后的 nginx.conf 文件到容器中
docker cp nginx.conf docker-nginx:/etc/nginx/nginx.conf
4、重启动 nginx 容器
docker restart docker-nginx
5、验证项目接口:
方法1:查看 logs 文件夹中的日志
方法2:通过接口工具调接口;更改端口80
jmeter 验证注册接口请求成功;以写入数据库
查看数据库表中是否添加数据
集群测试
常用步骤
创建第1个 tomcat 容器与 mysql 数据库关联:
docker run -itd --name tomcat4 -p 8084:8080 --link mysql57:mysql -v $PWD/logs4:/usr/local/tomcat/logstomcat:8.5.60
-v:转机,本地的某个路径或者某个文件,映射到我的容器里面的某一个路径或者某一个 文件下面去
拷贝项目包到容器
docker cp erp.war tomcat4:/usr/local/tomcat/webapps
修改项目配置:application.yml
-
- 开发者节点数据库配置修改
- ip为:mysql
- 端口为:mysql 默认端口3306
- 开发者节点数据库配置修改
从宿主机拷贝修改后的文件到容器:
docker cp application.yml tomcat4:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml
重启动tomcat1容器
docker restart tomcat4
1、下载镜像:
需要 Tomcat 镜像、及安装好的 MySQL 数据库
2、创建 Tomcat 容器
换其他路径 进行安装 opt
docker run -itd --name tomcat_4 -p 8780:8080 -v $PWD/logs4:/usr/local/tomcat/logs --link aaa_mysql_577:mysql575 daocloud.io/library/totomcat:9.0.0-jre8
docker run -itd --name tomcat容器名称 -p 映射到本地端口:8080 -v 当前 Tomcat 日志地址logs,映射到本地的logs4路径下面去 --link 数数据库容器名称:数据库别名 Tomcat镜像地址:Tomcat版本号
--link :在 Tomcat 容器 与 MySQL 容器之间建立链接,把两个容器创建成一个局域网,都放在一个区域
日志文件位置
查看日志:tailf catalina.2020-12-25.log
实时查看日志:tailf -f catalina.2020-12-25.log
查看日志文件:vim catalina.2020-12-25.log
2、配置文件拷贝当前路径
项目包放进去
配置文件需要拷贝 出来
docker cp tomcat_4:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml $PWD
修改配置文件:
vim application.yml
使用别名 mysql4,不用改端口(因为是两个容器与容器之间的局域网,已经在一起了,没有通过宿主机)
修改账号root 密码 root123456
3、从宿主机拷贝修改后的文件到容器
docker cp application.yml tomcat_4:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml
4、修改后需要重启容器 Tomcat_4
docker restart tomcat_4
然后去 logs4 查看日志
查看日志:tailf catalina.2020-12-25.log
实时查看日志:tailf -f catalina.2020-12-25.log
查看完整日志文件:vim catalina.2020-12-25.log
1、使用这个镜像创建容器 8080
docker run -itd --name tomcat_5 -p 8880:8080 -v $PWD/logs5:/usr/local/tomcat/logs --link aaa_mysql_577:mysql575 daocloud.io/library/tomcat:9.0.0-jre8
2、拷贝项目包到容器:
docker cp erp.war tomcat_5:/usr/local/tomcat/webapps
3、修改后的application.yml 配置文件,从宿主机拷贝修改后的文件到容器:
docker cp application.yml tomcat_5:/usr/local/tomcat/webapps/erp/WEB-INF/classes/application.yml
把这个application文件拷贝到这个容器Tomcat5
4、修改后需要重启容器 Tomcat_5
docker restart tomcat_5
5、然后去 logs5 查看日志
查看日志:tailf catalina.2020-12-25.log
实时查看日志:tailf -f catalina.2020-12-25.log
查看完整日志文件:vim catalina.2020-12-25.log
Docker安装nginx
下载镜像:
docker pull daocloud.io/library/nginx:1.13.0-alpine
创建 nginx 容器:
docker run -itd --restart always --name docker-nginx2 --link tomcat4:tomcat4 --link tomcat5:tomcat5 -p 8980:80 daocloud.io/library/nginx:1.13.0-alpine
配置 nginx 创建集群
docker run -itd --restart always --name docker-nginx2 --link tomcat_4:tomcat4 --link tomcat_5:toncat5 -p 8888:80 daocloud.io/library/nginx:1.13.0-alpine
复制 nginx.conf 到 opt 目录下:cp nginx.conf /opt/
在 opt 目录下 修改配置:vim nginx.conf
nginx 容器配置:
基本配置步骤:
1从 nginx 容器中拷贝配置文件到宿主机
docker cp docker-nginx2:/etc/nginx/nginx.conf $PWD
2修改 nginx.conf 文件
3拷贝修改后的 nginx.conf 文件到容器中
docker cp nginx.conf docker-nginx2:/etc/nginx/nginx.conf
4重启动 nginx 容器
docker restart nginx
拷贝 配置文件 到 容器里面
docker cp nginx.conf docker-nginx2:/etc/nginx/nginx.conf
重启动 nginx 容器
docker restart nginx
接口验证:
nginx 为什么要使用 --link
1、如果 没有使用link 那么数据就要消耗宿主机的 IO;不使用 nginx IO 就要消耗的大一些,同时它的内存也要消耗的大一些;随意这样就会导致我的
宿主机相对而言性能要大一些,也就是说最终的性能不是理想;;;;;而使用了 --link 之后,就不会消耗额外的资源了,它的性能就要更好一些,
2、不管请求的数据是多还是少;比如说:请求的报文只有 1kb ,但是我进入容器,然后又出来回到宿主机,那内存里面就要存在 这个2 kv 的数据大小
我的宿主机内存先要有这个数据,然后进入到里面去,从 nginx 里面在出来,又回到宿主机,那宿主机要接受这个数据,接受这个数据,
在进入 Tomcat 这个容器里面去,我的内存消耗就要大一些
宿主机同样的硬件的配置,使用了 --link 方式,来链接容器,它的性能、速度都会要快很多;;
因为他们几个 组成局域网访问的速度比较快
nginx 本来就是做负载均衡的,nginx 要配置负载均衡的时候,配置的是宿主机的 IP 和宿主机的端口
数据流向:比如用户发过来一个请求 到了 nginx, nginx 机器先从外面 进入 nginx 容器里面去,你告诉它要找的是宿主机的 ip,又要回到 宿主机;
再从宿主机看到宿主机的端口,在进入另一个容器里去;
如果用第一种方法 ,不适用 link ;一个访问我的数据库,访问我的网卡,进入到我的服务器里面来了;
就会进入到,因为有一个80 的端口,找到宿主机的 80 端口;宿主机的80端口我就会进入到 nginx 这个容器里面去,
nginx 这个容器里面发现它要找的 ip 地址,是我宿主机的 ip地址 和 宿主机的端口;要从 nginx 容器里面出来,
进入到我的宿主机,找到了这个端口,在进入 Tomcat 容器里面去 它转了一个弯
如果是 link :用户来访问一个请求,从宿主机的网卡进入到宿主机,找到了nginx 的端口,就会进入到 nginx 这个容器里面;
发现 它是一个 内部局域网、容器局域网;容器局域网里面,容器里面它要找的是 容器的别名;直接通过这个找到我的另外一个容器,在容器局域网里面找到了我的另外一个容器;进入到另外一个容器里面,由另外一个容器处理了在出来; 可以少走弯路
我的数据流至少再从容器里面出来一次,进入到宿主机,宿主机在进入到容器
性能的话语就是:首先你的 IO 、速度换入换出要跟少了;首先进入到容器里面,在出来,在进入容器里面去 有很多IO 数据换入换出;
使用link了之后,直接进入 容器里面,我在容器的局域网里面,进行数据的交换,这样就可以不消耗宿主机的 IO;
*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!*******