work.log

元エンジニアの備忘録的ブログ

HAProxyをコマンドラインから操作する

投稿:2013-07-16 18:39  更新:

OSS の L7 ロードバランサ HAProxy をコマンドラインから操作するメモ書きです。

今のところ特に利用していない機能ですが、運用ツール等を作成する際には割りと使えそうなので一通り試してみます。

検証に利用した HAProxy のバージョンは 1.4.23 になります。

コマンドライン操作の準備

そのままの状態では HAProxy をコマンドラインから操作することができないので、必要な設定をコンフィグファイルに追加します。

global
        stats socket /tmp/haproxy-cli.sock user root group wheel level admin
        stats timeout 30s
        stats maxconn 1
.
.
.

各パラメータには以下のように任意の引数を与えてあげます。

stats socket <ソケットを作成するパス> <ユーザ名> <グループ名> <操作レベル>

ユーザ名、グループ名を省略すると root 権限でソケットが作成されます。

操作レベルは “admin / user / operator” から選択します。admin はフルコントロール可能ですが user と operator は主に参照メインの権限となります。

stats timeout <アイドル時のタイムアウト> (デフォルト: 10 秒)

stats maxconn (デフォルト: 10)

設定完了後、HAProxy を再起動するとコマンドライン操作用のソケットが作成されます。

次にこのソケットに接続するために socat というソケットリレーツールをインストールします。

FreeBSD の場合は ports から入ります。

# cd /usr/ports/net/socat
# make install clean

CentOS の場合は以下のようにレポジトリを指定して yum でインストールします。

# yum install --enablerepo=epel socat

準備はこれで完了です。

HAProxyのコマンドライン操作メニュー

HAProxy の操作は socat を介して行なっていきます。

こんな感じで操作オプションを HAProxy に渡すと結果が返ってきます。

echo "show info" | socat stdio /tmp/haproxy-cli.sock

連続で操作をする場合は対話モードが便利です。以下では対話モードの操作例を書いていきます。

基本操作

socat での接続・切断といった基本的な操作は以下のような感じになります。

HAProxy 1.4 系は操作メニューが少ないので簡単な事しかできませんが、1.5 系は操作メニューが少しだけ拡充されているようです。

ソケットに接続し対話モードへスイッチ

# socat readline /tmp/haproxy-cli.sock
prompt
>

対話モードを終了

> quit

ヘルプを表示

> help
Unknown command. Please enter one of the following commands only :
  clear counters : clear max statistics counters (add 'all' for all counters)
  help           : this message
  prompt         : toggle interactive mode with prompt
  quit           : disconnect
  show info      : report information about the running process
  show stat      : report counters for each proxy and server
  show errors    : report last request and response errors for each proxy
  show sess [id] : report the list of current sessions or dump this session
  get weight     : report a server's current weight
  set weight     : change a server's weight
  set timeout    : change a timeout setting
  disable server : set a server in maintenance mode
  enable server  : re-enable a server that was previously in maintenance mode

基本操作としてはこんな所です。

情報取得

以下では、Web で確認できる Statistics Report と同様の情報が取得できます。

各サーバの状態

> show stat
# pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt,
listen-1,FRONTEND,,,0,0,1024,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,4,0,,,,0,0,0,0,,,,0,0,0,0,0,0,,0,0,0,,,
listen-1,www1,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,52,0,,1,4,1,,0,,2,0,,0,L7OK,200,1,0,0,0,0,0,0,0,,,,0,0,
listen-1,www2,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,52,0,,1,4,2,,0,,2,0,,0,L7OK,200,3,0,0,0,0,0,0,0,,,,0,0,
listen-1,www3,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,0,1,0,0,52,0,,1,4,3,,0,,2,0,,0,L7OK,200,2,0,0,0,0,0,0,0,,,,0,0,
listen-1,BACKEND,0,0,0,0,1024,0,0,0,0,0,,0,0,0,0,UP,2,2,1,,0,52,0,,1,4,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0,
Monitor,FRONTEND,,,0,1,64,11,3839,195152,0,0,0,,,,,OPEN,,,,,,,,,1,5,0,,,,0,0,0,3,,,,0,11,0,0,0,0,,0,3,11,,,
Monitor,BACKEND,0,0,0,0,64,0,3839,195152,0,0,,0,0,0,0,UP,0,0,0,,0,52,0,,1,5,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0,

上記はコンマ区切りの CSV フォーマットになっています。

HAProxyの情報

> show info
Name: HAProxy
Version: 1.4.23
Release_date: 2013/04/03
Nbproc: 1
Process_num: 1
Pid: 4529
Uptime: 0d 0h01m35s
Uptime_sec: 95
Memmax_MB: 0
Ulimit-n: 8202
Maxsock: 8202
Maxconn: 4096
Maxpipes: 0
CurrConns: 1
PipesUsed: 0
PipesFree: 0
Tasks: 6
Run_queue: 1
node: dev.drive.ne.jp
description: 

セッション情報

> show sess
0x800f50600: proto=unix_stream ts=09 age=7s calls=4 rq[f=d09200h,l=0,an=00h,rx=30s,wx=,ax=] rp[f=009000h,l=0,an=00h,rx=,wx=,ax=] s0=[7,8h,fd=1,ex=] s1=[7,4h,fd=-1,ex=] exp=26s

サーバに設定された重み付けを取得

> get weight listen-1/www1
50 (initial 50)

エラー表示

> show errors
Total events captured on [16/Jul/2013:16:05:51.195] : 0

設定・カウンタのクリア

ほとんど設定らしい事はできないのですが、リアルタイムでバランシングサーバの切り離し・復帰ができますので運用中には重宝しそうな感じです。

コマンドラインのタイムアウト変更

> set timeout cli 60

サーバの重み付けを変更

> set weight listen-1/www1 80

重み付けについては分散方式に “roundrobin”“leastconn” の重み付けが指定可能な方式を利用している場合に設定できます。

“static-rr” 等の重み付けが調整できない方式の場合は 0% もしくは 100% のみの設定が可能です。

サーバをメンテナンスモードに切り替え

> disable server listen-1/www2

メンテナンスモードに切り替わるとそのサーバへのバランシングが停止し、Statistics Report では “茶” の表示になります。

haproxy-statistics-01

サーバのメンテナンスモードを解除

> enable server listen-1/www2

メンテナンス状態を解除するとヘルスチェック後に復帰し表示も元の状態に戻ります。

haproxy-statistics-02

カウンタのリセット

# Max 値のみのカウンタをリセット
> clear counters

# 全てのカウンタをリセット
> clear counters all

以上が HAProxy 1.4 系で利用できるコマンドラインの操作例です。

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間