1.1 アプリケーションサーバーのクラスター化について

クラスターとは、同時に実行されて単一のシステムのような動作をするアプリケーションサーバーインスタンスのグループのことです。クラスターを使用すると、可用性が高まると共に、ロードバランシングが可能になります。クラスター内では、同じコンピューター上で複数のサーバーインスタンスを実行(垂直クラスター)できるほか、別々のコンピューターに配置(水平クラスター)したり、水平クラスターと垂直クラスターの両方を組み合わせたりすることもできます。クラスター化によって、クライアントの作業は、単一のアプリケーションサーバーで処理する代わりに、複数のノードに分散させることができます。

クラスター化設定では、アプリケーションサーバーインスタンスはクラスターのサーバーメンバーであり、すべてに同一のアプリケーションコンポーネントをデプロイする必要があります。ただし、設定済みのアプリケーションを除き、クラスターメンバーは、その他の設定パラメーターを共有する必要はありません。例えば、すべて同じバージョンのアプリケーションサーバーを実行していると仮定すれば、1 つのインスタンスが別のコンピューターにある状態で、1 台のコンピューターで複数のサーバーインスタンスをクラスター化することができます。

クラスター化には、次のような利点があります。どの利点が得られるかは、クラスター化の実装方法によって決まります。

  • フェイルオーバー

  • 負荷分散

  • スケーラビリティ

1.1.1 フェイルオーバー

フェイルオーバーを使用すると、1 つ以上のアプリケーションサーバーインスタンスで、エラーが発生したアプリケーションサーバーインスタンスのバックアップとしてタスクの処理を再開することにより、別のアプリケーションサーバーで処理を続行することができます。ただし、トランザクション中にアプリケーションサーバーでエラーが発生した場合は、バックアップアプリケーションサーバーではエラーが発生したインスタンスの状態が回復されません。例えば、ユーザーがフォームにデータを入力したときにサーバーでエラーが発生した場合は、データの再入力が必要な場合があります。

1.1.2 負荷分散

ロードバランシングは、作業を複数のシステムに分散させ、1 つのデバイスに過度の負担がかからないようにするための技術です。1 台のサーバーに処理が集中したり、過度な負荷がかかり始めた場合、容量に余裕のある別のサーバーに要求が転送されます。

1.1.2.1 アプリケーションサーバーのロードバランシング

アプリケーションサーバーのロードバランシングは、複数のアプリケーションサーバー間で負荷を管理する際に役立ちます。アプリケーションサーバーは、クラスターのメンバーに割り当てられている一連のサーバーの重みに基づいてバランス良くルーティングを分配する、重み付けラウンドロビンルーティングポリシーを使用するように設定できます。クラスター内のすべてのサーバーを、重みが同じになるように設定すると、すべてのサーバーがほぼ同数の要求を受信するように負荷が分散されます。一部のサーバーの重みを大きくすると、重みの大きいサーバーに、重みの小さいサーバーより多くの要求が送信されます。

優先するルーティングを設定すると、例えば、該当するノード上のクラスターメンバーのみを選択(ラウンドロビン重み付け方法を使用)し、リモートノード上のクラスターメンバーはローカルサーバーが使用できない場合にのみ選択することができます。アプリケーションサーバーのロードバランシングは、複数の層の間でバランスを取る必要がある場合に最適です。

1.1.2.2 Web サーバーのロードバランシング

Web サーバーのロードバランシングは、要求をキューに入れたり制限したりする場合に便利です。Apache HTTP サーバーの場合、ロードバランシングに最も使用される方法は、ラウンドロビン DNS です。

ラウンドロビン DNS は、比較的単純なロードバランシング方法です。ドメインネームシステム(DNS)サーバーがアドレス解決用の名前を提供し、URL にホスト名が含まれているときは常に DNS サーバーが使用されます。ラウンドロビン DNS サーバーでは、1 つのホスト名を複数の IP アドレスに解決できます。つまり、1 つの URL(ホスト名を含む)に対する要求が、実際には複数の Web サーバーを参照します。クライアントでは、ホスト名の解決を要求するものの、実際には複数の異なる IP アドレスを受信するので、複数の Web サーバーに負荷を分散します。単純な設定では、ラウンドロビン DNS サーバーは、使用可能なサーバーのリストを循環します。

1.1.3 スケーラビリティと可用性

クラスター内でのスケーラビリティとは、管理者が、サービスを中断したり悪影響を与えたりすることなく、要求を満たすようにアプリケーションの容量を動的に拡大できるということです。クラスターでは、管理者は、メモリなどのコンポーネントをアップグレードするためにクラスターからノードを削除したり、クラスター自体をダウンさせずにクラスターにノードを追加したりできます。