mod_clusterを使ってapache2.4とwildfly10でクラスタ構築する(検証編)

こんにちは、takayukiです。
休日は自宅の仮想サーバを使ってスキルアップに励んでいます。 最近のマイブームは構成管理ツールAnsibleと PHPでのプログラミングの習得です。インフラの上に載せるものを作りたいです。
今回は、前回mod_clusterを使ってapache2.4とwildfly10でクラスタ構築した環境を使用して動作検証をしてみました。


検証編

検証の目的


mod_clusterを使ってapache2.4とwildfly10でクラスタ構築したものが意図した通りに動作することを確認します。

確認内容としては、
1.フェールオーバー時にセッションが維持されるかどうか。
2.負荷を掛けた時にきちんと条件通りに負荷分散されるかどうか。
が挙げられます。

構成


フロントのapacheで受けたトラフィックをバックのwildflyの負荷に応じて負荷分散させ、
片系が停止した際にはセッション情報が引き継がれるようにします。
apacheが単一障害点になるので実際の構築ではapacheも2重化する必要があるかと思います。

1.障害時の動作検証(セッションレプリケーション)

1-1 障害発生前の状態確認(その1)


ブラウザでテスト用アプリにアクセスします。
http://192.168.0.44:6666/TestTomcat/index.jsp


ログインします。
ID:test@server-tech.xyz
password:login


ログインに成功するとIDとパスワードが表示されます。


1-2 障害発生前の状態確認(その2)


ブラウザでmod_cluster-managerのステータス確認をします。
http://192.168.0.44:6666/mod_cluster-manager

wildfly01とwildfly02の2ノードが表示されている
ことを確認します。

1-3 障害発生前の状態確認(その3)


wildfly01とwildfly02の下記ログを確認し、どちら側にアクセスしているかを確認します。
/opt/wildfly-10.1.0.Final/standalone/log/access_log.log

[root@wildfly01 log]# tail -f access_log.log
192.168.0.44 - - [22/Jul/2017:07:46:54 +0900] "GET /TestTomcat/index.jsp HTTP/1.1" 200 508
192.168.0.44 - - [22/Jul/2017:07:47:36 +0900] "GET /TestTomcat/login HTTP/1.1" 200 621
192.168.0.44 - - [22/Jul/2017:07:47:45 +0900] "POST /TestTomcat/login HTTP/1.1" 302 -
192.168.0.44 - - [22/Jul/2017:07:47:45 +0900] "GET /TestTomcat/login HTTP/1.1" 200 621
192.168.0.44 - - [22/Jul/2017:07:47:57 +0900] "POST /TestTomcat/login HTTP/1.1" 302 -
192.168.0.44 - - [22/Jul/2017:07:47:57 +0900] "GET /TestTomcat/ HTTP/1.1" 200 533
192.168.0.44 - - [22/Jul/2017:07:56:12 +0900] "GET /TestTomcat/ HTTP/1.1" 200 533
このケースではapache(192.168.0.44)からwildfly01 側にアクセスされている事がわかります。

1-4 障害を発生させる


アクセスしている側(このケースではwildfly01)のwildflyサービスを停止します。
widlfly01にて
# systemctl stop wildfly

1-5 障害発生後の状態確認(その1)


ブラウザでmod_cluster-managerのステータス確認を行います。
http://192.168.0.44:6666/mod_cluster-manager

サービスdownさせたwildfly01が消えて
Wildfly02だけが表示されることを
確認します。

1-6 障害発生後の状態確認(その2)


ブラウザで先ほどのログインした状態からF5キーを押してリロードします。
IDとパスワードが表示されたままでログイン画面に戻されない事を確認します。
(セッションの維持)

1-7 障害発生後の確認(その3)

起動している側のノード(このケースだとwildfly02)の
下記ログを確認し、アクセス先が移っている事を確認します。
/opt/wildfly-10.1.0.Final/standalone/log/access_log.log
[root@wildfly02 log]# tail -f access_log.log
192.168.0.44 - - [22/Jul/2017:08:05:05 +0900] "GET /TestTomcat/ HTTP/1.1" 200 533

このケースではapache(192.168.0.44)からwildfly02 側にアクセスされている事がわかります。
以上で障害発生時にセッションレプリケーションが機能していることが確認できました。

2.負荷試験

2-1 事前準備(パフォーマンスログ設定)

2-1-1 事前準備(OSパフォーマンスログ設定–Disk-IO その1)

Linux サーバーでは
iostat でディスクIO値を取ります。
cronでは1分間隔でしか実行できませんがcrontabにこのように記述すれば1秒間隔でiostatの
ログを取得することが出来ます。
# vi /etc/crontab
10 12 * * * root /usr/bin/iostat -xt 1 86400 > /var/log/iostat/iostat_`date +¥%y¥%m¥%d`.txt
毎日10:12 に1秒間隔で86400回(1日)実行するという意味になります。

2-1-2 事前準備(OSパフォーマンスログ設定–Disk-IO その2)

これが1秒間隔で取得したiostatのログです。
avgqu-szの値が待ちI/Oキューの数です。
Linux 2.6.18-371.el5 (centos510-db01) 01/23/14
Time: 12:10:01
avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 0.08 0.02 0.00 99.40
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.09 31.07 0.31 16.15 37.95 378.76 25.30 0.07 3.99 0.14 0.22
sda1 0.09 31.07 0.31 16.15 37.95 378.76 25.30 0.07 3.99 0.14 0.22
sda2 0.00 0.00 0.00 0.00 0.00 0.00 65.09 0.00 0.55 0.55 0.00

これらをawk やgrep などで集計していきます。

2-1-3 事前準備(OSパフォーマンスログ設定- CPU,Memory その1)

CPU、メモリはsarを使用してます。
cronでは1分間隔でしか実行できませんがcronにこのように記述すれば1秒間隔でsarのログを
取得することが出来ます。
vi /etc/cron.d/sysstat
* * * * * root /usr/lib64/sa/sa1 1 60

↑1秒間隔で60回実行する設定にします。

2-1-4 事前準備(OSパフォーマンスログ設定- CPU,Memory その2)

以下が1秒間隔で取られたsar -u (CPU使用率)のログになります。
1番左の数値がCPU使用率の値となります。
01:48:40 PM CPU %user %nice %system %iowait %steal %idle
01:48:41 PM all 0.00 0.00 0.00 0.00 0.00 100.00
01:48:42 PM all 0.00 0.00 0.00 0.00 0.00 100.00
01:48:43 PM all 0.00 0.00 0.00 0.12 0.00 99.88
時刻とCPU使用率の抽出
sar -u | grep PM | grep 1: | awk '{print $1","$4}' >cpu.csv

↑PM 1:00台のログから1列目(Time)と4列目(CPU使用率)をCSV形式で出力するという意味になります。

2-2 事前準備(Jmeter)

2-2-1 Jmeterのインストールと起動

クライアントPCへJmeterのインストール
Jmeterのサイトでapache-jmeter-3.2.zipをダウンロードします。
適当な場所に展開します。
これでインストールは完了です。
起動方法
apache-jmeter-3.2¥bin¥jmeter.bat をダブルクリックでJmeterを起動します。

2-2-2 Jmeterの設定(その1)

テスト計画>追加>Thread(Users)>スレッドグループ
名前をTestTomcatに変更
TestTomcatを選択
追加>サンプラー>HTTPリクエスト
以下のように設定します。
プロトコル:HTTP
サーバ名またはIP:192.168.0.44
ポート番号:6666
メソッド:GET
パス:/TestTomcat/index.jsp


2-2-3 Jmeterの設定(その2)

追加>リスナー>結果を表で表示
追加>リスナー>統計レポート
下図のように負荷条件を設定
同時30アクセスで20秒間に20回ループ(600アクセス/20秒)になります。

2-3 負荷試験

緑色のスタートボタンを押して負荷試験を実施します。
統計レポートを見るとスループットが30PV/secと、負荷条件設定通りの
結果が得られていることが確認できます。

2-4 負荷試験の結果確認

2-4-1 負荷試験の開始/終了時刻の記録
Jmeterの結果を表で表示から負荷試験の開始/終了時刻を記録します。
この例ですと、開始8:31:43 終了8:32:01 とRamp-upで設定した20秒に近い数字になっていることが
確認できます。

2-4-2 アクセス数の集計

2台のwildflyのアクセスログを集計します。
/opt/wildfly-10.1.0.Final/standalone/log/access_log.log
# cat access_log.log | awk '{print $4}' | cut -b 14-21 | sort | uniq –c

1秒毎のアクセス数が出力されます。
19 08:31:45
20 08:31:46
10 08:31:47
19 08:31:48
左側の数字がアクセス数で右側が時刻になります。

2-4-3 CPU使用率の確認

時刻とCPU使用率の抽出
sar -u | grep AM | grep 8: | awk '{print $1","$4}' >cpu.csv

↑AM 8:00台のログから1列目(Time)と4列目(CPU使用率)をCSV形式で出力するという意味に
なります。

2-4-4 アクセス数とCPU使用率のグラフ化

集計したアクセス数とCPU使用率の関係を見る為にグラフ化します。
(ディスクI/Oについては殆ど無い状態でしたので割愛します。)



Time wildfly01-CPU wildfly02-CPU wildfly01-access数 wildfly02-access数
8:31:42 0.5 0 0 0
8:31:43 0 2.04 0 0
8:31:44 16.23 4.04 0 0
8:31:45 53.85 4.04 19 21
8:31:46 16.06 25.77 20 20
8:31:47 7.11 14.58 10 10
8:31:48 3.52 5.1 19 21
8:31:49 5.64 14 10 10
8:31:50 7.04 6.12 19 21
8:31:51 10.2 31.25 10 10
8:31:52 2.55 14.29 20 20
8:31:53 7.14 18.56 0 20
8:31:54 1.01 14.43 4 36
8:31:55 4.08 9.9 20 0
8:31:56 5.64 6.06 40 0
8:31:57 5.13 13.27 18 2
8:31:58 0.51 7.14 0 40
8:31:59 2.53 16.33 0 20
8:32:00 5.05 2.06 38 2
8:32:01 4.06 10 10 10
8:32:02 1.52 2.06 19 21
8:32:03 1.02 12.24 0 20
8:32:04 1.51 9.28 0 20




負荷状況の応じてwildfly01、wildfly02でほぼ均等にアクセスが振り分けられていることが確認できます。
以上で検証は終わりです。






コメント