ちょっとサーバ周りで迷ったのでお勉強。
- [24時間365日] サーバ/インフラを支える技術 ‾スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)
- 安井 真伸 横川 和哉 ひろせ まさあき 伊藤 直也 田中 慎司 勝見 祐己
- 技術評論社 2008-08-07
by G-Tools , 2011/05/29
この本を元に、リバースプロキシ導入したお陰で、相当サーバは安定しました。
でも、まだまだ足りない…。次に使えそうなネタないかなぁ…。
今現在、以下の3パターンでロードアベレージなどを調べています。
- Apache+mod_phpのみ
- 静的コンテンツはwokerのApache,動的コンテンツはApache+mod_php
- 静的コンテンツはwokerのApache+mod_cache,動的コンテンツはApache+mod_php
仮想で2CPUで検証中。
最初は、どれも大して差がありません。
むしろ、分けている方がロードアベレージ高いです。
ただ、負荷が上がってくるとだんだんmod_php+Apacheが悲鳴をあげてきます。
ある時を境に、1のmod_php+Apacheが突然落ちます。(ログに出ないけどtopから消えてJMeterが止まる)
同じ負荷でも、2はちゃんとアクセスをさばいています。(若干重くなってはいるが表示はされる)
3はまだ検証していません。
ここらへんの結果から、静的コンテンツと動的コンテンツで分ける手法は
同一サーバ内でも有効だという仮説が立ちます。
負荷を軽減するというよりは、マシンパワーを余すことなく使いしっかりとアクセスをさばいている感じです。
ここはもう少し深堀していきます。
余裕が出たらJMeterの使い方や負荷テストの手順とかも書きたいなぁ。
画像のリクエストを別httpdに任せたい。
理由は、負荷対策。
というわけで、手順を書いておく。
・実行用ユーザ作成
# groupadd -g 1001 www # useradd -d /home/www -g www -s /sbin/nologin -u 1001 www
・apacheをソースからインストール(workerとして)
# ./configure --prefix=/usr/local/apache_proxy --enable-mods-shared=all --enable-proxy --enable-proxy-http --with-suexec-caller=www --with-expat=builtin --with-mpm=worker # make # make install
・起動スクリプト作成
# vim /etc/rc.d/init.d/apache_proxy
・以下の内容を書き込み
#!/bin/sh
#
# Startup script for the Apache Web Server
#
# chkconfig: 345 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# pidfile: /usr/local/apache/logs/httpd.pid
# config: /usr/local/apache/conf/httpd.conf
APACHECTL=/usr/local/apache_proxy/bin/apachectl
PID=/usr/local/apache_proxy/logs/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
# See how we were called.
case "$1" in
start)
echo -n "Starting apache_proxy: "
daemon $APACHECTL start
echo
;;
stop)
echo -n "Shutting down apache_proxy: "
daemon $APACHECTL stop
rm -f $PID
echo
;;
status)
status httpd
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
・実行権付与
# cd /etc/init.d # chmod +x apache_proxy # chkconfig --add apache_proxy
・リバースプロキシ設定
# cd /usr/local/apache_proxy/conf/ # vim httpd.conf Listen 80 ProxyRequests Off ProxyPreserveHost On ProxyPassReverse / http://localhost:30080/ RewriteEngine On RewriteRule ^/(images |css|js)/ - [L] RewriteRule ^/(.*) http://localhost:30080/$1 [P,L,QSA]
・APサーバ設定変更(/usr/local/apacheにインストールされていると仮定)
# cd /usr/local/apache/conf # vim httpd.conf Listen 30080
ちなみに、リバースプロキシはworkerにする。
理由は、こちら。

最新コメント