サバフェス時のベンチマークツールだったり、ログ確認だとかで使った小技をまとめます。
http_load ベンチマークツールの1つです。
最初はこれでGETのベンチマークを取ってました。
後述するab (apache bench)じゃなくてなぜこっちを使ったのか、ですが「先輩が研究室のサーバに入れてくれていた」からです。
abもapache入れた時点で入ってるってことを知ったのは、恥ずかしながら競技後半でした。
使い方は以下の感じ
[bash]
$ cat url_file
http://example.com
$ http_load -second 10 -rate 200 url_file
[/bash]
上のコマンドでは、毎秒200リクエストを10秒間送る、っていう意味です。
-parallelとか-fetchesとかいろいろ指定の方法はあるみたいです。
僕は、もっぱら上記な感じでベンチマークとってました。
http_loadを使っていて感じた点ですが、abの時と違ってリアルタイムにエラーログが出力されます。
byte count wrong
とか
Operation already processing #=>確かこんな感じなログ
みたいなのがレスポンス返ってくると同時に標準出力に出力されます。
ちなみに、byte count wrongってエラー出た時は、以下で対応してました。
[bash]
$ rm -rf /var/cache/nginx/cache/*
$ service nginx restart
[/bash]
http_loadの微妙な点は、POSTのベンチマークができなかった点です。
やり方分からないので、知ってる方が居たら教えて頂きたいです…。
結局、POSTのベンチマークはabでしました。
ab (apache bench) こちらではGETのテストはあまりしなかったような気がします。
使い方は以下の感じ
[bash]
# 同時接続100の状態で10秒間GETリクエストを送る
$ ab -c 100 -t 10 http://210.140.145.136/
# 同時接続100の状態で10秒間POSTリクエストを送る
$ ab -c 100 -t 10 -p post_data_file -T "application/x-www-form-urlencoded" http://example.
5日目 なんとなくLBが次はボトルネックになっているような気がしてきました。
そりゃNATしてんだからそうか、ってことでDSR構成頑張ってみよう、と再挑戦。
ここで「そういやiptablesで出来た気がする」ってようやく存在を思い出しました。
[bash]
# リアルサーバ側
$ iptables -t nat -A PREROUTING -d 10.2.1.185 -j REDIRECT
[/bash]
NAT構成時の設定は消してます。
そういえばunix socketが早いとか聞いたことが…。
php-fpmのlistenをunix socketに変更。
[bash]
$ vim /etc/php-fpm.d/www.conf
listen = /var/run/php-fpm/php-fpm.sock
[/bash]
nginxのfastcgi_passも書き換えます。
そしてここでPOSTが0件になることに気付きます。
キャッシュのせいでした。
ログのチェックとかしてみるとどうやら
/?p=5
とかにアクセスしてコメントの件数をチェックしている模様…。
nginxのHttpCoreModule
とか見て、$argsな設定を入れました。
「設定ファイルに変数ってアリなの…。」
って感じたのを覚えてます。
[bash]
$ vim /etc/nginx/conf.d/default.conf
# location / ディレクティブ内に以下追記
if ($args ~ p=5){
set $do_not_cache 1;
}
[/bash]
こんな感じです。最終的に $is_args != "" に変更しました。
あとkeepaliveの設定を入れてました。
この日はこれで終わり。
6日目 朝起きた時は1位でした。
結局数十分後に転落するんですけれど、嬉しかったような感じです。はい。
この日はMySQLの早さを上げるために、5.6.14の導入とか今更してました。
導入してたらphpとのバージョンがあわなくて〜とかってことで結局いろいろ変更することになりましたけど無事動きました。
サバフェスでやったことをまとめておきたいと思います。
時系列順でやったこと書いて、最後に使ったツールとか記述しておきます。
#=> と思ったんですけど、なんかびみょーに長かったので分けます。次の日記に。
初日 IDCFさんのIaaSから仮想マシンの立ち上げと、配布されたpdf通りにサーバを構築。
なので、Apache + MySQLのみ。
この日はこれで終わり。
2日目 ベンチマークが来るまで放置。
ベンチマーク来たのは確か19時くらい?
access_logとか見て「GETきてPOSTくるのね」ってところでこの日は終わり。
3日目 とりあえずapache辞めました。
nginx+php-fpm+MySQL
この時はphpアクセラレータとかやってません。
っていうか知りませんでした。
ロードバランサ(以下LB)っていう単語くらいはさすがに知ってたので、その辺やってみよう、ってことで設定開始。
ipvsadmをインストール。
[bash]
$ yum install ipvsadm
[/bash]
NIC2つ使うっていう記事が最初はよく目についたような…。
ということで、「サーバにNIC追加できないかな〜」とか思いsvfes運営に確認。
しかし追加はできないということでした。
なので、NIC1つでどうにかできないかな〜、ってとこでこの日は終わり。
4日目 LBのDSRやろう!
ってことで意気揚々とやっていたわけですが、宛先IPが違うパケットをどうしたらいいのか分からない!
ってことでぐぐってみると「ループバックアドレスに仮想IPとして宛先IPを追加する」みたいな記事が。
[bash]
# LB側
$ ipvsadm -A -t 10.2.1.185:80 -s rr
$ ipvsadm -a -t 10.2.1.185:80 -r 10.2.2.94:80 -g
$ service ipvsadm save
# リアルサーバ側
$ vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=10.2.1.185
NETMASK=255.255.255.255
ONBOOT=yes
$ vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
残りあと10時間切りました。
そして0時からは速報サイトが見れなくなるみたいで、時間切れな感じ。
テスト内容はある程度再現したので、一応簡易ベンチはできます。
順位は現在8位〜。
GETはまだ伸ばせそうな気がするけど、POSTどうやって伸ばすんだろ。
mysqlの方は、ローカルで1000件のデータをinsertするだけだったら、0.2秒くらいで終わるようになりました。
POSTの方をどうにかしたいですけど、残り10時間で解決策が出るんでしょうか?
今のところ解決策は思いつかないので、簡易ベンチしながら設定いじいじしてたらこんな時間でした。
寝るまで頑張ってみます。
寝て起きたら妖精さんが設定してくれてたりしたら嬉しいw
気がついたらこんな時間で7日目突入してた。
午前にenPiTミーティング、午後にDevOps勉強会と入っていたため、なかなか設定進みませんでした、って言い訳を先に…。
朝起きたら一瞬だけ1位でテンションあがって、そして30分後には3位になってて現実を知りました。
そろそろやることなくなってきた、というより分からなくなって来たんですが、もうちょっと頭ひねってしっかり結果を残したいところ。
あと22時間後からはベンチマークの結果が公開されなくなるので、それまでに成果を出したい!
しかしまず眠いので寝て、起きてから頑張りましょ。
悔いのないように明日精一杯インフラ構築します。
ちなみに、現在時点での最新のスコアが
GET: 約13万
POST: 約9000
となっていて、初期での
GET: 42
POST: 948
のころと比べてかなり性能はあがってます。
POSTが完全に足引っ張ってます。明日はその辺りをやってみよう。
折り返しも過ぎて後半に入ったところ。
今日でようやく構成については大体できたってところです。
5日目にしてようやく…。
そしてもう残り時間もわずかになってきたので、ここから佳境になってきますね。
そして「ようやく思っていた構成にできた〜」って思ったらPOSTが反映されない…。
なんで〜。状態…。
当たりはついてるので、次の目標はそれをクリアすることですね。
速報見てると今は9位らしい。
POSTがしっかり反映されれば…!
とか言ってないで、明日はちゃんと設定しましょ〜。
っと、明日はVagrantのお勉強会でした。
enPiTのミーティングも…。
う〜ん。とりあえず明日の目標は「POSTを反映させる」で。
DB周りもちゃんといじらなくては。
そこまでいけるかなー。
折り返しにもなった4日目。
昨日たてた目標である
・思っている通りの構成にする
・ボトルネックの解消
は結局というかやっぱりというか、構成を半分ほど作れて終わりましたとさ。
明日また頑張ろう。
サーバの性能は、初期状態の100倍くらいにはなったかなーと。
今速報サイトを見てる感じだと、15位…。
ある程度の順位までは僅差っぽいのでまだいけるかな〜。
明日から@svfesなアカウントがお休みということで、twitter上では結構質問が飛び交ってました。
・MySQLのエンジン部分は変えてもオッケー
・スコア集計方法に若干の修正
・NICの追加NG
・2つ以上のグローバルIP禁止
・開発版の使用はNG。mainlineの使用は可能
などなど。
これらには注意して今後進めないと、失格になる可能性もありますからね。
公式Twitterもこう言ってますし、今日は休んでまた明日ということで〜。
しかし、トップの
GET 40万
POST 260万
はすごい。
いったい何が…。
たいして何も進んでない1日でした。
まず、量子コンピュータな講演会。
量子力学って謎だな〜、とか思いつつ聞いてました。
気になってたところは聞けたので、まあなんとな〜く理解(?)
サバフェスについては、ちょっと構成考えて設定やらやってたらいろいろなところでハマってしまい、結局その構成にできず…。
そしてまだ解決してないというのも…。
全くインフラ構築は楽しいですね!
速報見てみると、上位陣はもうPOSTレスポンス数が100万とか?
う〜、どこまでいけるか分からないけど、できるだけ追いつきたい〜。
どこまでいけるか謎ですが、明日には考えてる構成にしたいですね。
そしてやっぱり、サーバ構築、ソウルジェム濁る〜。
サーバの台数が複数なために、スケールアウトを考えないといけないの大変…。
ボトルネックになってるところは絞れたような気もするので、明日の目標は構成作りとボトルネック解消までいけると嬉しいです。
そう上手くいくとは思えないので、覚悟してやらないと〜。
あ、そろそろリーガルハイ始まるので見てから寝ましょ。
今日は設定に関しては特に何もしてない感じの一日。
調査くらいしか…。
・夜まではベンチマークもされない
・初期状態のスコアしりたい
っていう点から設定はしませんでした。
初期状態のスコアとか計ってもあまり意味なさそうですけどね。
一応ベンチマークのログについては取ってました。
参加者の方のブログとか見ましたけど、今日はベンチマークについてのログ収集、って感じでしたね。
1件しか見てないですが…。
速報サイトとか見てますけど、トップはもうPOSTを40万件もさばいてるんですね。
ちなみに僕のチームの初スコアは
GET:42
POST:948
って感じでした。
文字通り桁が違う…。
今日はいろいろ調査とベンチマーク推測で終わっちゃったので、明日から設定頑張りましょー。
ベンチマークも再現できれば、気軽にテストできそうなのでその辺りもどうにかできないか調べてみようかな…。
いろいろこの先について考えながら、とりあえず寝て、明日は頑張りましょう。
って、明日は確か面白そうなセミナーというか講演会的なものがあるんだっけ。
明後日から頑張りましょう〜。
(でも結局気になって明日設定やっちゃうような…w)
ちなみにチーム名は「ぞっこん」です。
名前の理由は「チーム名決めるときに"お〜いお茶 ぞっこん"を飲んでたから」です。
サバフェスっていうサーバ構築のお祭り。
開催概要はここ
参加した経緯としては、「20万欲しい」っていう本音は置いとくとして、「普段のサーバ構築とか運用の力試し」って感じです。
でもよく考えたら単体で動くサーバ構築・運用はしたことあっても
・複数台によるサーバ運用
とかしたことないんですよね…
要するにスケールアウトは未経験です。
「応用編」
って感じします。
初日である今日の活動は、
・IaaSサービスへのアカウント登録
・仮想マシン作成
・DB(MySQL) + httpd(Apache) で wordpress の構築
・今後のおおまかな方針決め
って感じでした。
IaaSサービス登録 仮想マシン作成とかのwebコンソール、vSphereくらいしか触ったことなかったのですけど、いい感じですね。
これがIaasか。
スナップショット作成のあたりがちょっと分かりにくかったですけど…。
ファイアウォール/ポートフォワーディング/ロードバランサ
とか、かなり楽ちんに設定できるのは嬉しいです。
他の機能は、多分今後何度もお世話になるはずなのでその都度いろいろ使ってみたいですね。
構築してみた 仮想マシンの作成と実際のwordpress構築はだいたい1時間くらいかかりました。
一番最初の状態です。何もいじってない感じ。
配布された資料通りいかないあたり、サーバ構築、って感じですよね。
いや、chefやらpuppetやらがあるからそんなでもない?
まだ未経験なので、その辺に手も伸ばしたいですね。。。(やっぱ次のngt研勉強会はその辺りか?)
今後の流れ 今回は2人のチームで参加したので、今後の方針の大まかな流れを軽く話し合いました。
ベンチマークツールは公開されないらしいので、アクセスログやらから解析する感じになりそう。
明日からベンチマークみたいなので、それは待つしかないかな。
・ベンチマークの方法を予測
ってのが割と急務かも。
というのも、前回のチューニンガソン時のログに次回注意したいことまで書いてあったので、読み直しながら当時のことを思い出しつつ今回の教訓とします。
スケールアウトってどういう風にすると良いのか、全く分からないので、ベンチマーク始まるまではその辺りの調査になりそうですね。
目標 サバフェスの目標は、前にチューニンガソンで6位だったので、6位以内を目指したいです!
あわよくば20万欲しいです!就活の資金欲しいです!
と、まあそんな感じでゆるふわ〜に楽しく参加したいと思います。
前途多難ですが、頑張ります。
応援よろしくお願いします。
参加者のみなさん、よろしくお願いします。頑張りましょう。