Scientific Linux 6
Sponsored Link

Pen - ロードバランス
2011/06/05
 
Pen をインストールして複数のサーバーにロードバランシングできるようにします。 シンプル軽量で機能は負荷分散のみです。例として、ここでは以下のような環境で構築してみます。
        (1)  gw.srv.world         [10.0.0.50]  -  Penサーバー
        (2)  www01.srv.world   [10.0.0.51]  -  Webサーバー#1
        (3)  www02.srv.world   [10.0.0.52]  -  Webサーバー#2
[1] Penのインストールと設定
[root@gw ~]#
yum --enablerepo=epel -y install pen
 
# EPELからインストール
[root@gw ~]#
vi /etc/pen.conf
# 新規作成

# ログファイル

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

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

CONTROL=127.0.0.1:10080
# 最大接続数

MAX_CONNECTIONS=500
# 待ち受けポート

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

BACKEND=2
# バックエンドサーバー1のIP

SERVER1=10.0.0.51:80
# バックエンドサーバー2のIP

SERVER2=10.0.0.52:80
[root@gw ~]#
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/sysconfig/network
. /etc/pen.conf

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

RETVAL=0
start() {
   echo -n $"Starting Pend: "
   SERVER=`grep "^SERVER" /etc/pen.conf | cut -d= -f2`
   daemon $PROG -w $WEBFILE -x $MAX_CONNECTIONS -p $PID -l $LOGFILE -C $CONTROL -S $BACKEND -r $PORT $SERVER
   RETVAL=$?
   echo
   [ $RETVAL -eq 0 ] && touch $LOCKFILE
   return $RETVAL
}
stop() {
   echo -n $"Stopping Pend: "
   killproc $PROG
   RETVAL=$?
   echo
   [ $RETVAL -eq 0 ] && rm -f $PID $LOCKFILE
   return $RETVAL
}
case "$1" in
   start)
      start
      ;;
   stop)
      stop
      ;;
   status)
      status pend
      ;;
   restart)
      stop
      start
      ;;
   *)
      echo $"Usage: $0 {start|stop|status|restart}"
      exit 1
esac
exit $?

[root@gw ~]#
vi /etc/logrotate.d/pen
# 記述はお好みで

/var/log/pen.log {
   daily
   copytruncate
   compress
   notifempty
   missingok
   postrotate
     /etc/rc.d/init.d/pend restart 2>&1 > /dev/null || true
   endscript
}

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

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

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

[root@gw ~]#
chkconfig pend on

[2] WebブラウザでPenサーバーにアクセスして、設定通りバックエンドサーバーが応答しているか確認してください。
[3] 負荷分散のため動作が確認しにくいですが、 試しに現在応答しているバックエンドサーバーの httpd を手動でおとして、 他のサーバーへ切り替わるか確認してみてください。以下のように正常に切り替わればOKです。
[4] PenのステータスをWebブラウザから見ることができるツールが付属しているので設定しておきます。
[root@gw ~]#
cp /usr/share/doc/pen-*/penstats /var/www/pen

[root@gw ~]#
vi /var/www/pen/penstats
# 4行目:変更

PIDFILE=
/var/run/pen.pid
# 5行目:変更

WEBFILE=
/var/www/pen/webstats.html
[root@gw ~]#
vi /etc/httpd/conf.d/pen.conf
# 変更

Alias
/pen/ /var/www/pen/
<Directory /var/www/pen/>
   DirectoryIndex penctl.cgi
   Options ExecCGI
   order deny,allow
   deny from all
   allow from 127.0.0.1
10.0.0.0/24
 
# アクセス許可IP追記

</Directory>
[root@gw ~]#
/etc/rc.d/init.d/httpd restart

Stopping httpd:
[ OK ]

Starting httpd:
[ OK ]

[root@gw ~]#
chmod 755 /var/www/pen/penstats

[root@gw ~]#
/var/www/pen/penstats > /dev/null
 
# 実行

[root@gw ~]#
# 5分おきにレポート更新

*/5 * * * * /var/www/pen/penstats > /dev/null
[5] Penサーバーで httpd を稼動させて Webブラウザで「http://(サーバー名またはIPアドレス):(httpdの待受ポート)/pen/webstats.html」にアクセスすると、 以下のように Pen のステータスを見ることができます。 ちなみに httpd の待ち受けポートには、pendに 80 を割り当てている場合、 他の適当なポートを割り当てる必要があります。
関連コンテンツ