Locust最佳实践之分布式容器化部署(五)

服务资源

四台相同配置的服务器 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

工程环境说明

  1. 需要locust做性能测试
  2. 需要requests库做登录以及其他请求
  3. 需要redis 做数据存储,比如 动态token

Locust最佳实践之分布式容器化部署(五)

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

这里我们需要先启动主机,后启动从机,看到如下就证明我们分布式部署成功了!

Locust最佳实践之分布式容器化部署(五)

 

上一篇:有了这 4 款工具,老板再也不怕我写烂SQL了


下一篇:linux CentOS 7 mysql pt-query-digest 分析慢sql + profiling 分析具体SQL