読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

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 機能については トランザクションを使い、エラー時は「全て無かったこと」にする を参照してください)。

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 の動作を試せるはずです。

f:id:sig9:20170320155912p:plain

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 が応答しており、「負荷分散されている」ことが分かります。

# ./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
    ・
    ・
    ・