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 . . .
各パラメータには以下のように任意の引数を与えてあげます。
ユーザ名、グループ名を省略すると root 権限でソケットが作成されます。
操作レベルは “admin / user / operator” から選択します。admin はフルコントロール可能ですが user と operator は主に参照メインの権限となります。
stats timeout <アイドル時のタイムアウト> (デフォルト: 10 秒)
stats maxconn
設定完了後、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 では “茶” の表示になります。
サーバのメンテナンスモードを解除
> enable server listen-1/www2
メンテナンス状態を解除するとヘルスチェック後に復帰し表示も元の状態に戻ります。
カウンタのリセット
# Max 値のみのカウンタをリセット > clear counters # 全てのカウンタをリセット > clear counters all
以上が HAProxy 1.4 系で利用できるコマンドラインの操作例です。