ipvsadmでロードバランスしているが、サーバが停止していてもパケットを転送しようとする。
ldirectordの場合は、この問題を解決してくれる。
さらにHeartbeatで、ldirectordが落ちても起動するようになっている。
ipvsadm: http://memogakki.es.land.to/linux/index.php?ipvsadm
IPVSを制御するためのツール。
仮想サーバグループの追加やリアルサーバの割り当てができるほか、 現在の接続状況や転送レートの表示などができます。
ldirectord: http://memogakki.es.land.to/linux/index.php?ldirectord
Heartbeatに付属するソフトウェア 実サーバの死活やTCPのサービスを監視をしてくれる。
ipvsadm -Ln [root@lbslave ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.0.10:80 wrr -> 127.0.0.1:80 Local 1 0 0 TCP 1192.168.0.10:443 wrr -> 127.0.0.1:443 Local 1 0 0
ipvsadm [オプション] [プロトコル] [VIP:ポート] [スケジュールオプション] [バランスアルゴリズム]
VIP: 10.1.0.100のポート80番を負荷の少ないサーバへリクエストを飛ばす
# ipvsadm -A -t 10.1.0.100:80 -s lc
UDPの場合
# ipvsadm -A -u 153.122.5.112:8080 -s wrr
-A | 設定の追加 |
---|---|
-E | 設定の変更 |
-D | 設定の削除 |
-t | tcpのサービスを指定する |
---|---|
-u | udpのサービスを指定する |
-f | iptablesのFWMARKが付けられたパケットを指定 |
-s | 負荷の割り振り方を指定する |
---|---|
-p | パーシステンスの時間を指定する |
-M | -pオプションの処理、クライアントの同一性を判断に ここで指定した値を使う事によりグループ化して管理できる |
rr | ラウンドロビン |
---|---|
wrr | ラウンドロビンに重み付けを行える |
lc | 負荷の少ないサーバへリクエストを飛ばす |
wlc | 基本的に上記と同じだが、重み付けも行う |
lblc | クライアントからのリクエストを基本的に同じサーバへ飛ばす、高負荷時は別サーバへ |
lblcr | 上記と同じだが、レプリケーション機能がつく |
sed | 応答速度に応じてリクエストを送るサーバを変える |
nq | アイドルのサーバがあればそこへ、なければsedと同じ動作 |
ipvsadm [オプション] [プロトコル] [VIP:ポート] [実サーバ指定オプション] [実サーバのIP] [転送オプション]
VIP 10.1.0.100のポート80を 10.1.0.150に転送
# ipvsadm -a -t 10.1.0.100:80 -r 10.1.0.150 -g
-a | 追加 |
---|---|
-e | 変更 |
-d | 削除 |
上に書いた物と同じモノが使える。
-r | 実サーバを指定する |
---|
-g | パケットに何もせず転送 |
---|---|
-i | IPトンネルを使って転送 |
-m | マスカレードをする |
ipvsadm -Ln
# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.1.0.100:80 lc -> 10.1.0.150:80 Route 1 0 0
うまく動作してない時などに、現在のコネクション状況を見ることができる
ipvsadm -Lnc
# ipvsadm -Lnc IPVS connection entries pro expire state source virtual destination TCP 01:05 FIN_WAIT 21.12.143.2:64991 10.1.0.100:80 10.1.0.150:80 TCP 01:05 FIN_WAIT 21.12.143.2:64989 10.1.0.100:80 10.1.0.150:80 TCP 01:05 FIN_WAIT 21.12.143.2:64983 10.1.0.100:80 10.1.0.160:80 TCP 01:06 FIN_WAIT 21.12.143.2:65001 10.1.0.100:80 10.1.0.150:80 TCP 01:05 FIN_WAIT 21.12.143.2:64982 10.1.0.100:80 10.1.0.150:80 TCP 01:06 FIN_WAIT 21.12.143.2:64993 10.1.0.100:80 10.1.0.150:80 TCP 01:06 FIN_WAIT 21.12.143.2:64997 10.1.0.100:80 10.1.0.160:80
正常に行ってない場合、下記のようにSYN_RECVで止まってたりする。
# ipvsadm -Lnc IPVS connection entries pro expire state source virtual destination TCP 00:12 SYN_RECV 21.12.143.2:61215 10.1.0.100:8080 10.1.0.150:80 TCP 00:33 SYN_RECV 21.12.143.2:61930 10.1.0.100:8080 10.1.0.150:80 TCP 00:04 SYN_RECV 21.12.143.2:64965 10.1.0.100:8080 10.1.0.150:80
ipvsadm -C