locust如何分布式压测

联启 网络工具 13

本文目录导读:

locust如何分布式压测-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 核心原则与架构
  2. 环境准备
  3. 启动步骤
  4. 无 Web UI 模式(命令行/自动化)
  5. 常见问题与解决方法
  6. 实战示例部署架构

Locust 进行分布式压测的核心思想是 一个 Master(主节点)控制多个 Worker(工作节点),Master 负责协调、发送指令和收集统计结果,Worker 负责实际模拟用户并发送请求。

以下是实现分布式压测的详细步骤和配置方法:

核心原则与架构

  • Master(主节点): 运行 --master 模式,无 Web UI 或命令行 UI,负责接收 Worker 的 Heartbeat 并聚合统计数据。它不发送任何实际的 HTTP 请求。
  • Worker(工作节点): 运行 --worker 模式,连接到 Master,它独立执行测试脚本,并向目标服务器发送请求。
  • 通信: Master 和 Worker 之间通过 ZMQ 协议进行通信,这需要所有机器之间网络互通,且 Master 必须开放特定端口。

环境准备

所有节点(Master 和 Worker)需要满足以下条件:

  1. 安装 Locust: 所有机器上都必须安装相同版本的 Locust 及其依赖。
    pip install locust
  2. 测试脚本同步: 所有机器上的测试脚本(locustfile.py)必须完全一致,建议使用 Git 或共享文件系统同步。
  3. 网络可达:
    • Worker 节点必须能访问 Master 节点的 IP 和端口(默认 5557 和 5558)。
    • Master 节点必须能接收 Worker 的连接。

启动步骤

假设你的测试脚本是 locustfile.py,Master 机器的 IP 是 168.1.100

第一步:启动 Master 节点

在 Master 机器上运行以下命令:

locust -f locustfile.py --master --web-host=0.0.0.0 --host=https://example.com
  • --master:指定当前节点为 Master。
  • --web-host=0.0.0.0:允许所有 IP 访问 Web UI(如果是本地测试可以省略,但分布式通常需要远程访问)。
  • --host:目标服务器的 URL。
  • 可选参数
    • --master-bind-port=5557:指定 Master 监听 Worker 连接的端口(默认 5557)。
    • --expect-workers=3:指定期望连接的 Worker 数量,当达到该数量后,Master 自动开始测试(无需手动点击)。

第二步:启动 Worker 节点

在每台 Worker 机器上运行以下命令:

locust -f locustfile.py --worker --master-host=192.168.1.100 --master-port=5557
  • --worker:指定当前节点为 Worker。
  • --master-host:Master 机器的 IP 地址。
  • --master-port:Master 监听的端口(默认 5557)。
  • 注意:Worker 节点没有 --host 参数,目标服务器的地址由 Master 通过 Web UI 指定,或者由 Master 命令行的 --host 决定。

第三步:开始压测

  1. 打开浏览器,访问 Master 的 Web UI:http://192.168.1.100:8089
  2. 你会在界面右上角看到已连接的 Worker 数量(Workers: 3)。
  3. 设置用户数(总用户数会均匀分配给所有 Worker,例如设置 1000 用户,3 个 Worker 则每个 Worker 运行约 333 个用户)。
  4. 点击 Start swarming 开始压测。

无 Web UI 模式(命令行/自动化)

如果不想使用 Web UI,可以通过命令行控制压测的执行。

启动 Master(不带 Web UI):

locust -f locustfile.py --master --headless --host=https://example.com --expect-workers=3 --users=100 --spawn-rate=10 --run-time=30s
  • --headless:不启动 Web UI。
  • --expect-workers=3:Master 会等待 3 个 Worker 连接后自动开始。
  • --users--spawn-rate--run-time:直接在 Master 命令行中指定。
  • 关键点:Master 会等待 Worker 连接,直到数量达到 --expect-workers 值,或者直到 --worker-timeout(默认 120 秒)超时。

启动 Worker(与之前相同):

locust -f locustfile.py --worker --master-host=192.168.1.100

结果输出:

  • Master 启动时带上 --csv=results 参数,所有 Worker 的数据会汇总到 Master 并写入 CSV 文件。

常见问题与解决方法

  1. Worker 连接不上 Master?

    • 检查防火墙:确保 Master 机器的端口 5557(Worker 连接端口)和 5558(Web UI 端口)已开放,如果使用了 --web-port 修改了 UI 端口,对应调整。
    • 检查 IP 地址:Worker 必须使用 Master 的实际 IP(而非 localhost0.0.1)。
    • 网络隔离:检查 Worker 和 Master 是否在同一 VPC 或子网内。
  2. 脚本不同步导致报错?

    • Master 和 Worker 的 locustfile.py 必须完全相同,Worker 脚本中引用了 Master 不存在的类或函数,会报错。最佳实践:使用 Git 拉取,或共享同一文件系统。
  3. 性能瓶颈在哪里?

    • Master 是瓶颈:Master 负责聚合所有 Worker 的报告,当有大量 Worker(100+)时,Master 可能成为瓶颈,此时可以考虑限制 Master 的 Web UI 更新频率(--web-stat-interval)。
    • Worker 是瓶颈:Worker 本身是普通机器,如果脚本中有复杂的逻辑或大量的数据处理,可能 Worker 先被 CPU 或内存打满。
  4. 端口冲突?

    • 如果默认的 5557/5558 被占用,可以在 Master 启动时指定其他端口:
      locust -f locustfile.py --master --master-bind-port=6000
    • 对应的 Worker 也要指定:
      locust -f locustfile.py --worker --master-host=192.168.1.100 --master-port=6000

实战示例部署架构

场景:需要 5000 并发用户压测一个 API 服务。

  • 1 台 Master 节点(4C8G 云服务器):运行 Master 和 Web UI。
  • 5 台 Worker 节点(4C8G 云服务器):每台运行 1000 个虚拟用户。

命令示例:

Master 机器:

locust -f bot.py --master --web-host=0.0.0.0 --host=https://api.target.com --expect-workers=5 --users=5000 --spawn-rate=500 --run-time=5m --stop-timeout=10 --csv=distributed_report

Worker 机器 1-5:

locust -f bot.py --worker --master-host=MASTER_PUBLIC_IP --master-port=5557
节点角色 命令参数 作用 端口
Master --master 控制协调、聚合数据、提供 Web 界面 5557 (Worker 连接)
5558 (Web UI,可配置)
Worker --worker 执行压测脚本、发送真实请求 无需开放入站端口 (主动连 Master)

核心要点:脚本一致、网络互通、Master 只协调不执行。

标签: 压测

抱歉,评论功能暂时关闭!