Sun Cluster データサービス開発ガイド (Solaris OS 版)

付録 E 非クラスタ対応のアプリケーションの要件

通常、非クラスタ対応のアプリケーションの高可用性 (HA) を実現するには、特定の要件を満たす必要があります。このような要件のリストが、「アプリケーションの適合性の分析」に示されています。この付録では、それらの要件のうち、特定のものについて詳細に説明します。

アプリケーションの高可用性を実現するには、そのリソースをリソースグループで構成します。アプリケーションのデータは、高可用性のクラスタファイルシステムに格納されます。したがって、1 つのサーバーが異常終了しても、正常に動作しているサーバーによりデータにアクセスできます。クラスタファイルシステムについては、『Sun Cluster の概念 (Solaris OS 版)』を参照してください。

ネットワーク上のクライアントがネットワークにアクセスする場合、論理ネットワーク IP アドレスは、データサービスリソースと同じリソースグループにある論理ホスト名リソースで構成されます。データサービスリソースとネットワークアドレスリソースは共にフェイルオーバーします。この場合、データサービスのネットワーククライアントは新しいホスト上のデータサービスリソースにアクセスします。

この付録の内容は次のとおりです。

多重ホストデータ

高可用性のクラスタファイルシステムのデバイスは多重ホスト化されているため、ある物理ホストがクラッシュしても、正常に動作している物理ホストの 1 つがデバイスにアクセスできます。アプリケーションの高可用性を実現するには、そのデータが高可用性であることが必要です。したがって、アプリケーションのデータは、複数のクラスタノードまたはゾーンからアクセス可能なファイルシステムに格納されている必要があります。Sun Cluster で高可用性にできるローカルファイルシステムには、UNIX File System (UFS)、Quick File System (QFS)、Veritas File System (VxFS)、および Solaris ZFS (Zettabyte File System) があります。

クラスタファイルシステムは、独立したものであるように作成されたデバイスグループにマウントされます。ユーザーは、あるデバイスグループをマウントされたクラスタファイルシステムとして使用し、別のデバイスグループをデータサービス (HA Oracle ソフトウェアなど) で使用する raw デバイスとして使用することもできます。

アプリケーションは、データファイルの位置を示すコマンド行スイッチまたは構成ファイルを持っていることがあります。アプリケーションが、固定されたパス名を使用する場合は、アプリケーションのコードを変更せずに、このパス名を、クラスタファイルシステム内のファイルを指すシンボリックリンクに変更できます。シンボリックリンクの使用法の詳細については、「多重ホストデータを配置するためのシンボリックリンクの使用」を参照してください。

最悪の場合は、実際のデータの位置を示すための機構を提供するように、アプリケーションのソースコードを変更する必要があります。この機構は、追加のコマンド行引数を作成することにより実装できます。

Sun Cluster は、ボリュームマネージャーで構成されているUNIX UFS ファイルシステムと HA の raw デバイスの使用をサポートします。Sun Cluster ソフトウェアをインストールおよび構成するとき、クラスタ管理者は、どのディスクリソースを UFS ファイルシステムまたは raw デバイス用に使用するかを指定する必要があります。通常、raw デバイスを使用するのは、データベースサーバーとマルチメディアサーバーだけです。

多重ホストデータを配置するためのシンボリックリンクの使用

場合によっては、アプリケーションのデータファイルのパス名が固定されており、しかも、固定されたパス名を変更する機構がないものがあります。このような場合に、シンボリックリンクを使用すればアプリケーションのコードを変更せずに、済ませられる場合もあります。

たとえば、アプリケーションがそのデータファイルに固定されたパス名 /etc/mydatafile を指定すると仮定します。このパスは、論理ホストのファイルシステムの 1 つにあるファイルを示す値を持つシンボリックリンクに変更できます。たとえば、パスを /global/phys-schost-2/mydatafile へのシンボリックリンクにできます。

ただし、データファイルの名前を内容とともに変更するアプリケーション (または、その管理手順) の場合には、シンボリックリンクをこのように使用すると問題が生じる可能性があります。たとえば、まず新しい一時ファイル /etc/mydatafile.new を作成することで、アプリケーションが更新を実行するとします。次に、このアプリケーションは rename() システムコール (または mv コマンド) を使用して、この一時ファイルの名前を実際のファイルの名前に変更します。一時ファイルを作成し、その名前を実際のファイル名に変更することで、データサービスは、そのデータファイルの内容が常に適切であるようにします。

このとき、rename() アクションはこのシンボリックリンクを破壊します。このため、/etc/mydatafile という名前は通常ファイルとなり、クラスタのクラスタファイルシステムの中ではなく、/etc ディレクトリと同じファイルシステムの中に存在することになります。/etc ファイルシステムは各ホスト専用であるため、フェイルオーバーまたはスイッチオーバー後はデータが利用できなくなります。

根本的な問題点は、既存のアプリケーションはシンボリックリンクを認識せず、またシンボリックリンクを処理するようには作成されていないことにあります。シンボリックリンクを使用し、データアクセスを論理ホストのファイルシステムにリダイレクトするには、アプリケーション実装がシンボリックリンクを消去しないように動作する必要があります。したがって、シンボリックリンクは、クラスタのファイルシステムへのデータ配置に関する問題の完全な解決策ではありません。

ホスト名

データサービス開発者は、データサービスが動作しているサーバーのホスト名を、データサービスが知る必要があるかどうかを判断する必要があります。知る必要があると判断した場合、物理ホスト名ではなく、論理ホスト名を使用するようデータサービスを変更する必要があります。この意味で、論理ホスト名とは、アプリケーションリソースと同じリソースグループ内にある論理ホスト名リソース内に構成されているホスト名です。

データサービスのクライアントサーバープロトコルでは、サーバーが自分のホスト名をクライアントへのメッセージの一部としてクライアントに戻すことがあります。このようなプロトコルでは、クライアントは戻されたホスト名をサーバーに接続するときのホスト名として使用できます。戻されたホスト名をフェイルオーバーやスイッチオーバーが発生した後にも使用できるようにするには、物理ホストではなく、リソースグループの論理ホスト名を使用する必要があります。物理ホスト名を使用している場合は、論理ホスト名をクライアントに戻すようにデータサービスのコードを変更する必要があります。

多重ホームホスト

「多重ホームホスト」とは、複数のパブリックネットワーク上にあるホストのことです。このようなホストは複数 (つまり、ネットワークごとに 1 つ) のホスト名/IP アドレスのペアを持ちます。Sun Cluster は、1 つのホストが複数のネットワーク上に存在できるように設計されています。1 つのホストが単一のネットワーク上に存在することも可能ですが、このような場合は「多重ホームホスト」とは呼びません。物理ホスト名が複数のホスト名/IP アドレスのペアを持つように、各リソースグループも複数 (つまり、パブリックネットワークごとに1 つ) のホスト名/IP アドレスのペアを持つことができます。Sun Cluster がリソースグループをある物理ホストから別の物理ホストに移動するとき、そのリソースグループに対するホスト名/IP アドレスのペアの完全なセットもすべて移動します。

リソースグループに対するホスト名/IP アドレスのペアのセットは、リソースグループに含まれる論理ホスト名リソースとして構成されます。このようなネットワークアドレスリソースは、クラスタ管理者がリソースグループを作成および構成するときに指定します。Sun Cluster データサービス API は、このようなホスト名/IP アドレスのペアを照会する機能を持っています。

Solaris オペレーティングシステム用に書かれているほとんどの市販のデータサービスデーモンは、多重ホームホストを適切に処理できます。ネットワーク通信を行うとき、多くのデータサービスは Solaris のワイルドカードアドレス INADDR_ANY にバインドします。すると、INADDR_ANY は、すべてのネットワークインタフェースのすべての IP アドレスを自動的に処理します。INADDR_ANY は、現在マシンに構成されているすべての IP アドレスに効率的にバインドします。一般的に、INADDR_ANY を使用するデータサービスデーモンは、変更しなくても、Sun Cluster 論理ネットワークアドレスを処理できます。

INADDR_ANY へのバインドと特定の IP アドレスへのバインド

Sun Cluster の論理ネットワークアドレスの概念では、多重ホーム化されていない環境でも、マシンは複数の IP アドレスを持つことができます。そのマシンは、独自の物理ホストの IP アドレスを 1 つだけ持ち、さらに、現在マスターしているネットワークアドレス (論理ホスト名) リソースごとに追加の IP アドレスを持ちます。ネットワークアドレスリソースのマスターになるとき、マシンは動的に追加の IP アドレスを獲得します。ネットワークアドレスリソースのマスターを終了するとき、マシンは動的に IP アドレスを放棄します。

データサービスの中には、INADDR_ANY にバインドしていると、Sun Cluster 環境で適切に動作しないもあります。このようなデータサービスは、リソースグループのマスターになるとき、またマスターをやめるときに、バインドしている IP アドレスのセットを動的に変更する必要があります。このようなデータサービスが再バインドする方法の 1 つが、起動メソッドと停止メソッドを使用し、データサービスのデーモンを強制終了および再起動するという方法です。

Network_resources_used リソースプロパティーを使用すると、エンドユーザーは、アプリケーションリソースをバインドすべきネットワークアドレスリソースを構成できます。この機能が必要なリソースタイプの場合、そのリソースタイプの RTR ファイルで Network_resources_used プロパティーを宣言する必要があります。

リソースグループをオンラインまたはオフラインにするとき、RGM は、データサービスリソースメソッドを呼び出す順番に従って、ネットワークアドレスの取り付け (plumb)、 取り外し (unplumb)、「起動」または「停止」への構成を行います。Start および Stop メソッドを使用するかどうかの決定」を参照してください。

データサービスは、データサービスの Stop メソッドが戻るまでに、リソースグループのネットワークアドレスを使用して、終了している必要があります。同様に、データサービスは、Start メソッドが戻るまでに、リソースグループのネットワークアドレスの使用を開始している必要があります。

データサービスが、個々の IP アドレスではなく、INADDR_ANY にバインドする場合、データサービスリソースメソッドが呼び出される順番とネットワークアドレスメソッドが呼び出される順番には重要な関係があります。

データサービスの停止メソッドと起動メソッドが、データサービスのデーモンを終了および再起動することで作業を実行する場合、データサービスは適切な時間にネットワークアドレスの使用を停止および開始します。

クライアントの再試行

ネットワーククライアントから見ると、フェイルオーバーやスイッチオーバーは、論理ホストに障害が発生し、高速再起動しているように見えます。したがって、クライアントアプリケーションとクライアントサーバープロトコルは、このような場合に何回か再試行するように構成されていることが理想的です。アプリケーションとプロトコルがすでに単一サーバーのクラッシュと再起動に対応できている場合、リソースグループのテイクオーバーまたはスイッチオーバーにも対応できます。無限に再試行するようなアプリケーションもあります。また、何回も再試行していることをユーザーに通知し、さらに継続するかどうかをユーザーにたずねるような、より洗練されたアプリケーションもあります。