目次

22 ipvsadm と ldirectord

ipvsadmでロードバランスしているが、サーバが停止していてもパケットを転送しようとする。

ldirectordの場合は、この問題を解決してくれる。

さらにHeartbeatで、ldirectordが落ちても起動するようになっている。

ipvsadm

ipvsadm: http://memogakki.es.land.to/linux/index.php?ipvsadm

IPVSを制御するためのツール。

仮想サーバグループの追加やリアルサーバの割り当てができるほか、 現在の接続状況や転送レートの表示などができます。

ldirectord

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 

ipvsam command

1.VIPの動作設定

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が付けられたパケットを指定
VIP:ポート VIPとポート名を指定
スケジュール
-s 負荷の割り振り方を指定する
-p パーシステンスの時間を指定する
-M -pオプションの処理、クライアントの同一性を判断に
ここで指定した値を使う事によりグループ化して管理できる
スケジュールの指定方法
rr ラウンドロビン
wrr ラウンドロビンに重み付けを行える
lc 負荷の少ないサーバへリクエストを飛ばす
wlc 基本的に上記と同じだが、重み付けも行う
lblc クライアントからのリクエストを基本的に同じサーバへ飛ばす、高負荷時は別サーバへ
lblcr 上記と同じだが、レプリケーション機能がつく
sed 応答速度に応じてリクエストを送るサーバを変える
nq アイドルのサーバがあればそこへ、なければsedと同じ動作

2.実サーバを設定

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