9.3. LVSスケジュールの概要

LVSクラスタを使用する利点の1つは、リアルサーバープールでの柔軟なIPレベルの負荷分散を実現する機能です。この柔軟性は、管理者がクラスタの設定時に選択することができる、多様なスケジュールアルゴリズムによってもたらされます。LVSの負荷分散は、DNSの階層構造の性質とクライアントマシンによるキャッシュにより、負荷分散が機能しないことがある、ラウンドロビン DNSなどの柔軟性の少ない方法より、有利です。また、LVSルータで採用している低レベルのフィルター処理には、アプリケーションレベルの要求転送よりも、ネットワークパケットレベルの負荷を分散することにより、処理上のオーバーヘッドが最少になりスケーラビリティを より向上させることができるという利点があります。

スケジュール機能を使用すると、アクティブルータがリアルサーバーのアクティビティと、管理者が付加的に指定した負荷係数を、サービス要求をルーティングする際に計算に入れることができます。このスケジュール構成により、多様なハードウェアとソフトウェアの組み合わせを使用するリアルサーバーのグループを作成した上で、アクティブルータが各リアルサーバーの負荷を均等にすることができます。

LVSクラスタのスケジュール機構は、IP Virtual ServerモジュールまたはIPVSモジュールと呼ばれるカーネルパッチの集合体により提供されています。これらのモジュールは、単一のIPアドレスに接続している複数のサーバーを適切に機能させるよう設計された第4層 (L4)トランスポート層スイッチングを使用可能にします。

リアルサーバーに対するパケットのトラックとルーティングを効果的に行うために、IPVSはカーネル内にはIPVSテーブルを構築します。このテーブルは、仮想サーバーアドレスからの要求をプール内のリアルサーバーにリダイレクトし、 戻すためにアクティブLVSルータによって使用されます。IPVSテーブルはipvsadmというユーティリティによって定期的に更新され、クラスタメンバーのアベイラビリティに応じてメンバーの追加と削除が行われます。

9.3.1. スケジュールアルゴリズム

IPVSテーブルの形式は、仮想サーバー用に管理者が選択したスケジュールアルゴリズムによって変わります。クラスタ化できるサービスとそれらのサービスのスケジュール機能という2種類のサービスの柔軟性を最大にするために、Red Hat Enterprise Linuxには、以下に示すスケジュールアルゴリズムを提供しています。スケジュールアルゴリズムの指定方法については、項12.6.1を参照してください。

ラウンドロビンスケジュール

各要求をリアルサーバーのプールに順番に配信します。このアルゴリズムを使うと、すべてのリアルサーバーは処理能力や負荷に関係なく同等に扱われます。このスケジュールモデルは、ラウンドロビンDNSに似ていますが、ホストベースではなくネットワーク接続ベースであるため、より粗いものです。LVSラウンドロビンスケジュールも、キャッシュされたDNS照会が原因で生じる、負荷分散の破綻と無縁ではありません。

負荷係数型ラウンドロビンスケジュール

各要求をリアルサーバーのプールに順番に配信しますが、処理能力の高いサーバーにより多くのジョブを振り分けます。処理能力は、ユーザが指定した負荷係数で表され、動的な負荷情報によって上方または下方に調整されます。リアルサーバーの負荷係数に関する詳細は、項9.3.2を参照してください。

負荷係数型ラウンドロビンスケジュールは、プール内の特定のリアルサーバーの処理能力に大きな差がない場合に適しています。ただし、要求の負荷が劇的に変化する場合は、より負荷係数の高いサーバーがより多くの要求を処理します。

最少接続

より多くの要求を、アクティブ接続が少ないリアルサーバーに配信します。リアルサーバに対するライブ接続のトラックをIPVSテーブルを使って保持しているので、最少接続は一種の動的スケジュールアルゴリズムであり、要求の負荷が大幅に変動する場合に適しています。これは、各メンバーノードの処理能力がほとんど同じなリアルサーバプールに最適です。サーバーのグループに処理能力の違いがある場合は、負荷係数型最少接続スケジュールの方が適しています。

負荷係数型最少接続(デフォルト)

より多くの要求を、処理能力と比べてアクティブ接続の少ないサーバーに配信します。処理能力は、ユーザが指定した負荷係数で表され、動的負荷情報によって上方または下方に調整されます。負荷係数を追加することにより、このアルゴリズムは、リアルサーバープールに処理能力の異なるハードウェアがある場合に理想的なものとなっています。リアルサーバーの負荷係数に関する詳細は、項9.3.2を参照してください。

局地的な最少接続スケジュール

より多くの要求を、接続先IPと比べてアクティブ接続が少ないサーバーに配信します。このアルゴリズムは、プロキシキャッシュサーバークラスタで使用するために設計されました。IPアドレス用のパケットを、そのサーバーの処理能力を超えていて、負荷が処理能力の半分のサーバーがない限り、そのアドレス用のサーバーにルーティングします。例外処理に当てはまる場合は、負荷が最少のリアルサーバーにIPアドレスを割り当てます。

複製スケジュール付きの局地的な最少接続スケジュール

より多くの接続を、接続先IPと比べてアクティブ接続が少ないサーバーに配信します。このアルゴリズムも、プロキシキャッシュサーバークラスタで使用するために設計されました。局地的な最少接続スケジュールとは、接続先IPアドレスをリアルサーバーノードのサブセットにマッピングしている点が異なります。要求は、このサブネット内で接続数が最低のサーバーにルーティングされます。接続先IPのすべてのノードが上記の処理能力を超えている場合、リアルサーバーのプール全体から最低接続のリアルサーバーをその接続先IP用のリアルサーバーのサブセットに追加することにより、接続先IP用の新しいサーバーを複製します。続いて、負荷が最大のノードが過剰な複製を防止するためにリアルサーバーのサブセットから切断されます。

接続先に対するハッシュスケジュール

要求をリアルサーバーのプールに、静的ハッシュテーブル内の接続先IPをルックアップして配信します。プロキシキャッシュサーバークラスタで使用するために設計されました。

接続元に対するハッシュスケジュール

要求をリアルサーバーのプールに、静的ハッシュテーブル内の接続元IPをルックアップして配信します。このアルゴリズムは、複数のファイアウォールを使用するLVSルータ用に設計されました。

9.3.2. サーバーの負荷係数とスケジュール機能

LVSクラスタの管理者は、リアルサーバープール内の各ノードに負荷係数を指定することができます。この負荷係数は、負荷を監視するスケジュールアルゴリズム(負荷係数型最少接続など)によって使われる整数値であり、LVSルータが処理能力の異なるハードウェアにより均等に負荷を分散するのに役立っています。

負荷係数は、相対的な割合として機能します。たとえば、1台のリアルサーバーの負荷係数が1で、別のサーバーの負荷係数が5の場合、負荷係数が5のサーバーは、他のサーバーが1接続ずつ処理するのに対し、5接続を処理します。リアルサーバーの負荷係数のデフォルト値は1です。

負荷係数を付加することにより、リアルサーバープール内のハードウェア構成を、クラスタの負荷分散をより効率的に支援するように変更できますが、リアルサーバープールにリアルサーバーが導入された時点で、一時的に負荷分散が適切に機能しなくなり、仮想サーバーが負荷係数型最少接続を使ってスケジュールが調整されます。例えば、 リアルサーバープールに3台のサーバーがあるとします。サーバーAとサーバーBには負荷係数1が指定されていて、サーバーCには負荷係数2が指定されています。サーバーCが何らかの原因により停止した場合、サーバーAとサーバーBがその分を負って均等に配信します。しかし、サーバーCがオンライン状態に復帰すると、LVSルータはサーバーCの接続がゼロ(0)であることを検知して、サーバーAおよびサーバーBと負荷が同等になるまで、サーバーCに大量の着信要求を送ります。

このような状況を防ぐため、管理者は仮想サーバーを無活動(quiesce)サーバーにすることができます。新しいリアルサーバーノードがオンラインに接続するたびに、最少接続テーブルがゼロ(0)にリセットされるので、LVSルータはすべてのリアルサーバーがクラスタに新しく追加されたのと同じ状態で、要求をルーティングすることができます。