3.2. ダイレクトルーティングを使った Load Balancer Add-On
「ダイレクトルーティング」 で記載しているように、ダイレクトルーティングでは実サーバーがパケットを処理した後、発信パケットを LVS ルーター経由でルーティングするのではなく、実サーバーが直接、要求元のユーザーにルーティングすることができます。ダイレクトルーティングの場合、実サーバーが LVS ルーターのあるネットワークセグメントに物理的に接続され、発信パケットの処理とルーティングができなければなりません。
- ネットワークレイアウト
- ダイレクトルーティングを使った Load Balancer Add-On では、LVS ルーターが着信要求を受け取り、それらを処理のために適切な実サーバーにルーティングする必要があります。次に実サーバーがその応答を 直接、クライアントにルーティングする必要があります。例えば、クライアントがインターネット上に存在し、パケットを LVS ルーター経由で実サーバーに送信した場合、実サーバーはインターネット経由で直接クライアントに到達できる必要があります。実サーバーにゲートウェイを設定しパケットをインターネットに渡すことでこれを実現します。サーバープール内の各実サーバーには別々のゲートウェイ (また各ゲートウェイにはインターネットへの接続がある) を持たせることができるため、最大限のスループットとスケーラビリティを実現できます。ただし、標準的な Load Balancer Add-On 設定の場合、複数の実サーバーは1つの ゲートウェイで通信することができます (したがってネットワーク接続も 1 つ)。
重要
LVS ルーターを実サーバーのゲートウェイとして使用することは 推奨されません。そのような使用方法では、LVS ルーターに不要な設定の複雑性とネットワーク負荷を追加することになり、NAT ルーティングにみられるネットワークのボトルネックを戻すことになってしまいます。 - ハードウェア
- ダイレクトルーティング使用の Load Balancer Add-On システムでのハードウェア要件は、他の Load Balancer Add-On トポロジーと同様のものです。LVS ルーターが着信要求を処理して実サーバー用にロードバランシングを実行するには Red Hat Enterprise Linux の稼働を必要としますが、実サーバーが正常に機能するには Linux マシンである必要はありません。LVS ルーターはそれぞれ 1 つまたは 2 つの NIC を必要とします (バックアップルーターの有無による)。設定を容易にしてトラフィックを明確に分けるために、2 つの NIC を使用することもできます。こうすると、1 つの NIC で着信要求を処理し、実サーバーへのパケット回送はもうひとつの NIC に任せることができます。実サーバーは LVS ルーターを迂回して送信パケットを直接クライアントに送信するため、インターネットへのゲートウェイが必要となります。パフォーマンスと可用性を最大化するには、クライアントが接続しているキャリアネットワーク (インターネットやイントラネットなど) に専用接続がある独自のゲートウェイに実サーバーを接続します。
- ソフトウェア
- ダイレクトルーティングで Load Balancer Add-On を使用していて ARP 問題に直面している管理者には特に、 Piranha Configuration Tool の範囲外で必要な設定があります。 詳細情報は、「ダイレクトルーティングおよび
arptables_jf
」 または 「ダイレクトルーティングとiptables
」 を参照してください。
3.2.1. ダイレクトルーティングおよび arptables_jf
arptables_jf
を使用してダイレクトルーティングを設定するには、実サーバーでそれらの仮想 IP アドレスが設定されており、パケットが直接送信で可能となっている必要があります。VIP 用の ARP 要求は実サーバーでは完全に無視されます。そ例外の、VIP を含んでいて送信される ARP パケットは、mangle 化されて VIP ではなく実サーバーの IP が含まれるようになります。
arptables_jf
メソッドを使用すると、アプリケーションは実サーバーが接続している個別の VIP またはポートにバインドします。例えば、arptables_jf
メソッドの使用により、Apache HTTP Server の複数のインスタンスはシステム上の異なる VIP に明示的にバインドして実行することが可能になります。また、arptables_jf
の使用は、iptables
オプションよりもパフォーマンスで大きな利点があります。
しかし、
arptables_jf
メソッドを使うと、標準の Red Hat Enterprise Linux システム設定ツールを使用して起動時に VIP を開始する設定ができません。
それぞれの仮想 IP アドレスの ARP 要求を無視するように実サーバーを設定するには、以下の手順を実行します。
- 実サーバー上で仮想 IP アドレス用に ARP テーブルのエントリを作成します (real_ip とは実サーバーとの通信にディレクタが使用する IP のこと。多くの場合、
eth0
にバインドされた IP)。arptables -A IN -d <virtual_ip> -j DROP arptables -A OUT -s <virtual_ip> -j mangle --mangle-ip-s <real_ip>
これにより、仮想 IP アドレス向けのすべての ARP 要求を実サーバーが無視するようになります。また、他の方法では仮想 IP を含むことになる送信 ARP 反応を変更させて、それらがサーバーの実 IP を含むようになります。VIP の ARP 要求に反応する唯一のノードは、現在アクティブな LVS ノードです。 - これが実サーバー上で完了したら、実サーバー上で以下のコマンドを入力して ARP テーブルのエントリを保存します。
service arptables_jf save
chkconfig --level 2345 arptables_jf on
chkconfig
コマンドは、ネットワーク開始前にシステムが起動時に arptables 設定をリロードするようにします。 ifconfig
を使用して実サーバー上で仮想 IP アドレスを設定し、 IP エイリアスを作成します。例えば#
ifconfig eth0:1 192.168.76.24 netmask 255.255.252.0 broadcast 192.168.79.255 up
またはiproute2
のユーティリティip
を使用します。 例えば#
ip addr add 192.168.76.24 dev eth0
ここまでの記述にあるように、仮想 IP アドレスは Red Hat システム設定ツールを使用して起動時に開始するように設定することはできません。この問題を回避する方法の 1 つは/etc/rc.d/rc.local
内にこれらのコマンドを配置することです。- ダイレクトルーティング用に Piranha を設定します。詳細情報は 4章Piranha Configuration Tool を使った Load Balancer Add-Onの設定 を参照してください。