Red Hat Training

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

第1章 Load Balancer Add-On の概要

注記

Red Hat Enterprise Linux 6.6 からは Piranha 負荷分散機能ソフトウェアに加え HAProxy および keepalived についても対応するようになります。 HAProxy および keepalived で Red Hat Enterprise Linux を設定する方法については Red Hat Enterprise Linux 7 のロードバランサーの管理に関するドキュメントを参照してください。
複数の実サーバー全体の IP 負荷を分散させる目的で Linux Virtual Server (LVS) を提供するソフトウェアコンポーネントをひとつにまとめたセットが Load Balancer Add-On です。アクティブ LVS ルーター および バックアップ LVS ルーター で稼働します。アクティブ LVS ルーターには以下の 2 つの役割があります。
  • 複数の実サーバー全体の負荷分散
  • それぞれの実サーバー上にあるサービスの整合性チェック
バックアップ LVS ルーターはアクティブ LVS ルーターを監視し、アクティブ LVS ルーターに障害が発生した場合に引き継ぎを行います。
本章では以下のセクションに沿って Load Balancer Add-On の各コンポーネントおよび機能の概要を説明していきます。

1.1. Load Balancer Add-On の基本的な設定

二層から成るシンプルな設定を 図1.1「Load Balancer Add-On の基本的な設定」 に示します。第一層はアクティブ LVS ルーターが 1 つ、バックアップ LVS ルーターが 1 つで構成されています。各 LVS ルーターには、インターネット用インターフェースとプライベートネットワーク用インターフェースの 2 種類のネットワークインターフェースがあり、2 つのネットワーク間のトラフィックを規制します。この例では、アクティブルーターが Network Address Translation (NAT) を使ってインターネットからのトラフィックを第二層にある複数の実サーバー (サーバー数は状況に応じて可変) にダイレクトすると、実サーバーが必要とされるサービスを提供します。つまり、この例の実サーバーは専用のプライベートネットワークセグメントに接続されているため、パブリックのトラフィックはすべてアクティブ LVS ルーターを経由することになります。外部からはサーバーは一つのエンティティに見えます。
Load Balancer Add-On の基本的な設定

図1.1 Load Balancer Add-On の基本的な設定

LVS ルーターに届いたサービス要求は 仮想 IP アドレス (VIP) に送信されます。VIP とはサイト管理者が www.example.com など完全修飾ドメイン名を関連付けている公的にルーティングが可能なアドレスのため、1 仮想サーバー または複数の 仮想サーバー に割り当てられます。仮想サーバーとは特定の仮想 IP でリッスンするよう設定されたサービスになります。Piranha Configuration Tool を使って仮想サーバーを設定する方法については VIRTUAL SERVERS を参照してください。フェイルオーバーの際には VIP アドレスは次の LVS ルーターに移行されるため、引き続き利用することができます (別名: フローティング IP アドレス)。
LVS ルーターをインターネットに接続させるデバイスに複数の VIP アドレスをエイリアスさせることができます。例えば、インターネットに eth0 を接続する場合、複数の仮想サーバーを eth0:1 にエイリアスすることができます。または、各仮想サーバーをサービスごと異なるデバイスに関連付けることもできます。例えば、HTTP トラフィックは eth0:1 で FTP トラフィックは eth0:2 でそれぞれ処理することができます。
アクティブにできるのは一度にひとつの LVS ルーターのみです。アクティブルーターの役割は、仮想 IP アドレスからのサービス要求を実サーバーにリダイレクトすることです。リダイレクトは対応している 8 種類の負荷分散アルゴリズムのいずれかをベースとします。これについては 「Load Balancer Add-On スケジューリング機能の概要」 で説明しています。
アクティブルーターはシンプルな send/expect のスクリプト を使って実サーバー上の特定サービスの全体的な健全性を動的に監視します。HTTPS や SSL といった動的データを必要とするサービスの健全性確認を補助する目的で、外部の実行可能ファイルを管理者側で呼び出すこともできます。実サーバー上のサービスが正常に機能していない場合、アクティブルーターは正常な動作に戻るまでそのサーバーへのジョブの送信を停止します。
予備システムの役割を果たすのがバックアップルーターです。LVS ルーターはプライマリーの外部パブリックインターフェースを使って定期的にハートビートメッセージを交換、またフェイルオーバーの際はプライベートインターフェースを使用します。バックアップノード側が想定している間隔でハートビートメッセージを受信できなかった場合、フェイルオーバーを開始してアクティブルーターの役割を引き継ぎます。フェイルオーバー時、障害が発生したルーターで提供していた VIP アドレスを引き継ぐため ARP スプーフィング と呼ばれる技術を使用します。バックアップ LVS ルーターにより障害の発生したノード宛てに送信される IP パケットの宛先はバックアップ LVS ルーターであると通知されます。障害が発生したノードがアクティブに戻ると、バックアップノードは再びホットバックアップの役割を引き継ぐことになります。
静的な Web ページのように頻繁には変更が行われないデータを提供する場合は、実サーバー同士がノード間でデータの自動同期を行わないため、 図1.1「Load Balancer Add-On の基本的な設定」 のシンプルな二層設定が最適な設定になります。

1.1.1. 実サーバー間でのデータの複製とデータの共有

Load Balancer Add-On には実サーバー間で同一データを共有するためのビルトインコンポーネントがないため、管理側で行えるのは以下の 2 つのオプションになります。
  • 実サーバープール全体でデータを同期する
  • 共有データにアクセスするるための第三層をトポロジーに追加する
実サーバー上へのデータのアップロードやデータの変更が限られたユーザーにしか許可されないようなサーバーの場合は最初のオプションが適しています。電子商取引サイト、インターネットによる通信販売など、データの変更を多くのユーザーに許可するような設定の場合には第三層を追加するオプションの方がよいでしょう。

1.1.1.1. データを同期するよう実サーバーを設定する

実サーバーのプール全体でデータを同期させる方法はいろいろあります。例えば、Web エンジニアが任意のページに更新を加えた場合、そのページがすべてのサーバーに同時に送られるようにするシェルスクリプトを導入する、また rsync などのプログラムを使って全ノードを対象として変更が加えられたデータの複製を一定の間隔で作成することもできます。
しかし、ファイルがユーザーによって絶えずアップロードされていたり、データベースのトランザクションが発行されたりしているような過剰負荷の構成の場合、こうしたデータの同期方法では最適な動作は期待できません。負荷が高い構成の場合には 三層のトポロジー が理想的なソリューションです。