GCEとJMeterでフルボッコ。（パクリ）

#負荷テスト
社内で『今度の仕組みは最強だぜ！某アイドルの初回限定盤のトランザクションでも余裕だぜ！』という自信満々のお声がありました。
と、いうことで負荷テストしてみます。

#お手軽JMeterクラスター 〜 フルボッコ編＠GCEでやってみる。
[『お手軽JMeterクラスター 〜 フルボッコ編』](http://dev.classmethod.jp/cloud/aws/aws-cfn-advent-calendar-2013-fullbok/)というAWSでやっている記事を見つけた。確かに便利そうだなぁ。
でも、うちはAWS使ってないので、GCEでやってやる！と思ったしだいです。
よって、パクリです！

##jmeter-client構築
先ほどの記事にも書かれていますが、やっぱりGUIでやりたいなぁと思います。
でも、GCEのVMインスタンスのイメージは必要最小限のものしか入っていません。
ディスクも当初は10GBしか割り当てられていないということでこちょこちょやってみました。

###まずはインスタンスの立ち上げ。
[『Google Compute Engineでインスタンス作成時のrootディスクサイズ変更と公開鍵の指定』](http://inaba-serverdesign.jp/blog/20140624/gce_disk_size_authorized_ssh_keys.html)こちらを参考にディスクのサイズ変更と立ち上げまでを行いました。
（※CentOS 7はresize2fsうまくいかなかったのと、コマンドがどえりゃー違うので6.5でやりました）

**※ここでディスクのsnapshotとっておきましょう！サーバの構築が楽になります**
snapshotの取り方は計算処理⇒ComputeEngine⇒スナップショットで新しいスナップショットを押します。
![jmeter_007.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/1bc58f16-5d51-5e6a-11f8-531771334b7f.jpeg)
稼働中でも瞬殺で取れます！

###yumで色々入れる。
デスクトップ環境が欲しかったのでgnome入れる。
`yum -y groupinstall "X Window System"`
`yum -y groupinstall "Desktop"` 
`yum -y groupinstall "General Purpose Desktop"`

tigervnc-serverも入れる。
`yum -y install vnc-server`

javaも入れる。
`yum install java-1.7.0-openjdk-devel`

ついでにjmeterもとってくる。
`wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//jmeter/binaries/apache-jmeter-2.11.tgz`

##ポート開ける
GCEの便利なところ。ポート開けるの楽ちん。
計算処理⇒ComputeEngine⇒ネットワークでこんな画面。
![jmeter_001.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/653e4cad-fe52-49d8-9e28-d9afe5bd7f6d.jpeg)

ここですべてのネットワークのdefaultを押下します。
![jmeter_002.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/664b0023-a0d8-02aa-7e09-86bb86f276a1.jpeg)

で、ファイアウォールルールの新規作成を押下。
![jmeter_003.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/6be04839-4b3b-5eae-64b8-7475234e4c4d.jpeg)

名前はなんでもいいとして、ソースIPとポートは設定してあげる。
ソースIPはrangeで指定できるが、自分のIPを/32で指定したり。
ポートもrangeで指定できるので、VNCを使うとしてtcp:5900-5905とか？
で作成って押すとさらりとできる。自分が持っている全部のインスタンスに適用されるようです。
お好みでどーぞ。

###vncserver起動
セットアップも出来たのでvncserverを起動してみる。
`vncserver :1`
じゃ、接続してみましょう。
![jmeter_006.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/f1df916a-7f28-71d1-d8c3-1b96aa11b88c.jpeg)
はい、大丈夫そうですね。jmeterも元気に動いています。

##jmeter-server構築
jmeterのサーバ側を構築してみましょう。
クライアントの構築と一緒ですが、ディスクの指定の際にとったsnapshot使うと楽ちん。
![jmeter_008.jpg](https://qiita-image-store.s3.amazonaws.com/0/49108/070f8821-7293-d9d7-0d9a-60be57e9d250.jpeg)

###yumで色々入れる。
まぁ、負荷分散兵隊なのでjavaとjmeterぐらいで十分ですね。
`yum install java-1.7.0-openjdk-devel`
`wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//jmeter/binaries/apache-jmeter-2.11.tgz`

###サーバをちょこちょこ。
起動時にjmeter-serverが動くようにしておきましょう。
`vi /etc/rc.local`
で以下の行を追加。
`/home/ec2-user/apache-jmeter-2.9/bin/jmeter-server &`
これでOS起動時に勝手にjmeter-serverが上がってくれます。
**※ここでもsnapshotを取っちゃいましょう！こいつが量産型兵隊のもとになります。**
準備完了！

###兵隊量産開始！
と、いうことでサーバのsnapshotを使ってガンガン兵隊を量産します。
上がったら勝手にjmeter-serverが起動してくれています。好きなだけ構築すれば良いです。
お金かかるけどね。

##jmeter-client設定
兵隊量産が完了したら、そいつらのIPを設定してやります。
ここだけはブラウザのIPをコピペするの面倒なのでgoogle cloud sdkで。
`gcutil listinstances`
ここで出たnetwork-ipの値をjmeter.propertiesに入れてやる。
これでjmeterを起動して設定したIPから一斉に負荷をかけることができます。

#まとめ
最初ちょこちょこやることが多いが、オンプレで準備することに比べりゃ格段に楽です。
世の中便利になったなぁ。
あと、jmeterって終わるまでログ出てくれないのかなぁ？リアルタイムにログ出してくれればfluent-dでbigqueryにぶち込んでリアルタイムに状況を可視化したかったり。
まぁ、jmeterでも見れるんですけど。やってみたいじゃないですか？そういうの。

ちなみにディスクI/Oをもっとプリーズな人はSSDの選択肢もあります。これめっちゃ速いです！Oracleを興味本位で入れたことあるんですが、普通に使えるレベルです。
しかも、snapshotやcloneを作るときにも選択できる。便利！
I/Oのせいで性能が出ないなぁと思ったときには、そのままcloneとかsnapshot使うことでディスクの性能だけあがります。くらうどってすげぇなぁ。