====== 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