Locustとは

その他のサービスに対してシミュレートされたユーザーの行動を使って、負荷テストやパフォーマンステストを実施できます。

Locustの主な特徴は次のとおりです:

  1. 分散テスト:Locustはマスター/ワーカーモデルを使用して、複数のマシンでテストを分散させることができます。これにより、大量のユーザーをシミュレートして大規模な負荷テストを行うことができます。

  2. コードベースのシナリオ:LocustのテストシナリオはPythonコードで記述されます。これにより、非常に複雑なユーザー行動を模倣することが可能となります。

  3. リアルタイムアップデート:Locustはリアルタイムでテスト統計を提供します。これにより、テストが進行中に性能に問題が発生していないかどうかを確認することができます。

  4. WebベースのUI:Locustには統計情報を表示するためのWebベースのユーザーインターフェイスが付属しています。また、このUIを通じてテストを開始、停止、または変更することも可能です。

これらの特徴により、Locustは柔軟性とスケーラビリティを兼ね備えた強力な負荷テストツールとなっています。

負荷分散させる目的

1台のマシンで実行されるLocustを用いた負荷試験は以下が安定しない. 1. 一定以上のRPSを超えられない 1. 初動が安定しない

実装のアーキテクチャ

Mater node 1台 Worker node 2台 でクラスタを作成する.

現在,以下のLocustサーバはありません.必要があれば自力で立ててください. locust-cluster.png (356.0 kB)

masterとworkerを接続するために必要な環境・設定 1. Master node側のファイアーウォールをLocust用のPortのみをオフにする 1. Locustのバージョンを揃える

以下のコマンドで1.の設定が可能

sudo ufw allow 8089
以下のコマンドでLocustのバージョンを確認
locust --version
locust 2.15.1 from /home/c0a20137/.local/lib/python3.10/site-packages/locust (python 3.10.6)
違うバージョンの場合,最新版に揃える場合は以下のコマンドを実行
pip3 install --upgrade locust

実行コマンド

Master側とWorker側で実行するコマンドが異なる. 実行コマンドについて記述

Master側

locust -f locustfile.py --master

Worker側

locust -f locustfile.py --worker --master-host=192.168.100.41
この場合,同じlocustfile.pyを共有する必要がある.

Master nodeからSlave nodeにlocustfile.pyを送信

MasterとSlaveで同じlocustファイルを共有する必要がある. シェルスクリプトを用いてMasterのファイルをSlaveに一括送信する. 今回は増田用の内容になっているので,書き換えて!! 具体的に書き換えるのは dirの中身

#!/bin/bash

# 送信元のディレクトリパス
dir="/home/c0a20137/locust"

# 送信先のIPアドレスリスト
ip_addresses=("192.168.100.145" "192.168.100.164")

# ファイル送信の関数
send_files() {
  local source=$1
  local destination=$2
  scp "$source" "$destination"
}

# 送信先のIPアドレスリストに対してファイルを送信
for ip_address in "${ip_addresses[@]}"
do
  for file in "$dir"/*
  do
    if [ -f "$file" ]; then
      filename=$(basename "$file")
      destination="$ip_address:$dir/$filename"
      send_files "$file" "$destination"
    fi
  done
done
Master nodeからSlave

改善点

  • ユーザごとにディレクトリを分けたい←STNSで対処可能
  • Masterで作成したlocustfile.pyをWokerに同期させたい←シェルスクリプトで対処可能
  • Masterでコマンドを実行した後,Workerでのコマンドを自動化したい←シェルスクリプトとpythonファイルで対処可能
  • UI画面にアクセスしたくない←コマンドで対処可能