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

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

ISUCON2の環境を構築する!

自家製 #isucon2 のつくりかた」を読みながら, Vagrantで建てたVMにISUCONの環境を作りました.

今回使用したOSは, Cent OSの6.4です.
日頃Ubuntuを使っているので戸惑った点が多かったのですが, @さんの助けもあり, なんとか完成することができた... はず.

というわけで以下, 作業メモです.

下準備

$ sudo yum install git
$ git clone https://github.com/tagomoris/isucon2.git

gitが入ってないなら導入してから, 各種ソースをcloneします.

MySQLの導入と起動

$ sudo yum install mysql mysql-server mysql-devel
$ sudo /etc/rc.d/init.d/mysqld start
$ sudo chkconfig mysqld on

MySQLをyumで入れて, 起動します.

MySQLの初期設定

$ mysql -u root < isucon2/webapp/config/database/isucon2.sql

MySQLの初期設定をします. isucon.sqlは, 冒頭4行のコメントアウトを削除しておく必要があります.

Perlの導入

どうせならPerl 5.16.3で動かしたいので, plenvを使って導入しました.

$ git clone https://github.com/tokuhirom/plenv.git ~/.plenv
$ git clone https://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/
$ echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(plenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
$ plenv install 5.16.3
$ plenv global 5.16.3
$ plenv rehash
$ plenv install-cpanm

モジュールの導入

$ cd isucon2/webapp/perl
$ cpanm Module::Install
$ cpanm -n --installdeps .

モジュールを導入します.
どうせISUCONのアプリしか動かさないVMなので, "-Lextlib"オプションを与えずにインストールします.

起動

$ plackup -s Starman -E production --preload-app app.psgi

ここまでうまく動けば, このコマンドでサービスが動き出すはずです.
うまく動かないのであれば, 必要なモジュールのインストール失敗しているとか, DBが立ち上がっていないとか, DBの初期設定が済んでいないとか, そういうのが原因になっていそうです.

あとは, ホスト側からVMにアクセスしてもアクセスできない場合, VMのiptablesが妨害(?)していたりするので, iptablesを殺してあげるといいかもしれません.

$ sudo /etc/rc.d/init.d/iptables stop
$ sudo chkconfig iptables off

ベンチマークの準備

http_loadの用意

$ cd
$ cd isucon2/tools/http_load_isucon2
$ make

http_loadをmakeします.

nodeの準備

$ cd
$ git clone https://github.com/creationix/nvm.git ~/.nvm
$ . ~/.nvm/nvm.sh
$ nvm install v0.8.12
$ nvm use v0.8.12
$ nvm alias default v0.8.12
$ cd isucon2/tools
$ npm install

nodeを準備します.
インストール後, ".bash_profile"あたりに,

if [ -f ~/.nvm/nvm.sh ]; then
    . ~/.nvm/nvm.sh
fi

などと書いておくと捗ります.

テスト

これで環境構築は完了です. あとは,

$ ./test.sh 127.0.0.1 5000

で, 簡単なベンチマークを走らせたり,

$ mysql -u root < sql/isumaster.sql
$ node manager.js
$ node agent.js

でベンチマークツールを動かしたりできます.
ベンチマークツールは, ブラウザを使って5001番にアクセスすると確認できます.

...あとはISUCON夏期講習に挑むのみ!
こういうチューニングの領域は弱いというか, むしろ今まで体験したことのない領域なので, 今からとても楽しみです.

追記: VMのスペックについて

はてブのコメントでmakee_wさんが仰っている通り, Vagrantで建てたVMのスペックが低いとベンチマークが完走しません.

自分の場合, Vagrantで建てたVMが1core, メモリ400MBというスペックになっていたので, ベンチマークは常にタイムアウトという状況でした.
そこでVirtualBoxのGUIメニューでVMのスペックを2core, メモリ3GBに変更してベンチマークを走らせると, とりあえずタイムアウトしないようになりました.

VM上に環境構築をしている方は, VMのスペックには十分お気をつけ下さい.