技術

Amazon EBS使ってみました

今回EBSを使うにあたって以下のページが物凄く参考になりました。
最近発表されたストレージサービスAmazon EBS(Elastic Block Store)をEC2から利用する – RX-7乗りの適当な日々

いまEC2でsmallなインスタンスを1台、Apache Webサーバーとして常時稼動させてるのですが、
アクセス数が非常に多く、夜になるとレスポンスが非常に遅くなります。
(ちなみに儲けはあまりありません。EC2+S3の支払いもありますし。)
きちんと調査してないので、ボトルネックがネットワークなのかCPUなのかディスクIOなのか良く分かってないですがw、
とりあえずは、静的ファイルをEBSで作った別ディスクに置くことで、DBアクセスのディスクIOとの負荷分散をすることにしました。

参考にしたページに方法は殆ど書いてあるので、ここで改めて書くことはしませんが、
今回Amazon EC2 + EBSのElasticぶりを激しく実感しました。すばらしい!

EBSで10GBの仮想ディスクを作成し、稼働中のインスタンスにアタッチし、
稼働中のインスタンスで仮想ディスクをext3でフォーマット&マウント、
web用の静的ファイル群をディレクトリごと仮想ディスクにコピー、
元ディレクトリをリネームし、仮想ディスクのディレクトリへシンボリックリンクをはる。

ということが、ピーク稼働中のEC2インスタンスを止める事無く(もっと言うとApacheも止める事なく)
出来たというのがすごく新鮮でした。

ただ、ボトルネックの解消には至りませんでした。
まぁ当然ですね。原因を調べてないのですからw
パフォーマンスチューニングは闇雲にやらざるべしという誰かの格言は大事です。

ということで、とりあえず簡単にtopコマンドなどで調べてみると、
なんと1.7GBのメモリを使い尽くしてましたw
そりゃ遅くなるってもんですw
ということはswapが発生してるはずなので、IO負荷を分散させたのは間違いではないですが、
swapが激しく発生するような状態になってること自体が論外です。

httpdプロセスはひとつ12MBほど消費してますが、それがたくさん立ち上がってメモリを使い切っています。
Apacheの設定を色々変えてみましたが、逆に遅くなるばかりで、
アプリケーションのチューニングも以前にすでに行ってるので、
いまのアクセス数からするとメモリの量が絶対的に足りてないのかもしれません。
ちなみにCPU利用率はピークで20%前後です。

この問題を解消するには複数台構成にするかLargeインスタンスにするか、どっちかってことになると思います。
High-CPU Mediumインスタンスってのもありますが、メモリ量が据え置きなので今回の問題の解決にはならないでしょう。

Largeインスタンスはメモリが7.5GBで移行するためにアプリケーションに
殆ど手を加える必要もないですが、価格が今の4倍ですorz

複数台構成は負荷に応じてじわじわと台数と費用を増やしては行けますが、
アプリケーションに変更が必要になり管理も難しくなるでしょう。
というか複数台構成は運用はしたことはありますが、構築はやったことがなくノウハウが殆どありません。

しかしどちらかと言ったらコスト第一ということで複数台構成を選びます。
勉強にもなりますし。

手軽なところでDNSラウンドロビンか、リバースプロキシか。
複数台での負荷分散の手法にも大から小まで色々あるみたいなので、これから一通り調べてみたいと思います。

というかFlickrの中の人が書いたWebアプリケーションのスケールアウト方法の本読めよ>自分
せっかく買ったんだから。

これは関係のない話ですが、
ViewSourceWithというFirefox拡張機能を使って秀丸でソースを開くようにしたかったのですが、
そのViewSourceWithを有効にすると
Tab mix plusでの検索バーの入力で新規タブを開くという設定が無視されてしまうため、
(表示中のタブの内容が検索結果で上書きされて鬱陶しい)
泣く泣くViewSourceWithは無効にしました。

コメントを残す

メールアドレスが公開されることはありません。



※画像をクリックして別の画像を表示

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください