1.8. Linux 仮想サーバー

Linux Virtual Server (LVS) は実サーバーのセット内での IP ロードのバランスを とるための統合ソフトウェアコンポーネントセットです。 LVS は同一設定の二つの コンピュータペア上で稼働します。その1つはアクティブな LVS router として、 もう1つは バックアップの LVS router として機能します。アクティブな LVS router は 以下の二つの役割を持ちます:
  • 実サーバー全部に渡ってロードのバランスを取る
  • それぞれの実サーバー上のサービスの統合性を確認する
バックアップ LVS router はアクティブな LVS router を監視して、アクティブな LVS router が 失敗した場合に入れ替わります。
図1.19「Components of a Running LVS Cluster」 provides an overview of the LVS components and their interrelationship.
Components of a Running LVS Cluster

図1.19 Components of a Running LVS Cluster

pulse デーモンはアクティブとバックアップの両方の LVS router で稼働します。 バックアップ LVS router 上では pulse は、アクティブ router の公共 インターフェイスに ハートビート(heartbeat) を送信し、アクティブ router が 正常に機能していることを確認します。アクティブ LVS router 上では pulselvs デーモンを開始して、バックアップ LVS router からの ハートビート のクエリに反応します。
開始されると、lvs デーモンは ipvsadm ユーティリティを コールしてカーネル内の IPVS (IP Virtual Server) routing 表の設定と管理をします。そしてそれぞれの 実サーバー上で設定済みの各仮想サーバーの為の nanny プロセスを開始します。 それぞれの nanny プロセスは1つの実サーバー上で設定済のサービスの状態を チェックし、lvs デーモンに対し、その実サーバー上のサービスが正常であるかどうかを 伝えます。異常動作が検知された場合、lvs デーモンは、IPVS routing 表から その実サーバーを排除するように ipvsadm に指示します。
バックアップ LVS router がアクティブ LVS router から反応を受理しない場合、バックアップ LVS router は send_arp をコールして、全ての仮想 IP アドレスを、バックアップ LVS router の NIC ハードウェアアドレス(MAC アドレス)に再割り当てをして、コマンドを 公共とプライベートの両方のネットワークインターフェイスを通じてアクティブ LVS router に送信して アクティブ LVS router 上の lvs デーモンをシャットダウンし、更に バックアップ LVS router 上の lvs デーモンを開始して設定済仮想サーバーからの 要求を受理することにより、フェイルオーバーに取り掛かります。
ホスト化されたサービスへアクセスしている外部ユーザー(例えば、ウェブサイトやデータベース アプリケーション)には、LVS は 1つのサーバーと見えます。しかし、ユーザーは実際には、 LVS router の背後にある実サーバー群にアクセスしていることになります。
LVS 内には、実サーバー間でデータを共有するための組み込みコンポーネントがない為、 二つのオプションがあります:
  • 実サーバー全体に渡ってデータの同期を取る。
  • 共有データアクセス用のトポロジーへ第三レイヤーを追加する。
一番目のオプションは、多数のユーザーが実サーバー上でアップロードしたり、データを変更したりする のを許可しないサーバーに適切なものです。実サーバーが多数のユーザーに、e-commerce ウェブサイトなどの データを修正することを許可する場合は、第三レイヤーの追加が望まれます。
実サーバー間でデータを同期化する方法は沢山あります。例えば、シェルスクリプトを使用して 更新したウェブページを実サーバーに同時に送ることができます。また、rsync などの プログラムを使用して、決まった間隔で全てのノードに渡って変更データを複製することもできます。しかし、 ユーザーが頻繁にファイルをアップロードしたりデータベーストランザクションを発行したりする環境では、 スクリプトの使用、又はデータ同期化用の rsync コマンドは効率的に機能しません。 そのため、多くのアップロードやデータベーストランザクションや同様のトラフィックを持つ実サーバーには、 three-tiered トポロジー がデータ同期化に最適となります。

1.8.1. Two-Tier LVS Topology

図1.20「Two-Tier LVS Topology」 shows a simple LVS configuration consisting of two tiers: LVS routers and real servers. The LVS-router tier consists of one active LVS router and one backup LVS router. The real-server tier consists of real servers connected to the private network. Each LVS router has two network interfaces: one connected to a public network (Internet) and one connected to a private network. A network interface connected to each network allows the LVS routers to regulate traffic between clients on the public network and the real servers on the private network. In 図1.20「Two-Tier LVS Topology」, the active LVS router uses Network Address Translation (NAT) to direct traffic from the public network to real servers on the private network, which in turn provide services as requested. The real servers pass all public traffic through the active LVS router. From the perspective of clients on the public network, the LVS router appears as one entity.
Two-Tier LVS Topology

図1.20 Two-Tier LVS Topology

LVS router に到着するサービス要求は virtual IP、いわゆる VIP アドレスへ 届けられます。これは、サイトの管理者が www.example.com などの 完全修飾ドメイン名と関連づける公共的に巡回可能なアドレスで、1つ又は複数の 仮想サーバー[1] に割り当てられます。VIP アドレスは フェイルオーバー中に 1つの LVS router から他の LVS router に移行します。その方法で、浮動 IP アドレス と して知られる VIP アドレスの存在を維持することに注意して下さい。
VIP アドレスは LVS router を公共ネットワークに接続するのと同じデバイスにエイリアス名を付ける ことができます。例えば、eth0 がインターネットに接続されている場合、複数の仮想サーバーが eth0:1 にエイリアス化することができます。別の方法としては、各仮想サーバーは サービス毎に別のデバイスと関連付けすることが出来ます。例えば、HTTP トラフィックは eth0:1 上で、そして FTP トラフィックは eth0:2 上で処理することができます。
一度に1つの LVS router のみがアクティブになることができます。アクティブ LVS router の 役目は、仮想 IP アドレスから実サーバーへサービス要求を転送することです。この転送は八つの ロードバランシングアルゴリズムの1つを基にしています:
  • ラウンドロビンスケジューリング(Round-Robin Scheduling) — 各要求を順番に実サーバー群に 配布していきます。 このアルゴリズムを使用すると、全ての実サーバーが、容量やロードに関係無く同等に 取り扱われることになります。
  • 能力別ラウンドロビンスケジューリング(Weighted Round-Robin Scheduling )— 各要求を順番に実サーバー群に配布して行きますが、より大きな能力を持つサーバーにより 多くの仕事を提出します。この能力は、先ずユーザー割り当ての能力値で表示され、その後 動的なロード情報によって上下に調節されます。これは、サーバー群内に決定的な能力の差が存在する場合に適切な選択となります。しかし、要求のロードが劇的に変化した場合、大能力として 割り当てられたサーバーがその公平な要求分担以上に反応する可能性があります。
  • 最低稼働機接続 (Least-Connection)— より少ないアクティブ接続を持つ実サーバーに、より多くの要求を分配します。これは動的スケジューリングアルゴリズムの一種で、要求ロードに多くの変動がある場合に より良い選択となるものです。各サーバーノードがおよそ同等の能力を持つ実サーバー群に最適です。 実サーバーが別々の能力を持っている場合は、能力別最低稼働機接続スケジューリング(weighted least-connection scheduling)が最適な選択となります。
  • 能力別最低稼働機接続スケジューリング(weighted least-connection scheduling)(デフォルト) — 能力と比較して少ないアクティブ接続を持つサーバーにより多くの要求を分配します。この能力はユーザー設定の分別により表示されており、動的ロード情報によって上下に調節されます。能力分別の追加により、このアルゴリズムは 実サーバー群が異なる能力のハードウェアを含んでいる場合に理想的になります。
  • ローカリティベース最低稼働機接続スケジューリング(Locality-Based Least-Connection Scheduling )— 目的地 IP に対して少ないアクティブ接続を持つサーバーに、より多くの要求を分配します。このアルゴリズムは プロキシキャッシュサーバークラスタ内で使用するためのものです。これは目的地サーバーが能力以上に 稼働していないで、そのロードの半分しか担当していないサーバーがない場合に その IP アドレス用のパケットをそのアドレスのサーバーに回送します。その場合、 IP アドレス は最低稼働の実サーバーに割り当てられます。
  • 複製スケジューリング付きローカリティベース最低稼働機接続スケジューリング (Locality-Based Least-Connection Scheduling with Replication Scheduling )— 目的地 IP に対して少ないアクティブ接続を持つサーバーに、より多くの要求を分配します。この アルゴリズムもプロキシキャッシュサーバークラスタ内で使用するためのものです。ローカリティベース 最低稼働機接続スケジューリングとの相異点は、目的地 IP アドレスを実サーバーノードのサブセットに マッピングすることです。要求は最低数の接続を持つサブセット内のサーバーへ回送されます。この 目的地 IP の全てのノードがそれらの能力以上に稼働している場合、実サーバー群全体から最低接続を持つ 実サーバーをその目的地 IP 用の実サーバーのサブセットへ追加することにより、目的地 IPアドレス用に新規の サーバーを複製します。そして実サーバーのサブセットからは最大ロードを持つノードを排除して過大複製を 防止します。
  • ソースハッシュスケジューリング(Source Hash Scheduling)— 静的ハッシュ表内の ソース IP を観察して実サーバー群に要求を分配します。このアルゴリズムは複数ファイアウォールを 持つ LVS router 用のものです。
また、アクティブ LVS router は、簡単な send/expect スクリプト を通じて 実サーバー上の特定サービスの総合健全性を動的に監視します。HTTPS や SSL などの動的データを 必要とするサービスの健全性チェックを手助けするためには、外部の実行ファイルを呼び出すことも できます。実サーバー上のサービスが異常稼働している場合、アクティブ LVS router はそれが 正常稼働に戻るまでそのサーバーへのジョブ回送を停止します。
バックアップ LVS router はスタンバイシステムの役目を果たします。LVS router は定期的に 主要外部公共インターフェイスを通じて、又はフェイルオーバーの状態ではプライベート インターフェイスを通じてハートビートを交信します。バックアップ LVS router が指定時間内に ハートビートメッセージを受信しなかった場合は、フェイルオーバーを開始してアクティブ LVS router の 役割を受け持ちます。フェイルオーバーの期間中、バックアップ LVS router は、ARP spoofing として知られる技術を使用して故障した router によってサービスされていた VIP アドレスを引き受けます。ARP spoofing では、バックアップ LVS router が 故障ノード宛になっている IP パケット用の目的地であると自己宣言します。故障ノードがアクティブな サービスを回復すると、バックアップ LVS router は再度、バックアップの役割に戻ります。
The simple, two-tier configuration in 図1.20「Two-Tier LVS Topology」 is suited best for clusters serving data that does not change very frequently — such as static web pages — because the individual real servers do not automatically synchronize data among themselves.


[1] 仮想サーバーとは、特定の仮想 IP 上でリッスンするように設定された サービスです。