日曜研究室 〜技術的な日常〜

技術的な観点から日常を綴ります

   9 月 06

Pound + Apache + lighttpdを1台で動かしてみた

あれから負荷分散の方法について色々調べていましたら、「lighttpdはapacheより速くて負荷が低い」という情報が目に入りました。まぁ、そんなことは以前から知ってはいたのですが、lighttpdの利用歴はiPod touchに試しにインストールしてみたという程度でした。それでじゃあ実際にどのくらい速くて負荷が低いのか利用者の声を調べてみると、総合して、速さにして同等〜約2倍、メモリ使用量にして3分の1〜10分の1程度という印象を受けました。 これは凄い!lighttpd使ったら複数台構成にするの先延ばしにできるんじゃね?ということで、複数台構成はひとまず置いておいてlighttpdを使うことにしました。 全てlighttpdにしてしまうのはリスクがあるので、静的ファイルのみlighttpdでホストし、動的ページは今まで通りapacheでホストすることにしました。 もちろんlighttpdとapacheでポート番号を被らせる訳にはいかないので、Poundというリバースプロキシ専用のソフトを入れ、それに80番ポートを割り当て、apacheに81番、lighttpdに82番を割り当て、全て1台のサーバーの中で動かすことにしました。 apacheかlighttpdどちらかにリバースプロキシを兼任させることも考えたのですが、役割が非対称になることに嫌な予感がしたことと、Poundは設定が簡単だということ、また複数台構成にも対応させやすそうなことを考えてPoundを選びました。 今回やったことは負荷分散でもなんでもなく、ただの負荷の削減です。 以下、今回の設定を行うにあたってコマンドのログから主要なものを抜粋。 1.lighttpdのインストール、設定、起動 # yum install lighttpd# vi /etc/lighttpd/lighttpd.conf※ドキュメントルートとログファイルのパスとポート番号のみ変更。あとはデフォルトのまま。 # vi /etc/logrotate.d/lighttpd※ローテートを日単位へ、ログファイルのパスをあわせる # chkconfig on lighttpd# /etc/rc.d/init.d/lighttpd start 2.Poundのインストール、設定 # wget http://www.apsis.ch/pound/Pound-2.4.3.tgz# tar zxvf Pound-2.4.3.tgz# ./configure# make# make install ※設定ファイルのフォーマットがバージョン1系列と2系列で違うので注意。古い設定方法の情報を真似ても全く動作しません。設定方法、ログファイルのパスの変更方法は以下を参考。手軽なロードバランサ Pound を導入してみました/楽 # vi /usr/local/etc/pound.cfg※デーモンモードに設定、ログのファシリティを設定、ローカルにあるwebサーバーのアドレスには127.0.0.1を指定。 # vi /etc/syslog.conf※ログファイルのパスを変更、lighttpd,apacheでログを記録してるのでPoundはエラーのみ記録 # /etc/init.d/syslog restart ※Poundのlogrotateは未設定。1日後にチェックしてその容量でローテートのスパンを決定する。 3.mod_rpafのインストール、設定 mod_rpafのインストール、設定については以下を参考。CentOS5.1 に mod_rpaf をインストールする – Nire.Com [...]

Read the rest of this entry »

   9 月 05

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 [...]

Read the rest of this entry »