LVSとは
LVSとは、Linux上でLayer4負荷分散装置と同様の機能を実現するためのソフトウェアである。Linux Virtual Serverの略称で、負荷分散装置に求められる基本的な機能を提供する。Linux Virtual Server Projectという開発プロジェクトが開発し管理しており、最近ではLinuxカーネルにも正式に取り入られている。
LVSはIPVS(IP Virtual Server)とipvsadmユーティリティから構成されている。IPVSはIPVSNetfilterモジュールというカーネルモジュールとして提供されており、Layer4負荷分散機能を実現する。ipvsadmはユーザがIPVSを管理するためのインタフェースを提供するユーティリティである。LVSの機能のうち、IVPSNetfilterモジュールは、Linuxカーネルに組み込まれているが、ipvsadmを利用するためにはパッケージのインストールが必要となる。
LVSのほとんど全ての設定はipvsadmコマンドで行う。LVSの設定は一部を除いて、システム再起動を行うと消えてしまう。そのため、システム起動時にLVSを起動する必要がある場合、設定ファイルを作成し、システム起動時に設定ファイルの内容を反映させる必要がある。ただし、LVSが使用するIPVSはネットワークインタフェースが有効になった後に設定を行う必要があるため、システム起動時の優先度をnetworkサービスより後に調整する必要がある。
LVSと連携するソフトウェア
LVSでは、実サーバのサービス提供状態を把握することはできない。そのため、オープンソースソフトウェア(OSS)の高可用性クラスタリングソフトHeartbeatに付属しているldirectordや、keepalivedなどと組み合わせて実サーバのサービス監視を行うのが一般的である。
また、LVSサーバ自身に障害が発生した場合には全てのサービスが停止してしまう可能性がある。LVSとkeepalivedやHeartbeatによる冗長化を組み合わせることで、より障害に強いシステムを構築することができる。
keepalived
keepalivedは、オープンソースのサーバ冗長化のためのソフトウェアである。ルータなどで利用されるVRRPを使って、仮想IPアドレスを管理することができる。また、LVSが負荷を分散する実サーバを監視して、正常に動作しているサーバを負荷分散対象に追加したり、障害が発生したサーバを負荷分散対象から切り離したりすることができる。
ldirectord
Heartbeatに付属するldirectordは、実サーバを動的に追加、削除する機能を持っている。サービス監視にも対応しており、さまざまなプロトコルの稼動状況を監視することができる。これにより、実サーバのサービスが提供できなくなった場合、リクエストを割り振らないようにすることができる。
ipvsadmの操作
ipvsadmには大きく分けて以下の3つの種類の操作がある。
- 負荷分散サービス(仮想サービス)の設定
- 実サーバの設定
- 仮想サーバ全体の管理
負荷分散サービス(仮想サービス)の設定
LVSで構成したクラスタサーバ全体は、一つのコンピュータのように見える。LVSでは、これを仮想サーバと呼ぶ。また、仮想サーバには、複数の仮想サービスを登録することができる。
仮想サービスの登録では、IPアドレス、ポート番号、プロトコル(仮想サービス)などを設定する。また、仮想サービスを実際に処理する実サーバに対してどのように割り振るかというスケジュール方法も設定する必要がある。
実サーバの設定
仮想サービスの割り振り先となる個々のサーバ(実サーバ)にも、リクエストを処理するための設定を行う。
仮想サーバ全体の管理
ipvsadmで設定されている値を表示したり、設定を保存したりするなどの管理を行う。
負荷分散を実現する方法
LVSを使用した負荷分散を行うためのサーバ切り替え方法は以下がある。これらの方法は、用途に合わせて選択する必要がある。
- NATによる切り替え
- ダイレクトルーティングによる切り替え
- IPトンネリングによる切り替え
LVSのNATによる負荷分散
LVSをルータ上に配置する構成である。LVSは、仮想IPアドレスでリクエストを受けとると、そのパケットの宛先アドレスを変換して実サーバに転送する。実サーバは、自サーバに送られてきた通常のリクエストとして受け取る。最も一般的な構成方法である。
クライアントからサーバへの通信も、サーバからクライアントへの通信もLVSを搭載した負荷分散サーバを通過することになる。そのため、負荷分散サーバに通信が集中しやすく、負荷分散装置の性能がボトルネックになりやすい。
ダイレクトルーティングによる切り替え
LVSを搭載した負荷分散サーバが、仮想IPアドレスで受け取ったパケットを、そのまま実サーバのMACアドレスへ転送する構成である。Layer2のレベルで動作する。実サーバへのリクエストは、仮想IPアドレスを宛先にして届く。そのため、実サーバには、この仮想IPアドレスでリクエストを受け取り、応答を返すための特別な設定が必要となるのが欠点である。
この構成では、クライアントからサーバへの通信は負荷分散サーバを通過するが、サーバからクライアントへの応答パケットはダイレクトに返送される。そのため、Webサーバや動画配信など、クライアントからサーバへの小さなリクエストパケットに対して、大きなデータを受けとるようなサービスでも、負荷分散サーバはボトルネックになりにくいという長所がある。
IPトンネリングによる切り替え
実サーバが、負荷分散サーバとは別のネットワークにある場合には、NAT型もダイレクトルーティング型も利用できない。そのような場合には、IPトンネルを作り、リクエストを転送する。実サーバが地理的に分散している場合に利用する。
LVSの管理GUI
LVSを利用すれば、専用の負荷分散装置がなくても、負荷分散を行うことができる。しかし、keepalivedやldirectordでは、仮想サーバや実サーバを設定ファイルで管理するため、管理のハードルが高い。また、設定を失敗すると、負荷分散処理を止めてしまうリスクもある。そこで、LVSを導入する場合には、同時に管理GUIを導入するのが望ましい。
オープンソースソフトウェアのILUKAは、keepalivedとLVSを組み合わせて負荷分散サーバを実現するための管理GUIである。仮想サーバや実サーバの管理をWEBから行うことができる。
デージーネットの取り組み
デージーネットでは、コストや機能的な制約から、クラウドサービスで用意された負荷分散機能を利用できない場合に、LVSを使った負荷分散サーバを提案している。以前は、Heartbeatとldirectordを利用して負荷分散サーバを構築していた。しかし、最近はkeepalivedを利用して負荷分散サーバを冗長構成で構築することが多い。
デージーネットは、冗長構成の負荷分散サーバを利用しやすくするためにILUKAを開発し、オープンソースソフトウェアとして提供している。デージーネットでは、ILUKAの商用サポートも行っている。
【カテゴリ】:クラスタ  オープンソースソフトウェア  
【Webセミナー】自社でOSSを採用しよう!今更聞けないOSSの基本セミナー
日程: | 11月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | OSSを導入したいけど、どこから手をつければいいかわからない方必見! |
ご興味のあるかたはぜひご参加ください。 |