Skip to content

Docker イメージを使い、手軽に LB テスト環境を構築する

以前に LB の動作確認をする際に Web サーバ側においておく PHP スクリプト というメモを書きました。 しかし、LB(ロードバランサー)の試験をする度に環境構築を行い、テスト用スクリプトを置くのが面倒なので「LB テスト用の Docker イメージ」を作成してみました。

Dcoker イメージ

作成したイメージは Docker Hub に公開してあります。

LB テスト用のコンテナを起動する

LB テスト用のコンテナを 10 個、起動したい場合は以下のワンライナーを実施します。

1
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 には分散対象サーバの名前が表示されます。 何度かリロードしてみると TimeNode の表示が変化していき、LB の動作を試せるはずです。

file

CLI からアクセスしてみる

ホスト名だけを表示させたい場合は hostname.php にアクセスします。

1
2
$ curl http://172.20.1.211/hostname.php
Web-5

時刻とホスト名を表示させたい場合は time.php にアクセスします。

1
2
$ curl http://172.20.1.211/time.php
2017-03-20 07:02:01.741 Web-9

「1,000 回アクセスしたい」といった場合は以下のようなスクリプトを用意します。

1
2
3
4
5
#!/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
    ・
    ・
    ・