Docker イメージを使い、手軽に LB テスト環境を構築する
以前に LB の動作確認をする際に Web サーバ側においておく PHP スクリプト というメモを書きました。 しかし、LB(ロードバランサー)の試験をする度に環境構築を行い、テスト用スクリプトを置くのが面倒なので「LB テスト用の Docker イメージ」を作成してみました。
Dcoker イメージ
作成したイメージは Docker Hub に公開してあります。
LB テスト用のコンテナを起動する
LB テスト用のコンテナを 10 個、起動したい場合は以下のワンライナーを実施します。
| for port in $(seq 1 10); do docker run -p `expr $port + 10000`:80 -e LB_NODE=Web-$port --name Web-$port -dit sig9/lb-test-web-servers; done
|
BIG-IP に Pool Member を追加する
BIG-IP に Pool Member を追加します。 既に「POOL-1」という Pool が存在している場合は以下のように tmsh
から Transacton を使って Pool Member を追加するのが簡単です (BIG-IP での Transaction 機能については トランザクションを使い、エラー時は「全て無かったこと」にする を参照してください)。
1
2
3
4
5
6
7
8
9
10
11
12 | create / cli transaction
modify / ltm pool POOL-1 members add { 172.20.2.1:10001 } monitor http
modify / ltm pool POOL-1 members add { 172.20.2.1:10002 } monitor http
modify / ltm pool POOL-1 members add { 172.20.2.1:10003 } monitor http
modify / ltm pool POOL-1 members add { 172.20.2.1:10004 } monitor http
modify / ltm pool POOL-1 members add { 172.20.2.1:10005 } monitor http
modify / ltm pool POOL-1 members add { 172.20.2.1:10006 } monitor http
modify / ltm pool POOL-1 members add { 172.20.2.1:10007 } monitor http
modify / ltm pool POOL-1 members add { 172.20.2.1:10008 } monitor http
modify / ltm pool POOL-1 members add { 172.20.2.1:10009 } monitor http
modify / ltm pool POOL-1 members add { 172.20.2.1:10010 } monitor http
submit / cli transaction
|
ブラウザでアクセスしてみる
BIG-IP の Virtual Server 経由でアクセスすると以下のように表示されます。 Time
にはアクセスした時間が、Node
には分散対象サーバの名前が表示されます。 何度かリロードしてみると Time
や Node
の表示が変化していき、LB の動作を試せるはずです。
![file](01.png)
CLI からアクセスしてみる
ホスト名だけを表示させたい場合は hostname.php
にアクセスします。
| $ curl http://172.20.1.211/hostname.php
Web-5
|
時刻とホスト名を表示させたい場合は time.php
にアクセスします。
| $ curl http://172.20.1.211/time.php
2017-03-20 07:02:01.741 Web-9
|
「1,000 回アクセスしたい」といった場合は以下のようなスクリプトを用意します。
| #!/bin/sh
for port in $(seq 1 $2)
do
curl $1
done
|
実行結果は以下の通りです。 アクセスする毎に異なった Node が応答しており、「負荷分散されている」ことが分かります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | # ./web-tester.sh http://172.20.1.211/time.php 1000
2017-03-20 07:25:08.36 Web-1
2017-03-20 07:25:08.370 Web-3
2017-03-20 07:25:08.376 Web-6
2017-03-20 07:25:08.383 Web-8
2017-03-20 07:25:08.389 Web-2
2017-03-20 07:25:08.395 Web-4
2017-03-20 07:25:08.401 Web-7
2017-03-20 07:25:08.408 Web-9
2017-03-20 07:25:08.414 Web-5
2017-03-20 07:25:08.420 Web-10
2017-03-20 07:25:08.426 Web-1
2017-03-20 07:25:08.432 Web-3
2017-03-20 07:25:08.440 Web-6
2017-03-20 07:25:08.45 Web-8
2017-03-20 07:25:08.460 Web-2
2017-03-20 07:25:08.468 Web-4
2017-03-20 07:25:08.474 Web-7
2017-03-20 07:25:08.480 Web-9
2017-03-20 07:25:08.487 Web-5
2017-03-20 07:25:08.493 Web-10
・
・
・
|