サーバーを冗長化する手段には様々なものがある。サービスレベルの冗長化は、サーバー管理者が担当することが多いはずだ。ネットワーク管理者として考えるべき冗長化は、負荷分散装置とNIC(Network Interface Card)の冗長化を使ったものである。

複数サーバーに処理を割り振る「負荷分散装置」

 インターネットで公開しているWebサービスは、1台のサーバーだけで運用することはあまりない。一般的に、複数のサーバーで一つのサービスを提供する。そこでよく使われるのが「負荷分散装置」による冗長化だ。1台がダウンしても、ほかのサーバーでサービスが継続できる。

図3-1●負荷分散装置による冗長化
図3-1●負荷分散装置による冗長化
インターネットで一般に公開しているサーバーを冗長化した事例。複数のサーバーを使うことで、Webサイトで提供しているサービスが停止しないようにする。負荷分散装置が仮想IPアドレスを持つのが仕組みのキモだ。
[画像のクリックで拡大表示]
図3-2●負荷分散のアルゴリズムとセッション維持の情報
図3-2●負荷分散のアルゴリズムとセッション維持の情報
負荷分散のアルゴリズムは3種類に大別できる。負荷分散をしつつセッションを維持するための情報は主に4種類。
[画像のクリックで拡大表示]

 図3-1は負荷分散装置を用いた冗長化の概要だ。ポイントは負荷分散装置が持つ仮想IPアドレス。これが同一のサービスを提供するWebサーバー(サーバーA、B、C)を代表するIPアドレスだ。クライアントパソコンは仮想IPアドレスに対し、サーバーへのアクセス要求のフレームを送る。負荷分散装置は受け取ったフレームを、サーバーA~Cのどれかに割り振って処理をさせる。その際にあて先IPアドレスを、仮想IPアドレスからサーバーの実IPアドレスにして送り出す。

 では、負荷分散装置は何を判断基準にしてサーバーに処理を振り分けるのか(図3-2上)。処理を振り分けるルールを「負荷分散のアルゴリズム」という。このアルゴリズムはTCPのコネクションなどもかかわるため、ネットワーク管理者は知っておくべきことである。アルゴリズムは三つの手法に大別できる。

 (1)「順番に分散」は代表的な手法で、よく使われるのが「ラウンドロビン」と「重み付けラウンドロビン」だ。ラウンドロビンは振り分けるサーバーを「A→B→C→A→B→C」と順繰りにする手法。重み付けラウンドロビンは、振り分ける割合を決めておく手法だ。例えばAを4割、Bを4割、Cを2割とすると、「A→B→A→B→C」といった順になったりする。

 (2)「通信の状態で分散」は、リアルタイムに処理の振り分けを判断する手法。例えば各サーバーが処理しているコネクション数を監視し、コネクション数が少ないサーバーに処理を振り分ける。(3)「サーバーのリソースで分散」もリアルタイムに判断する手法だ。レスポンス時間の短いサーバーを優先したりする。

 負荷分散装置による冗長化で注意したいのが、クライアントパソコンとサーバーとの間でのセッション維持だ。クライアントからの要求を負荷分散のアルゴリズムだけでサーバーに振り分けると、クライアントとサーバーの間のセッションが切れてしまう。そこで負荷分散装置は、Cookieなどでセッションを維持する(図3-2下)。

 負荷分散装置はアプライアンスで提供されているが、Linuxで負荷分散を実現するLVS(Linux Virtual Server)というオープンソースのソフトウエアで自作する管理者も多い。