本文目录导读:

Locust 进行分布式压测的核心思想是 一个 Master(主节点)控制多个 Worker(工作节点),Master 负责协调、发送指令和收集统计结果,Worker 负责实际模拟用户并发送请求。
以下是实现分布式压测的详细步骤和配置方法:
核心原则与架构
- Master(主节点): 运行
--master模式,无 Web UI 或命令行 UI,负责接收 Worker 的 Heartbeat 并聚合统计数据。它不发送任何实际的 HTTP 请求。 - Worker(工作节点): 运行
--worker模式,连接到 Master,它独立执行测试脚本,并向目标服务器发送请求。 - 通信: Master 和 Worker 之间通过 ZMQ 协议进行通信,这需要所有机器之间网络互通,且 Master 必须开放特定端口。
环境准备
所有节点(Master 和 Worker)需要满足以下条件:
- 安装 Locust: 所有机器上都必须安装相同版本的 Locust 及其依赖。
pip install locust
- 测试脚本同步: 所有机器上的测试脚本(
locustfile.py)必须完全一致,建议使用 Git 或共享文件系统同步。 - 网络可达:
- 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决定。
第三步:开始压测
- 打开浏览器,访问 Master 的 Web UI:
http://192.168.1.100:8089。 - 你会在界面右上角看到已连接的 Worker 数量(
Workers: 3)。 - 设置用户数(总用户数会均匀分配给所有 Worker,例如设置 1000 用户,3 个 Worker 则每个 Worker 运行约 333 个用户)。
- 点击 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 文件。
常见问题与解决方法
-
Worker 连接不上 Master?
- 检查防火墙:确保 Master 机器的端口
5557(Worker 连接端口)和5558(Web UI 端口)已开放,如果使用了--web-port修改了 UI 端口,对应调整。 - 检查 IP 地址:Worker 必须使用 Master 的实际 IP(而非
localhost或0.0.1)。 - 网络隔离:检查 Worker 和 Master 是否在同一 VPC 或子网内。
- 检查防火墙:确保 Master 机器的端口
-
脚本不同步导致报错?
- Master 和 Worker 的
locustfile.py必须完全相同,Worker 脚本中引用了 Master 不存在的类或函数,会报错。最佳实践:使用 Git 拉取,或共享同一文件系统。
- Master 和 Worker 的
-
性能瓶颈在哪里?
- Master 是瓶颈:Master 负责聚合所有 Worker 的报告,当有大量 Worker(100+)时,Master 可能成为瓶颈,此时可以考虑限制 Master 的 Web UI 更新频率(
--web-stat-interval)。 - Worker 是瓶颈:Worker 本身是普通机器,如果脚本中有复杂的逻辑或大量的数据处理,可能 Worker 先被 CPU 或内存打满。
- Master 是瓶颈:Master 负责聚合所有 Worker 的报告,当有大量 Worker(100+)时,Master 可能成为瓶颈,此时可以考虑限制 Master 的 Web UI 更新频率(
-
端口冲突?
- 如果默认的 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
- 如果默认的 5557/5558 被占用,可以在 Master 启动时指定其他端口:
实战示例部署架构
场景:需要 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 只协调不执行。
标签: 压测
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播