みなさま、はじめまして。
ニフティ入社1年目の岡田です。
ご存知の方も多いと思いますが、ニフティクラウドではL4ロードバランサーの他に、L7ロードバランサーをご用意しております。
ということで、今回はニフティクラウドでL7ロードバランサー(Stingray Traffic Manager L7LB)を用いた構成を組み、ベンチマークを行いました!
ちなみに、Stingray Traffic Manager L7LB(以下、Stingray)については図研ネットウエイブ株式会社様のページに記載しておりますのでご覧ください。
ベンチマーク概要
ベンチマーク条件は後述しますが、ベンチマークの概要は下図の通りです。
Stingray配下にWebサーバーを複数台配置し、ページサイズの異なる7種類のHTMLファイル(128B, 2KB, 8KB, 32KB, 64KB, 28KB, 256KB, 512KB)を用意しました。負荷発生サーバーとStingray間の通信はHTTPSで行っています。
また、結果は負荷発生サーバーからリクエストを送り、レスポンスを受け取るまでを1トランザクションとし、『Transaction per sec: 1秒当たりに処理されたトランザクション数』(以下、TPS)を性能指数として、Stingrayのサーバースペック別に比較しております。
ベンチマーク結果
Webサーバー2台構成
それでは早速結果を見ていきましょう。こちらはStingray配下のWebサーバーをwlarge64で2台用意して計測しました。どうやらStingrayはサーバースペックによってパフォーマンスに違いが出るようですね。
Webサーバー4台構成
続いてStingray配下のWebサーバーをmediumで4台用意して計測した結果を見ていきましょう。TPSはページサイズによりますが、微増する結果となりました。ただし、64KB以上においては2台構成時と同等の値に収束する結果となっています。
分析
結果をご覧になりいかがでしょうか?注目していただきたいのは、最も利用されるページサイズである64KB~512KB時の結果です。64KBの時点で流量は1Gbpsを超え、512KBの時には2.5Gbpsを確認しました。Stingrayはネットワークがボトルネックになり十分な性能を発揮できない事がありますが、ニフティクラウドは強固なネットワーク基盤を準備しているのでそのような心配はありません。
とはいえ、サーバースペックによって性能差が出た要因はどこにあったのでしょう?
ということで監視サーバの出番ですね!ちなみに、監視サーバはmuninを利用しました。
メモリ
それではまずはStingrayサーバのメモリ使用量を見てみましょう。
余裕ありですね!参考までにlarge32での結果も見てみましょう。
どうやらStingrayはメモリの利用量は低く、余裕を持っても2GBあれば十分ということがわかります。
CPU
では次にCPUの利用率を確認します。
まずはsmall8から見ていきましょう。
ものすごく負荷が高いですね。CPUの利用率がほぼ100%で張り付いています。
どうやらCPUが怪しいみたいですね。確認のためにlarge32の時の状況も見てみましょう。
small8との差は歴然ですね。やはりHTTPS通信を利用していることで、パフォーマンスがCPUに依存する結果となったようです。
以上のことからStingrayの導入を考える場合、サーバーはmedium以上を指標として、性能を求める場合はlarge以上を選ぶのが宜しいでしょう。また、メモリ利用の状況を考慮するとmedium, large, xlarge16の中から選定できそうです。
エラー
Webサーバーの台数を多くしたところTPSは微増でした。しかし、2台構成時ではリクエストが集中したときにWebサーバーで待ちが発生し、タイムアウトとなる確率が高まることを確認しています。
参考までに2台構成時に行ったテストで発生した最大エラー値をご覧ください。
リクエスト数:700000 エラー率:1.27%
値としては大きくありませんが、エラーの発生は信頼性の低下につながります。しかし、4台構成にすることでエラー率は全テストケースにおいて 0% に抑えることができました。
つまりはL7ロードバランサーにおいても配下に並べるサーバーは多い方が信頼性の向上につながるということです。利用する際は高スペックサーバーを少数台設置するより、スペックを落として複数台並べる設計がオススメです。
ベンチマーク条件
今回のベンチマーク条件は以下の通りです。
ツール
ベンチマークツール
テストケース
スレッド数:700
Ramp-Up期間(秒):10
ループ回数:1000
各サーバー情報
負荷発生サーバー
スペック : xlarge36
イメージ : Microsoft Windows Server 2008 R2
Stingrayサーバー
スペック : 可変(small8,medium16,large32)
イメージ : StingrayTM92
Webサーバー
スペック : wlarge64(2台構成時)、medium(4台構成時)
イメージ : CentOS 6.3 64bit Plain
※Webサーバーは1台準備して設定が終了した後に『サーバーコピー』を利用すると便利です!
監視サーバー
スペック : small2
イメージ : CentOS 6.3 64bit Plain
ネットワーク
負荷サーバー~Stingray間
443番ポートかつプライベートIPで接続
Stingray~Webサーバー間
80番ポート接続かつプライベートIPで接続
監視サーバー~各サーバー
4949番ポートかつプライベートIPで接続
Stingray
ライセンス
Stingray Traffic Manager VH4000
チューニング
以下がアプリケーション側での設定です。設定値はRiverbed社のTuning Stingray Traffic Manager for best performanceを参考にしました。
・Global Settings
recent_conns : 0
Verbose logging : すべて【NO】に設定
・VirtualServers
ssl_decrypt → Yes
keepalive → No
add_cluster_ip → No
Memory Limits → 204800
・Pools
keepalive → No
LoadBalancing → Round Robin
Monitor → PING
max_connect_time : 8 sec
Basic Settings : delay 6 sec
timeout 12 sec
failures 4
Stingrayサーバーはカーネルチューニングを行っています。チューニング値に関してはRiverbed社のTuning the Linux operating system for Stingray Traffic Managerを参考に設定しました。
# cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
# cat /proc/sys/net/ipv4/tcp_fin_timeout
30
# cat /proc/sys/net/ipv4/tcp_syncookies
1
# cat /proc/sys/net/core/somaxconn
1024
# cat /proc/sys/net/ipv4/tcp_max_tw_buckets
7200000
# cat /proc/sys/net/ipv4/tcp_slow_start_after_idle
0
# cat /proc/sys/net/ipv4/tcp_timestamps
0
# cat /proc/sys/net/ipv4/tcp_window_scaling
0
Webサーバー
ソフトウエア
Apache 2.2.15
チューニング
【2台構成時】
# cat /etc/httpd/conf/httpd.conf | grep '' -A 7
StartServers 8
MinSpareServers 5
MaxSpareServers 30
ServerLimit 3840
MaxClients 3840
MaxRequestsPerChild 2000
【4台構成時】
# cat /etc/httpd/conf/httpd.conf | grep '' -A 7
StartServers 8
MinSpareServers 5
MaxSpareServers 30
ServerLimit 1024
MaxClients 1024
MaxRequestsPerChild 2000
ベンチマーク方法と結果の見方
ベンチマーク方法と実行結果の見方について以下に記載します。
Stingrayでは設定項目が多く、自由度も高いのでいろいろ試すと面白いと思うので是非お試しください。
※以下のインストール手順や実行方法は今回のベンチマーク環境下によるものです。
※ベンチマークはサーバーを一時的に高負荷状態にさせますので、注意して実行してください。
Javaのインストールと設定
今回利用するJMeterはJavaで動作するアプリケーションですので負荷発生サーバーにJavaをインストールする必要があります。
1.負荷発生サーバーにJavaを下記のサイトからダウンロードします。
http://java.com/ja/
2.ダウンロードしたファイルを実行し、指示に従って進めればインストール終了です。
JMeterのインストール
1.負荷発生サーバーにJMeterを下記のサイトからダウンロードします。 https://jmeter.apache.org/
2.ダウンロードしてきたファイルを解凍することでインストールの完了です。
テスト計画の作成
1.JMeterを解凍したディレクトリのbin配下にあるjmeter.batを実行します。
2.テスト計画にスレッドグループを作成し、スレッドプロパティにテストケースを入力します。
3.HTTPリクエストを作成し、Stingrayサーバーを対象に指定し、HTTPS通信を利用するように設定します。
4.テスト計画の作成が完了したら保存します。
JMeterの実行
1.コマンドプロンプトを開き以下のコマンドを実行します。
# java -jar \binApacheJMeter.jar -n -t <テスト計画パス> -l <ログ保存先パス>
※テストケースによってはJavaのヒープサイズを変更する必要があります。
実行結果の見方
1.JMeterを解凍したディレクトリのbin配下にあるjmeter.batを実行します。
3.統計レポートの『すべてのデータをファイルに出力』でJMeterを実行したときに保存したログデータを指定することで各結果の出力が可能です。なお、今回のご紹介したTPSは、表の「Throughput」の値と対応しています。
終わりに
今回はニフティクラウドにおけるStingrayの性能特性を分析しました。Stingrayの性能の良さもさることながら、強固なネットワーク基盤を持ったニフティクラウドとの相性の良さもご確認いただけたでしょうか。
Stingrayは性能以外にもL7ロードバランサーならではの魅力と利点があります。私は初めてStingrayに触れましたが、管理しやすいUIと多彩な機能が用意されており、細かなカスタマイズが可能です。それによってメンテナンス性・セキュリティ性・信頼性の向上が見込めます。機会があればそちらもご紹介したいと思います。
もしロードバランサーの導入を検討していましたら、ニフティクラウドのL4ロードバランサーだけでなくL7ロードバランサー『Stingray』も一度お考え頂ければと思います!!