ダイレクトルーティングを経由したバーチャルサーバー

このページは LVS の接続要求を素早く処理するダイレクトルーティングについて紹介します。

接続要求を素早く処理するダイレクトルーティングのテクニック

この接続要求を素早く処理する方法は、IBM の NetDispatcher の実装に似ています。バーチャルIPアドレスはリアルサーバーとロードバランサーとで共有されています。 ロードバランサーはバーチャル IP アドレスとして設定されたインターフェースも持っており、それは接続要求パケットを受けるために使われ、それは直接選ばれたリアルサーバーにパケットを送ります。リアルサーバーがローカルでパケットを処理することができるように、すべてのリアルサーバーはバーチャルIPアドレスで設定されたARPでないエイリアスのインターフェースを持たなければならない、又は、バーチャルIPアドレスに向かったパケットをローカルのソケットにリダイレクトしなければならない。 ロードバランサーとリアルサーバーは HUB/Switch で物理的につながったインターフェースを1組もたなければならない。ダイレクトルーティングを経由するバーチャルサーバーのアーキテクチャは次に説明する。

ユーザーがクラスターが提供しているサービスにアクセスすると、バーチャルIPアドレスに向かったパケット(バーチャルサーバーに向かったIPアドレス)が到着する。 そしてロードバランサーはパケットの向かうアドレスやポート番号を調べる それがバーチャルサービスのものと一致したら、接続のスケジューリングアルゴリズムによりクラスターサービスからリアルサーバーが選ばれる。そしてハッシュテーブルにコネクションが記録される。そしてロードバランサーが直接選ばれたリアルサーバーに送信する。このコネクションに属するパケット、または、ハッシュテーブルに見つかった選ばれたリアルサーバーのパケットがきたら、パケットはまた他のサーバーに転送される。 転送されたパケットを受け取ったら、サーバーはインターフェースのエイリアス、又は、ローカルソケットのパケットを見つけます。そして接続要求を処理し最後にユーザーにダイレクトに結果を返します。コネクションが止まったり、タイムアウトしたらコネクションレコードがハッシュテーブルから削除されます。

ダイレクトルーティングの仕事は次のとおりです

ロードバランサーは単にデータフレームの MAC アドレスをLAN上の選んだリアルサーバーの MAC アドレスに変換します。この理由はロードバランサーとおのおののサーバーはLANの同一セグメント上でお互いに直接つながっていなければならないからです。もしあなたがクラスタリングをしていてARP問題に遭遇したら、 ここを見なさい。

kernel の構築方法

1. kernel 2.0.36 のための VS パッチ

最初に正規のバージョンの Linux kernel のソースをとってきてください。2番目に、kernel にバーチャルサーバーのパッチを当ててください。3番目に、次のカーネルオプションは絶対に必要なので必ず選んでコンパイルしてください。

Kernel のコンパイルオプション

Code maturity level options --->
    [*] Prompt for development and/or incomplete code/drivers

Networking options --->
    [*] Network firewalls
    ...
    [*] IP: forwarding/gatewaying
    ...
    [*] IP: firewalling
    ...
    [*] IP: masquerading
    ...
    [*] IP: ippfvs(LinuxDirector) masquerading (EXPERIMENTAL)
    Virtual server request dispatching technique---
    ( ) VS-NAT
    ( ) VS-Tunneling
    (X) VS-DRouting

スケジューリングアルゴリズムを選ばなければならない

    Virtual server scheduling algorithm
    (X) WeightedRoundRobin
    ( ) LeastConnection
    ( ) WeightedLeastConnection

[ ] IP: enabling ippfvs with the local node feature

4番目にカーネルを再コンパイルする。適切にコンパイルしたらカーネルをアップデートして(LILO)リブートしてください。

2. kernel 2.2.9 のための VS パッチ

Kernel コンパイルオプション

Code maturity level options --->
    [*] Prompt for development and/or incomplete code/drivers

Networking options --->
    [*] Network firewalls
    ...
    [*] IP: forwarding/gatewaying
    ...
    [*] IP: firewalling
    ...
    [*] IP: masquerading
    ...
    [*] IP: masquerading virtual server support (EXPERIMENTAL)
    (12) IP masquerading table size (the Nth power of 2)
    <M> IPVS: round-robin scheduling(NEW)
    <M> IPVS: weighted round-robin scheduling(NEW)
    <M> IPVS: weighted least-connection scheduling(NEW)
    <M> IPVS: persistent client connection scheduling(NEW)

1度適切にコンパイルしたらカーネルをアップデートして(LILO)リブートしてください。最後に ippfvsadm.c から ippfvsadm をコンパイルします。

ダイレクトルーティングを経由したバーチャルサーバーの設定例

これは私が設定したダイレクトルーティングを経由するバーチャルサーバーの例です 設定は次のようになっています。私はこれがあなたの役に立つことを願っています。 ロードバランサーは IP アドレス 172.26.20.111 、リアルサーバーは IP アドレス 172.16.20.112 、バーチャル IP アドレスは 172.26.20.110 に設定します。 この例では telnet 172.26.20.110 をすると本当にリアルサーバーにつながります。

1. kernel 2.0.x の場合

kernel 2.0.36 のロードバランサー

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev eth0:0
ippfvsadm -A -t 172.26.20.110:23 -R 172.26.20.112

kernel 2.0.36 のリアルサーバー

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0

私が他のホストにいる時、 telnet 172.26.20.110 をすると本当にリアルサーバーにつながります。

2. kernel 2.2.x の場合

kernel 2.2.14 のロードバランサー

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev eth0:0
echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -g

kernel 2.2.14 のリアルサーバー

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0

次の設定例

1. 隠れたデバイス(例、tunl0 ) を実装した kernel 2.2.14 以降のリアルサーバー

kernel 2.2.14 のロードバランサー

echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.26.20.110:23 -s wlc
ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -g

kernel 2.2.14 のリアルサーバー

echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/lo/hidden

あなたはダミーのような他のデバイスのエイリアスでバーチャルIPアドレスとして設定することができ隠すことができる。エイリアスインターフェースが使えるようになってからあなたは好きなだけたくさんのバーチャルIPアドレスを設定できる。ダミーデバイスを使った設定例は次のとおりです。

echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig dummy0 up
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/dummy0/hidden
ifconfig dummy0:0 172.26.20.110 up
route add -host 172.26.20.110 dev dummy0:0
ifconfig dummy0:1 <Another-VIP> up
...

2. リダイレクトアプローチを使った kernel 2.2.x のリアルサーバー

ロードバランサーの設定は上にある例といっしょだ。kernel 2.2.x で動作するリアルサーバー次のように設定する。

echo 1 > /proc/sys/net/ipv4/ip_forward
ipchains -A input -j REDIRECT 23 -d 172.26.20.110 23 -p tcp
...

ipchains を使ったリダイレクトコマンドです。IP アドレス 172.26.20.110:23 と TCP プロトコルに向かうパケットがきたらローカルソケットにリダイレクトされます。 サービスデーモンはすべてのアドレス(IPアドレス 0.0.0.0)、又は、バーチャルIPアドレス(IPアドレス 172.26.20.110 ここ)を LISTEN していなければなりません。

3. 異なるネットワークルートをもったリアルサーバー

ダイレクトルーティングを経由したバーチャルサーバーでは、サーバーはクライアントにデータを返す時、異なるネットワークルート(異なるインターネットリンク)を通ることができる。これはとてもパフォーマンスが良い。ロードバランサーとリアルサーバーは通信するためにプライベートアドレスを使う。これが設定例だ。

kernel 2.2.14 のロードバランサー

ifconfig eth0 <an IP address> ...
...
ifconfig eth0:0 <VIP> netmask 255.255.255.255 broadcast <VIP> up 
route add -host <VIP> dev eth0:0 
ifconfig eth1 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 up 
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
ipvsadm -A -t <VIP>:23
ipvsadm -A -t <VIP>:23 -r 192.168.0.2 -g
...

kernel 2.0.36 のリアルサーバー

ifconfig eth0 <a seperate IP address> ...
# 異なるネットワークルートを通る
...
ifconfig eth1 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 up
route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
ifconfig lo:0 <VIP> netmask 255.255.255.255 broadcast <VIP> up 
route add -host <VIP> dev lo:0


$Id: VS-DRouting.html,v 1.2 2000/04/12 00:09:40 wensong Exp $
Created on: 1999/5/1