HAProxy 設定と運用実践

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 にアクセスすると、統計ページが表示されます。

タグ: HAProxy load-balancing tcp-proxy http-proxy service-management

6月6日 16:11 投稿