Pen : HTTP を負荷分散2015/06/10 |
シンプル軽量な 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 # 最大接続数 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 #!/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 $PORT -w $WEBFILE -x $MAX_CONNECTIONS -p $PID -l $LOGFILE -S $BACKEND $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 [Unit] Description=Pend service After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/etc/rc.d/init.d/pend start ExecStop=/etc/rc.d/init.d/pend stop [Install] WantedBy=multi-user.target systemctl start pen [root@dlp ~]# systemctl enable pen |
[3] | バックエンド Webサーバーで X-Forwarded-For ヘッダーをロギングするよう設定しておきます。 |
[root@www ~]#
vi /etc/httpd/conf/httpd.conf # 196行目:変更 LogFormat " \"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
systemctl restart httpd |
[4] | 任意のクライアントから Pen サーバーへ HTTP アクセスし、何度かリロードしたりバックエンドサーバーの一部を手動で停止する等して、動作を確認してください。 |
Sponsored Link |
|