負荷試験の環境を手軽に作りたいという思い、Dockerで使って作ってみた。
基本的には下記のものとほとんど下記を参照しています。+αとしてDocker Compose使うとよりいいかんじにmaster slave構成ができるというもの。
Docker + Locustのことは上記に詳しく書いているので省略します。
Docker ComposeのConfigは下記のようになっていて、テスト用にnginxを立てていて、nginxに対して負荷をかけていく構成にしています。
docker-compose.yaml
web:
image: nginx
ports:
- "80:80"
master:
build: .
command: locust -f /locust/scenarios.py -H http://web --master
ports:
- "8089:8089"
- 5557
- 5558
links:
- web
slave:
build: .
command: locust -f /locust/scenarios.py -H http://web --slave --master-host=master
links:
- web
- master
ports:
- 5557
- 5558
シナリオはただ単にGETするだけのもの
/locust/scenarios.py
from locust import HttpLocust, TaskSet, task
class MyTaskSet(TaskSet):
@task(1)
def index(self):
self.client.get("/")
class MyLocust(HttpLocust):
task_set = MyTaskSet
これで
$ docker-compose up
すればnginxとLocustのmaster + slave * 1が立ち上がります。
LocustのWeb UIで見ればSalveが1になっていると思います。
Slave増やしたいなって思った時は下記のコマンド一発で増やせます。
$ docker-compose scale slave=2
これだけで台数増やせて負荷をかけられるのはいいと思うので負荷試験のときは使ってもいいと思います。これだとSalveを増やしてもシングルホスト上で増えるだけなのでいずれはクライアント側は限界くると思います。
なので下記の記事を参考にすればシングルホストの限界は超えられるかなと思ったりしています。