サーバ周りで迷った時に

On 2010年6月3日, in 未分類, by タカ

ちょっとサーバ周りで迷ったのでお勉強。

photo
[24時間365日] サーバ/インフラを支える技術 ‾スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)
安井 真伸 横川 和哉 ひろせ まさあき 伊藤 直也 田中 慎司 勝見 祐己
技術評論社 2008-08-07

by G-Tools , 2011/05/29

この本を元に、リバースプロキシ導入したお陰で、相当サーバは安定しました。

でも、まだまだ足りない…。次に使えそうなネタないかなぁ…。

Tagged with:  

わかってきた事

On 2009年10月28日, in Apache, by タカ

今現在、以下の3パターンでロードアベレージなどを調べています。

  1. Apache+mod_phpのみ
  2. 静的コンテンツはwokerのApache,動的コンテンツはApache+mod_php
  3. 静的コンテンツはwokerのApache+mod_cache,動的コンテンツはApache+mod_php

仮想で2CPUで検証中。

最初は、どれも大して差がありません。
むしろ、分けている方がロードアベレージ高いです。

ただ、負荷が上がってくるとだんだんmod_php+Apacheが悲鳴をあげてきます。

ある時を境に、1のmod_php+Apacheが突然落ちます。(ログに出ないけどtopから消えてJMeterが止まる)

同じ負荷でも、2はちゃんとアクセスをさばいています。(若干重くなってはいるが表示はされる)

3はまだ検証していません。

ここらへんの結果から、静的コンテンツと動的コンテンツで分ける手法は
同一サーバ内でも有効だという仮説が立ちます。

負荷を軽減するというよりは、マシンパワーを余すことなく使いしっかりとアクセスをさばいている感じです。

ここはもう少し深堀していきます。

余裕が出たらJMeterの使い方や負荷テストの手順とかも書きたいなぁ。

Tagged with:  

画像のリクエストを別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にする。
理由は、こちら