Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.4. ルーティングメソッド

Red Hat Enterprise Linux はネットワークアドレス変換 (NAT ルーティング) または Keepalived のダイレクトルーティングを使用します。これにより、利用できるハードウェアを活用し、ロードバランサーを既存のネットワークに統合する場合に柔軟性が大変高くなります。

2.4.1. NAT ルーティング

図2.3「NAT ルーティングを実装したロードバランサー」 は、ロードバランサーが NAT ルーティングを使用して、インターネットとプライベートネットワークの間で要求を移動する様子を示しています。

図2.3 NAT ルーティングを実装したロードバランサー

NAT ルーティングを実装したロードバランサー
この例では、アクティブ LVS ルーターに NIC が 2 つあります。インターネットの NIC ではリアル IP アドレスとフローティング IP アドレスが eth0 にあります。プライベートネットワークインターフェイスの NIC はリアル IP アドレスとフローティング IP アドレスが eth1 にあります。フェイルオーバーが発生すると、インターネットに向けられている仮想インターフェイスと仮想インターフェイスに向けられているプライベートネットワークが同時にバックアップ LVS ルーターへ引き継ぎされます。プライベートネットワークにあるすべての実サーバーは、NAT ルーターのフローティング IP をアクティブ LVS ルーターと通信するデフォルトのルートとして使用します。こうすることで、インターフェイスからの要求に応答する能力が維持されます。
この例では、LVS ルーターのパブリックフローティング IP アドレスとプライベート NAT フローティング IP アドレスが物理 NIC に割り当てられます。フローティング IP アドレスを LVS ルーターノード上のそれぞれの物理デバイスに関連付けることは可能ですが、3 つ以上の NIC を使用する必要はありません。
このトポロジーを使うと、アクティブ LVS ルーターは要求を受信して適切なサーバーにルーティングします。実サーバーはその要求を処理してパケットを LVS ルーターに返します。LVS ルーターはネットワークアドレス変換を使用してパケット内の実サーバーのアドレスを LVS ルーターのパブリック VIP アドレスに置き換えます。実サーバーの本当の IP アドレスは要求を行っているクライアントからは見えないよう隠しているため、IP マスカレード と呼ばれます。
NAT ルーティングを使用する場合は、実サーバーにするマシンの種類や稼働させるオペレーティングシステムの種類に制限はありません。ただし、発信要求および着信要求のいずれも LVS ルーターで処理しなければならないため、大規模なクラスター導入の場合には LVS ルーターがボトルネックとなる場合があります。
ipvs モジュールは、iptables および ip6tables NAT とは独立した独自の NAT ルーティングを使用します。これにより、実サーバーが /etc/keepalived/keepalived.conf ファイルで DR ではなく NAT に対して設定されている場合に、IPv4 と IPv6 NAT の両方に対応します。

2.4.2. ダイレクトルーティング

ダイレクトルーティングを使用するロードバランサー設定を構築すると、他のロードバランサーネットワーキングトポロジーよりもパフォーマンス上のメリットが大きくなります。ダイレクトルーティングでは、実サーバーは要求元のユーザーに対して直接パケットを処理およびルーティングでき、すべての送信パケットを LVS ルーター経由で渡しません。ダイレクトルーティングでは、LVS ルーターが受信パケットのみを処理するよう制限し、ネットワークパフォーマンスの問題が発生する可能性を低減します。

図2.4 ダイレクトルーティングで実装されたロードバランサー

ダイレクトルーティングで実装されたロードバランサー
典型的なダイレクトルーティングのロードバランサー設定では、LVS ルーターは仮想 IP (VIP) 経由で受信サーバー要求を受け取り、スケジューリングアルゴリズムを使用して要求を実サーバーへルーティングします。実サーバーは要求を処理し、LVS ルーターを通さずに応答を直接クライアントに送信します。ネットワークの負荷が高い状態で LVS ルーターが送信パッケージを実サーバーからクライアントへルーティングするとボトルネックになりますが、 このルーティング方法では LVS ルーターがこのような処理をしなくても実サーバーを追加できるため、スケーラビリティーが向上します。

2.4.2.1. ダイレクトルーティングと ARP 制限

ロードバランサーでダイレクトルーティングを使用する利点は多くありますが、制限もあります。最も一般的な問題は、アドレス解決プロトコル (ARP) に関する問題です。
インターフェイス上のクライアントは要求を IP アドレスに送信します。ネットワークルーターは ARP を使用して IP アドレスをマシンの MAC アドレスに関連付けることで要求を宛先に送信します。ARP 要求がネットワークに接続されているすべてのマシンにブロードキャストされ、IP アドレスと MAC アドレスの正しい組み合わせを持つマシンがパケットを受け取ることになります。IP と MAC の関連性は ARP キャッシュに保存され、定期的に消去と再保存が行われます (通常 15 分ごと)。
ダイレクトルーティングのロードバランサー設定における ARP 要求の問題は、IP アドレスへのクライアント要求が処理されるためにはその要求が MAC アドレスに関連付けされている必要があるため、ロードバランサーシステムの仮想 IP アドレスも MAC に関連付けされている必要があることです。しかし、LVS ルーターと実サーバーは同じ VIP を持っているため、ARP 要求はその VIP に関連付けられているすべてのマシンへブロードキャストされます。これにより、VIP が直接実サーバーの 1 つに関連付けられて直接要求を処理する問題や、完全に LVS ルーターを迂回してロードバランサー設定の目的に反する問題など、複数の問題が発生することがあります。
この問題を解決するには、着信要求が実サーバーの 1 つではなく、常に LVS ルーターに送信されるようにしてください。これには、ARP 要求または IP パケットをフィルターします。ARP のフィルタリングは arptables ユーティリティーを使用して行うことができ、IP パケットは iptables または firewalld を使用してフィルタリングできます。この 2 つの方法の違いは以下のとおりです。
  • ARP のフィルター方法では、実サーバーに到達する要求をブロックします。これにより、ARP が実サーバーで VIP と関連することを防ぎ、アクティブな仮想サーバーが MAC アドレスで応答するようにします。
  • IP パケットのフィルター方法では、他の IP アドレスでパケットを実サーバーにルーティングできます。最初から実サーバーで VIP を設定しないと、ARP の問題を完全に回避できます。