3    マルチ・インスタンス・アプリケーションでのクラスタ別名の使用

クラスタ別名は,クラスタ内の一部またはすべてのシステムを,クライアントにとって個々のシステムとしてではなく,1 つのシステムとして見せる IP アドレスです。クラスタは,複数のクラスタ別名を持つことができます。省略時のクラスタ別名には,クラスタのすべてのメンバが含まれていて,すべてのメンバがその別名宛のパケットを受信することができます。

この章では,省略時のクラスタ別名を使って要求をすべてのクラスタ・メンバに分散させる,マルチ・インスタンス・アプリケーションの例を示します。別名属性を修正する方法については,『クラスタ管理ガイド』 を参照してください。

この章で扱う内容は次のとおりです。

3.1    いつクラスタ別名を使うか

クラスタ別名を使うと,要求やパケットをその別名のメンバに配信することができるため,複数のクラスタ・メンバ上で動作するアプリケーションの場合に最も効果があります。受信パケットや接続要求は,クラスタ別名のすべてのメンバに分散されます。その別名に属するメンバのいずれかで障害が発生した場合,クラスタ別名のソフトウェアは,アプリケーションに関連するトラフィックを,そのクラスタ別名の残りのメンバに透過的にルーティングします。これ以降の新しい要求は,管理者が用意したメトリクスに従ってメンバに配信されるようになります (クラスタ別名の機能概要は,『クラスタ概要』 を参照してください)。図 3-1 に,クラスタ別名サブシステムがクライアント要求を分散する方法を示します。

図 3-1:  マルチ・インスタンス・アプリケーションへのクラスタ別名を介したアクセス

シングル・インスタンス・アプリケーションでは,アプリケーション制御とフェイルオーバのために,CAA (Cluster Application Availability) 機能を使います。CAA を使用した場合でも,クラスタ別名サブシステムは,別名宛のパケットをルーティングしますが,CAA では,アプリケーションが 1 つのメンバ上だけで動作するため,クラスタ別名サブシステムは,要求を常にそのメンバにルーティングします (そのメンバがアプリケーションを実行しているとともに,使用するクラスタ別名のメンバでもあることが必要です)。クラスタ別名サブシステムと CAA の違いの概要については 『クラスタ管理ガイド』 を参照してください。

3.2    省略時のクラスタ別名を使用してマルチ・インスタンス Apache HTTP サーバにアクセスする

省略時のクラスタ別名を使用し,マルチ・インスタンスの高可用性 Apache HTTP サーバにアクセスして,クラスタのすべてのメンバに要求を分散させる場合は,次の手順に従います。

  1. 最新の標準 Apache の配布ソフトウェアを www.apache.org からダウンロードします。このサイトの指示に従って,Apache を構築し /usr/local/apache ディレクトリにインストールします。

  2. apache/conf/http.conf 構成ファイルを編集して,KeepAlive パラメータを off に設定します。

    KeepAlive Off
     
    

    KeepAlive パラメータが on に設定されている場合,Apache サーバ・デーモン (httpd) は,既存の TCP 接続をオープンしたままにして,KeepAliveTimeout で何秒定義されていても (省略時の設定では 15 秒),その間それを再使用します。要求の負荷を要求ごとに分散させたい場合は,これらの接続をオープンしたままにする KeepAlive タイマをオフにする必要があります。

  3. Apache ログ・ファイル用のメンバごとのサブディレクトリを,/usr/local/apache ディレクトリの下に作成します。

    # mkdir -p /usr/local/apache/member1/logs
    # mkdir -p /usr/local/apache/member2/logs
     
    

  4. そのログ・ディレクトリのコンテキスト依存シンボリック・リンク (CDSL) を作成します。

    # mkcdsl /usr/local/apache/{memb}/logs /usr/local/apache/logs
     
    

    注意

    C シェルを使っている場合は,文字列 {memb} の中カッコをエスケープする必要があります。つまり,\{memb\} のように記述します。こうしなければ,シェルが中カッコを取り除いてしまいます。Bourne シェルまたは Korn シェルを使っている場合は,中カッコをエスケープする必要はありません。

  5. クラスタ別名サービス・ファイル /etc/clua_services に次のエントリを追加します。

    http		80/tcp		in_multi,out_alias
     
    

    このエントリでは,ポート 80 に in_multi 属性を設定していますが,これは,クラスタ別名サブシステムが省略時のクラスタ別名宛の接続要求を,その別名のすべてのメンバに分散させることを意味します。

  6. サービス定義を再ロードするために,すべてのメンバ上で次のコマンドを実行します。

    # cluamgr -f
     
    

  7. 各メンバ上で,Apache サーバ・デーモンを起動します。

    # /usr/local/apache/bin/httpd