Pen - ロードバランス2010/05/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 ~]#
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 $? # 記述はお好みで /var/log/pen.log { daily copytruncate compress notifempty missingok postrotate /etc/rc.d/init.d/pend restart 2>&1 > /dev/null || true endscript } 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> /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 ~]#
crontab -e # 5分おきにレポート更新
*/5 * * * * /var/www/pen/penstats > /dev/null
|
[5] | Penサーバーで httpd を稼動させて Webブラウザで「http://(サーバー名またはIPアドレス):(httpdの待受ポート)/pen/webstats.html」にアクセスすると、 以下のように Pen のステータスを見ることができます。 ちなみに httpd の待ち受けポートには、pendに 80 を割り当てている場合、 他の適当なポートを割り当てる必要があります。 |