CentOS 6
Sponsored Link

Pen : HTTP を負荷分散
2015/01/31
 
シンプル軽量な TCP ベースの負荷分散ソフトウェア Pen をインストールします。
TCP プロトコルベースのため、SMTP, FTP, LDAP等々の負荷分散も可能です。
例として、ここでは以下のような環境で構築します。
        |
--------+--------------------------------------------------------------------
        |
        +-------------------+--------------------+--------------------+
        |10.0.0.30          |10.0.0.51           |10.0.0.52           |10.0.0.53
 +------+-----+     +-------+------+     +-------+------+     +-------+------+
 |  Frontend  |     |   Backend#1  |     |   Backend#2  |     |   Backend#3  |
 | Pen Server |     |  Web Server  |     |  Web Server  |     |  Web Server  |
 +------------+     +--------------+     +--------------+     +--------------+

 
Pen をインストールした Frontend サーバーへの HTTP 通信を Backend#1, Backend#2, Backend#3 の Webサーバーへ負荷分散するように設定します。
[1] Pen をインストールします。
# EPELからインストール

[root@dlp ~]#
yum --enablerepo=epel -y install pen
[2] Pen の設定です。
[root@dlp ~]#
vi /etc/pen.conf
# 新規作成

# ログファイル

LOGFILE=/var/log/pen.log
# ステータス出力先ファイル

WEBFILE=/var/www/pen/webstats.html
# コントロールポート

CONTROL=127.0.0.1:10080
# 最大接続数

MAX_CONNECTIONS=256
# X-Forwarded-For ヘッダーを送る

XFORWARDEDFOR=true
# Round-Robin モード

ROUNDROBIN=true
# 待ち受けポート

PORT=80
# バックエンドサーバーの数

BACKEND=3
# バックエンドサーバーを定義

SERVER1=10.0.0.51:80
SERVER2=10.0.0.52:80
SERVER2=10.0.0.53:80
# 起動スクリプト作成

[root@dlp ~]#
vi /etc/rc.d/init.d/pend
#!/bin/bash

# pend: Start/Stop Pend
# chkconfig: - 90 10
# description: Pen is a light weight simple load balancer.
# pidfile: /var/run/pen.pid

. /etc/rc.d/init.d/functions
. /etc/pen.conf

LOCKFILE="/var/lock/subsys/pen"
PID=/var/run/pen.pid
PROG=/usr/bin/pen
PROGNAME=Pend

RETVAL=0
start() {
    SERVER=`grep "^SERVER" /etc/pen.conf | cut -d= -f2`
    [ $XFORWARDEDFOR = "true" ] && SERVER="-H $SERVER"
    [ $ROUNDROBIN = "true" ] && SERVER="-r $SERVER"
    [ $SSLCERTS ] && SERVER="-E $SSLCERTS $SERVER"

    echo -n $"Starting $PROGNAME: "
    daemon $PROG -w $WEBFILE -x $MAX_CONNECTIONS -p $PID -l $LOGFILE -C $CONTROL -S $BACKEND $PORT $SERVER
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch $LOCKFILE
    return $RETVAL
}
stop() {
    echo -n $"Stopping $PROGNAME: "
    killproc $PROG
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f $PID $LOCKFILE
    return $RETVAL
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status -p "$PID" -l $PROG $PROGNAME
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart}"
        exit 1
esac
exit $?

[root@dlp ~]#
chmod 755 /etc/rc.d/init.d/pend

[root@dlp ~]#
/etc/rc.d/init.d/pend start

Starting Pend: [ OK ]
[root@dlp ~]#
chkconfig --add pend

[root@dlp ~]#
chkconfig pend on

[3] バックエンド Webサーバーで X-Forwarded-For ヘッダーをロギングするよう設定しておきます。
[root@www ~]#
vi /etc/httpd/conf/httpd.conf
# 497行目:変更

LogFormat "
\"%{X-Forwarded-For}i\"
%l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[root@www ~]#
/etc/rc.d/init.d/httpd restart

[4] 任意のクライアントから Pen サーバーへ HTTP アクセスし、何度かリロードしたりバックエンドサーバーの一部を手動で停止する等して、動作を確認してください。
 
Tweet