服务资源
四台相同配置的服务器 4+8
其中一台作为master 机器,其他三台做为worker 机器。
分布式
再次思考一个问题,分布式解决了什么困难,但机器并发到一定程度,无法再起线程。当需求量大的时候就需要把这个压力分摊到多台机器上,就是分布式吧
这里测试框架使用locust ,官方说明:https://docs.locust.io/en/stable/running-locust-docker.html#docker-compose
Git配置
安装
yum install git
生成ssh_key
ssh-keygen -o
配置公钥到gitlab
初始化git仓库
mkdir /data/locust
cd /data/locust
git init
clone远程代码
git clone ssh://git@**.com:0000/python-test/locust_pt.git
容器化
需要在多个服务器上使用同样的配置和操作,所以需要容器化管理,再次之前需要把相同的执行环节进行镜像化打包,然后再做配置化管理(docker-compose)
这里记录一个纯净的服务器,没有进行任何配置时的一系列环境配置过程,以及遇到的问题。
docker 容器安装以及启动
yum -y install docker
systemctl start docker
查看docker 启动状态
systemctl status docker
docker-compose 环境配置
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果慢,可以换一个源:
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
加上可执行权限:
chmod +x /usr/local/bin/docker-compose
工程环境说明
- 需要locust做性能测试
- 需要requests库做登录以及其他请求
- 需要redis 做数据存储,比如 动态token
requirements.txt :测试框架基础库管理
#最新版本pip --default-timeout=1000 install locust==1.4.3
locust==1.4.3
requests==2.24.0
redis==3.5.3
Dockerfile :测试环境镜像配置
FROM python:3.6.8
WORKDIR /root
COPY requirements.txt ./
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
docker-compose.yml :容器化管理配置
被注释部分 为基础版本的容器化部署配置,不满足统一化环境管理
version: '3'
#
#services:
# master:
# image: locustio/locust
# ports:
# - "8089:8089"
# - "5557:5557"
# volumes:
# - /data/locust:/mnt/locust
# command: -f /mnt/locust/locust_pt/task_runner.py --master
#
# worker:
# image: locustio/locust
# volumes:
# - /data/locust/:/mnt/locust
# command: -f /mnt/locust/locust_pt/task_runner.py --worker --master-host=10.15.0.0
services:
master:
image: locust-pt
tty: true
container_name: loust_master
volumes:
- /data/locust/locust_pt:/mnt/locust/locust_pt
ports:
- "8089:8089"
- "5557:5557"
command: locust -f /mnt/locust/locust_pt/task_runner.py --master
worker:
image: locust-pt
tty: true
container_name: loust_master
volumes:
- /data/locust/locust_pt:/mnt/locust/locust_pt
command: locust -f /mnt/locust/locust_pt/task_runner.py --worker --master-host=10.15.0.0
task_runner.py :性能测试统一执行文件
# -*- coding: utf-8 -*-#
# ------------------------------------------
# FileName: task_runner
# Description:
# Author:
# Date: 2021/3/3 10:10
# ------------------------------------------
from locust import HttpUser
from api20210322.live_test import Live
class User(HttpUser):
"""
测试通统一执行类
"""
tasks = [Live, ]
host = "https://baidu.com"
测试环境镜像打包
复制docker相关配置文件
# 进入文件 /data/locust
cp /locust_pt/requirements.txt .
cp /locust_pt/Dockerfile .
cp /locust_pt/docker-compose.yml .
# 测试环境打包
docker build -t locust-pt .
# 这个时候可能会出现部分依赖下载超级慢,需要更新pip
pip install --upgrade pip
主机docker-compose.yml 这么配置
这里存在一个误区,当单服务期部署多容器时,因为是统一台服务器,不存在通信问题,所以无需设置通信端口和IP 。
当多服务器部署时,存在一个问题,worker机器需要和master 机器通信,指向master 进行分发请求,需要设定统一的端口和IP,
我们需要的端口"5557"默认是关闭的,所以不进行手动配置时,会出现,worker 机器正常可以ping通master 机器,但是无法进行指向
services:
master:
image: locust-pt
tty: true
container_name: loust_master
volumes:
- /data/locust/locust_pt:/mnt/locust/locust_pt
ports:
- "8089:8089"
- "5557:5557"
command: locust -f /mnt/locust/locust_pt/task_runner.py --master
从机docker-compose.yml这么配置
services:
worker:
image: locust-pt
tty: true
container_name: loust_master
volumes:
- /data/locust/locust_pt:/mnt/locust/locust_pt
command: locust -f /mnt/locust/locust_pt/task_runner.py --worker --master-host=10.18.0.0
启动主机/从机容器
docker-compose up
这里我们需要先启动主机,后启动从机,看到如下就证明我们分布式部署成功了!