HAProxy のインストール
HAProxy をソースコードからビルドしてインストールします。ここでは Linux カーネル 2.6.28 以上、x86_64 アーキテクチャを対象とします。
# wget http://www.haproxy.org/download/1.4/src/haproxy-1.4.24.tar.gz
# tar -xzf haproxy-1.4.24.tar.gz
# cd haproxy-1.4.24
# make TARGET=linux2628 ARCH=x86_64
# make PREFIX=/opt/haproxy-1.4.24 install
# ln -sf /opt/haproxy-1.4.24 /opt/haproxy
# mkdir -p /opt/haproxy/etc /opt/haproxy/var/run /opt/haproxy/var/chroot
ビルドオプションは README を参照し、TARGET は対象カーネルバージョン、ARCH は CPU アーキテクチャを指定します。
IPv4 フォワーディングの有効化
HAProxy がリバースプロキシとして機能するには、カーネルレベルで IP フォワーディングを有効にする必要があります。
# sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf
# sysctl -p
# net.ipv4.ip_forward = 1
設定ファイルの構成
HAProxy の設定ファイルは以下の5つのセクションで構成されます:
- global: プロセス全体のシステム設定(デーモン化、ファイルディスクリプタ制限など)
- defaults: frontend/backend/listen で明示的に設定されていないパラメータのデフォルト値
- frontend: クライアントからのリクエストを条件に応じてルーティング
- backend: 実際のバックエンドサーバー群とその負荷分散設定
- listen: frontend と backend を単一のブロックで定義する簡易構文
設定ファイルの作成
# vim /opt/haproxy/etc/haproxy.cfg
以下のような設定を記述します:
global
daemon
nbproc 1
pidfile /opt/haproxy/var/run/haproxy.pid
maxconn 1500
ulimit-n 82000
log 127.0.0.1 local0 debug
defaults
mode http
retries 3
option forwardfor
stats refresh 30s
option httplog
option tcplog
option httpclose
option abortonclose
option redispatch
balance source
maxconn 2000
timeout connect 5s
timeout client 120s
timeout server 120s
timeout check 10s
timeout queue 5s
timeout client-fin 30s
timeout server-fin 30s
timeout tunnel 1h
log 127.0.0.1 local0 info
# 管理用統計ページ
listen admin_stats
bind 0.0.0.0:10088
mode http
option httplog
log 127.0.0.1 local0 err
maxconn 10
stats refresh 30s
stats uri /stats
stats realm "Haproxy Admin"
stats auth admin:admin
stats auth admin1:admin1
stats hide-version
stats admin if TRUE
# HTTP バックエンド(Webサーバ)
listen WebServer
bind :10080
mode http
maxconn 1024
server web1 127.0.0.1:8080 weight 1 rise 2 fall 3
server web2 127.0.0.1:8081 weight 1 rise 2 fall 3
# MySQL TCP プロキシ
listen MySQL13306
bind :13306
mode tcp
balance roundrobin
server MySQL_77_3306 127.0.0.1:3306 weight 1 check inter 1000 rise 3 fall 2 id 1
server MySQL_77_3307 127.0.0.1:3307 weight 1 check inter 1000 rise 3 fall 2 id 2
サービス制御スクリプトの作成
HAProxy には標準のサービス管理スクリプトが含まれていないため、独自のスクリプトを用意します。
# vim /etc/init.d/haproxy
#!/bin/bash
BASE_DIR="/opt/haproxy"
ARGV="$1"
start() {
echo "Starting HAProxy..."
$BASE_DIR/sbin/haproxy -f $BASE_DIR/etc/haproxy.cfg
}
stop() {
echo "Stopping HAProxy..."
kill -TERM $(cat $BASE_DIR/var/run/haproxy.pid)
sleep 1
if [ -f $BASE_DIR/var/run/haproxy.pid ]; then
kill -KILL $(cat $BASE_DIR/var/run/haproxy.pid)
fi
rm -f $BASE_DIR/var/run/haproxy.pid
}
case $ARGV in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
実行権限を付与します:
# chmod +x /etc/init.d/haproxy
サービスの起動と確認
スクリプトを実行して HAProxy を起動し、ポートとプロセスを確認します。
# service haproxy start
# lsof -i :10080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
haproxy 9692 root 4u IPv4 1438043 0t0 TCP *:http-alt (LISTEN)
ブラウザで http://<サーバIP>:10088/stats にアクセスすると、統計ページが表示されます。