Simple, Slowly

ブログを引っ越ししました。http://48.jp

AWSへ移行しました

ここ最近、AWSにサーバーを移転しました。
構成としては、webサーバー4台とDBサーバー1台です。
ELBでそれぞれのwebサーバーにリクエストを振り分けるようにしています。
月間300万PVのサイトでの運用をしていますが、安定してトラフィックをさばけています。


▼AWSに移転してよかったこと

トラフィックの増加に強い
管理画面から簡単にサーバーを増やすことができます。
トラフィックの増加にも容易に対処できるようになりました。


けっこう便利なCloudWatch
CloudWatchという監視ツールで負荷状態をグラフで確認できます。


豊富な機能
Read Replica、ElastiCacheなどパフォーマンスに関しての機能が充実しています。


▼問題になった部分

sennaなどのDBのプラグインが使えない
RDSにはプラグインが使えません。
全文検索の機能をプラグインを使わずに作り直す必要がありました。


now関数を使うとアメリカ時間で登録されてしまう
アプリ側で時間を取得するように変更しました。


セッション問題
webサーバー1にセッションを保存した場合、次のリクエストがwebサーバー2にいった場合、セッションが保持されません。
RDSでセッション情報を管理するようにしました。


ダイジェスト認証をかけている画面でInternal Server Errorが発生する
こちらもセッション問題と同様です。
認証が必要なURIにはELBを経由しないようにしました。


IPアドレスの内容が変わる
今までは$_SERVER['REMOTE_ADDR']からIPアドレスを取得していましたが、ELBを経由するとIPアドレスが正しく取得できていない現象が発生しました。
ELB経由の場合は、$_SERVER['HTTP_X_FORWARDED_FOR']よりクライアントのIPアドレスを取得できます。


結果的には移行してよかったと思います。
AWSについてはまだまだ勉強中ですが、トラフィックへの対応や対障害性についての有効性を感じています。
今後はReadReplicaやElastiCacheなどパフォーマンス向上の機能を取り入れていきたいと思います。