サーバー設定で ColdFusion 11 をインストールする場合、エンタープライズライセンスを持っているか、トライアル版あるいはデベロッパー版の ColdFusion をインストールしていれば、複数のインスタンスおよびクラスターを作成できます。(ColdFusion スタンダード版では、複数のインスタンスはサポートされません。)
複数のサーバーインスタンスについて
ColdFusion Administrator では、サーバーインスタンスやクラスターを作成できます。また、リモートの Tomcat サーバーに接続し、それらのサーバーをクラスターに追加することもできます。
ColdFusion の複数のインスタンスを実行することには、次のような利点があります。
- アプリケーションの隔離:各サーバーインスタンスに個別のアプリケーションをデプロイできます。設定内容はサーバーインスタンスごとに個別に保持されます。各サーバーインスタンスが別の Java 仮想マシン(JVM)上で実行されるので、1 つのアプリケーションで問題が発生しても他のアプリケーションに影響を与えません。
- クラスタリング(負荷分散とフェイルオーバー):各サーバーインスタンスに同じアプリケーションをデプロイし、それらのサーバーインスタンスを 1 つのクラスターに追加します。Web サーバーコネクタは負荷分散を自動的に管理し、いずれかのサーバーインスタンスが停止した場合は別のサーバーインスタンスにリクエストを転送することで、パフォーマンスと安定性を最適化します。
ファイルの位置についての注意事項
ColdFusion では、CFM ページの格納場所として、外部 Web サーバーのルートの下、または ColdFusion Web アプリケーションのルートの下を使用できます。ここでの説明は、ColdFusion Web アプリケーションのルートの下に CFM ページを格納し、アプリケーション用にコンテキストルートを指定していることを前提としています。
Web サーバーのルートから CFM ページを配信する場合の詳細については、Web サーバーの管理を参照してください。
追加サーバーインスタンスの定義
ColdFusion Administrator のエンタープライズマネージャーページを使用して、複数の ColdFusion インスタンスを作成できます。このページを使用できるのは、ColdFusion のエンタープライズ版、トライアル版、デベロッパー版のみです。
サーバーインスタンスの定義
ColdFusion をサーバー設定(JEE 設定ではなく)でインストールした後、ColdFusion Administrator を使用して ColdFusion インスタンスを作成します。
- ColdFusion Administrator で、エンタープライズマネージャ/インスタンスマネージャに移動します。
- 「新規インスタンスの追加」をクリックします。
- サーバー名とサーバーディレクトリを入力します。(サーバー名フィールドで tab キーを押すと、フィールドに入力された名前が、Administrator の Javascript コードによって既存のサーバーディレクトリの場所に自動的に追加されます。)
- (オプション)「Windows サービスの作成」にチェックを付けます。
- 「送信」をクリックします。新しいインスタンスが作成されるまで待機します。
- 作成された新しいインスタンスは、インスタンスマネージャーに表示されます。ここから、Administrator を起動、停止、再開、編集、アクセスしたり、このインスタンスの Web サイトにアクセスしたりできます(Administrator および Web サイトへのアクセスには、インスタンスマネージャのデフォルトの選択に従って、そのインスタンスの内部 Web サーバーポートを使用して実行されます)。
- (オプション)インスタンスマネージャを編集するには、編集アイコンをクリックします。なお、内部 Web サーバーポートと同様に、負荷分散係数も編集できます。負荷分散係数は、インスタンスが受け持つ負荷を表し、インスタンスがクラスターの一部になっている場合にのみ指定できます。例えば、最初のインスタンスの負荷分散係数を 1 に、2 つ目のインスタンスの負荷分散係数を 2 に設定したとします。この場合、2 つ目のインスタンスに 2 倍の負荷がかかります。
- 「送信」をクリックします。
アプリケーションの隔離の有効化
それぞれ別の ColdFusion アプリケーションを実行する個別のサーバーインスタンスを作成すると、各アプリケーションに ColdFusion および JEE サーバーのリソースを個別に割り当てることができます。この設定では、複数のサーバーインスタンスを実行する単一の外部 Web サーバーを 1 台のコンピュータ上に構成し、各サーバーインスタンスごとに仮想ホスト (またはサイト) を割り当てるのが普通です。
注意:ColdFusion と同様に、他の JEE アプリケーションサーバーにも同等の機能があるので、そのような JEE サーバーに ColdFusion JEE 設定をデプロイする場合もほとんどの概念がそのまま通用します。 |
この方法で複数の独立したアプリケーションを実行することには、次のような利点があります。
- ColdFusion アプリケーションレベルまたは Tomcat サーバーレベルでエラーが発生しても、他の ColdFusion アプリケーションに影響を与えません。
マルチホームサーバーをサポートできます。1 つの Web サーバーで複数の IP アドレスまたはドメイン名(例えば、www.mycompany.com と services.anothercompany.com の両方)をサポートし、それぞれに対して別の Web ルートの内容を提供できます。詳しくは、マルチホーミングを参照してください。
注意:『ColdFusion のインストールと使用』では、1 台のコンピューター上に複数のサーバーインスタンスを作成する方法を説明しています。複数台のコンピュータ上にサーバーインスタンスを作成するには、各コンピュータ上に個別の ColdFusion エンタープライズ版のライセンスが必要です。
アプリケーションの隔離を完全に実現するには、使用する Web サーバーの機能を使用して、各アプリケーション用に個別の Web サイトを作成します。この概念を表す用語は Web サーバーによって異なります。例えば IIS では個別の Web サイトを定義し、Apache では複数の仮想ホストを作成します。
ここでは、エンタープライズ版の複数のインスタンス設定で ColdFusion を実行する場合の手順を説明します。この原則は、ColdFusion を他の JEE アプリケーション上で実行する場合にも適用されます。ただし、すべての JEE アプリケーションサーバーが外部 Web サーバーと統合されるとは限りません。詳しくは、マルチホーミングを参照してください。
次の手順では、各アプリケーションをそれぞれ名前の付いたコンテキストルートにデプロイするものと仮定します。この場合、ユーザーは http://_hostname_/_context-root_/_pagename_.cfm を指定して CFM ページにアクセスできます。同じサーバーインスタンスで別の Web アプリケーションが動作している場合は、個々の Web アプリケーションごとに異なるコンテキストルートを使用する必要があります。
例えば、コンテキストルートが cf の場合、ユーザーが CFM ページにアクセスするには http://_hostname_/cf/_pagename_.cfm を指定します。コンテキストルートについて詳しくは、『ColdFusion インストール』を参照してください。注意:この {{cf}} はコンテキストルートですが、Web アプリケーションのディレクトリ構造とは関連していません。
複数のサーバーインスタンスを使用したアプリケーションの隔離
- 追加サーバーインスタンスの定義の手順に従って、別個のサーバーインスタンスをもう 1 つ作成します。ビルトインの Web サーバーを使用する場合は、下の手順 6 に進みます。
- 使用する Web サーバーに応じた方法で、アプリケーションの仮想 Web サイト(別の Web サイト)を作成します。詳細については、マルチホーム、または使用する Web サーバーのマニュアルを参照してください。
- 各仮想 Web サイトをテストし、HTML ページが正しく配信されることを確認します。
- アプリケーションの ColdFusion ファイルを仮想 Web サイトの Web ルートに保存します。または、任意で ColdFusion Web アプリケーションのルートに保存することもできます(アプリケーションの移植性を考慮)。
- 使用する Web サーバーに応じた手順で、仮想 Web サイトとサーバーインスタンスとの接続を設定します。詳しくは、アプリケーションの隔離を行う場合の Web サーバー設定を参照してください。
- アプリケーションをテストします。
- サーバーインスタンスごとに、ここまでの手順を繰り返します。
アプリケーションの隔離を行う場合の Web サーバー設定
アプリケーションを隔離するために複数のサーバーインスタンスを使用する場合、Web サイトおよびサーバーインスタンス間の通信を設定する手順は、個々の Web サーバーによって異なります。
IIS 上でのアプリケーションの隔離の設定
IIS 環境で、複数のサーバーインスタンスを持つ複数の仮想 Web サイトを使用する場合は、仮想 Web サイトとサーバーインスタンスの個々の組み合わせごとにフィルターとマッピングを定義します。
ここでは、既にサーバーインスタンスと仮想 Web サイトがアプリケーションの隔離の有効化の説明に従って作成されていることを前提に説明します。
IIS を使用した、アプリケーションの隔離のための複数のサーバーインスタンスの設定
Web サーバー設定ツールを、個々の仮想 Web サイトにつき 1 回ずつ、繰り返し実行します。ColdFusion 11 では、各インスタンス内(cfroot\instancename\runtime\bin 内にある wsconfig ツール)から Web サーバー設定ツールを実行してから、接続先の Web サイトを指定する必要があります。Web サーバー設定ツールを実行する方法の詳細を参照してください。
Apache 上でのアプリケーションの隔離の設定
Apache 環境で、複数のサーバーインスタンスを持つ複数の仮想ホストを使用する場合は、httpd.conf ファイルを手作業で編集します。
ここでは、既にサーバーインスタンスと仮想 Web サイトがアプリケーションの隔離の有効化の説明に従って作成されていることを前提に説明します。
Apache を使用した、アプリケーションの隔離のための複数のサーバーインスタンスの設定
cfusion および server1 という 2 つのインスタンスがあるものとします。
- wsconfig ツールを使用して、cfusion インスタンスに Apache Web サーバーを設定します。この手順では、コネクタ関連のファイルを cf_root¥config¥wsconfig¥1 フォルダーに作成します。また、mod_jk.conf を <Apacheroot>\conf フォルダーに作成します。mod_jk.conf }} ファイルは {{httpd.conf に含まれます。
- Apache 仮想ホストを設定します。
- cf-root¥config¥wsconfig¥1 の workers.properties で、server1 を workers.list に追加します。例えば、worker.list=cfusion,server1 のようにします。
次のブロックを追加します。
worker.server1.host=localhost
worker.server1.port=8014注意:ポートは server1 の AJP ポートで、cf_root¥server1¥runtime¥conf¥server.xml の server1.server.xml で確認できます。
- cf-root¥config¥wsconfig¥1 にある uriworkermap.properties の内容を、{{uriworkermap1.properties}} にコピーします。cfusion を server1 に置き換えます。
- 各仮想ホストで、次の行を追加します。例えば、VH1 は ColdFusion のインスタンスです。これは JkMountFile "cf_root¥config¥wsconfig¥1¥uriworkermap.properties" となっている必要があります。VH2 は server1 のインスタンスです。これは JkMountFile "cf_root¥config¥wsconfig¥1" となっている必要があります。
Sun ONE Web サーバー上でのアプリケーションの隔離の設定
Sun ONE Web Server 環境で複数のサーバーインスタンスを含む複数の仮想ホストを使用する場合は、各 ColdFusion サーバーインスタンスに 1 つの Sun ONE Web Server インスタンスがマップされます。
Sun ONE Web Server を使用する場合にアプリケーションを隔離するための複数のサーバーインスタンスの設定
Web サーバー設定ツールを Sun ONE Web Server のインスタンスごとに実行します。実行のたびに異なる設定ディレクトリと ColdFusion サーバーインスタンスを指定する必要があります。ColdFusion MX アプリケーションのオプション(GUI)で「Web サーバーの設定」を選択してください。
クラスタリングの有効化によるロードバランスとフェイルオーバーの実現
「ロードバランス」とはエンタープライズレベルの機能で、アプリケーションサーバーがクラスター内にある複数のサーバーインスタンスへと自動的にリクエストを分散させることです。また、クラスタリングを使用すると、元のサーバーインスタンスが停止した場合でも、動作中の他のサーバーインスタンスへとアプリケーションサーバーがリクエストを転送できます。
新しい管理 API メソッドを使用してインスタンス名を(getinstancename in runtime.cfc)を取得し、ロードバランスとフェイルオーバーを実現するには、同じ ColdFusion アプリケーションおよび設定内容を複数のサーバーインスタンスにデプロイし、それらのインスタンスを 1 つのクラスターに追加します。各インスタンスとも、デプロイするアプリケーションおよび設定するリソース(データソース、Solr コレクション、マッピングなど)を同じにする必要があります。Web サーバーコネクタは負荷分散を自動的に管理し、いずれかのサーバーインスタンスが停止した場合は別のサーバーインスタンスにリクエストを転送することで、パフォーマンスと安定性を最適化します。
注意:クラスタリングが動作するには、ネットワークに接続されている必要があります。 |
最大限のフェイルオーバー保護を実現するには、1 つのクラスター内で複数台のコンピュータを使用してください。ただし、使用するコンピュータごとに個別の ColdFusion エンタープライズ版ライセンスを購入する必要があります。
クラスター内のサーバーインスタンスでセッションフェイルオーバーを実装するには、各サーバーインスタンスでセッションレプリケーションを有効化します。セッションレプリケーションは、クラスター内のサーバーインスタンス間でセッション情報をリアルタイムに調整する機能です。セッションレプリケーションを有効にすると、現在のサーバーが使用不可能な場合に、動作中の他のサーバーへと Tomcat がリクエストを自動的に転送します。
注意:セッションレプリケーションを使用するクラスタの場合、セッションデータは、変化するたびにクラスタ内の他の各サーバーへとコピーされます。したがって、セッションスコープに大量の情報を格納していると、この動作のためにパフォーマンスが低下する可能性があります。セッションスコープに格納する情報が大量になると考えられる場合は、その情報をデータベース内のクライアント変数に格納することを検討してください。 |
ロードバランスとフェイルオーバーのための、サーバーインスタンスのクラスターの設定
ColdFusion Administrator を使用してクラスターを管理します。
- ColdFusion Administrator で、エンタープライズマネージャ/クラスターマネージャをクリックします。
- クラスター名を入力して、「追加」をクリックします。
- クラスター名をクリックして、要件に基づいてサーバーをクラスターに移動します。
- (必要であれば)マルチキャストポートを編集します。マルチキャストポートは、クラスターメンバーのグループ化に使用します。マルチキャストポートのデフォルト値は 45564 です。クラスターを作成すると、cfroot¥cfusion¥config¥cluster.xml ファイルにポートが追加されます。マルチキャストポートについて詳しくは、http://tomcat.apache.org/tomcat-6.0-doc/config/cluster-membership.html を参照してください。
- スティッキーセッションが必要かどうかを指定します。スティッキーセッションを指定した場合、クライアントのセッションが最初に確立されたインスタンスに、そのクライアントのすべての後続リクエストがマッピングされるようになります。スティッキーセッションを無効にすると、セッションレプリケーションが有効になることに注意してください。
- 「送信」をクリックします。
クラスターへのリモートインスタンスの追加
リモートインスタンスをクラスターに追加するには、クラスターブロックをリモートインスタンスの server.xml に追加します。次に、リモートインスタンスを登録して、インスタンスをクラスターに追加します。 Tomcat でのクラスター設定について詳しくは、http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html を参照してください。
セッションレプリケーションを使用する場合は、「メモリ変数」ページに移動して J2EE セッションを有効化します。クラスター内のすべてのサーバーインスタンスに対して J2EE を有効化してください。ColdFusion Administrator で J2EE セッションを有効化しないと、セッションレプリケーションは正常に機能しません。
CFC シリアル化では、クラスターで J2EE セッションレプリケーションを使用して、クラスター内のすべてのインスタンスでセッションデータの CFC にアクセスできます。セッションレプリケーションを有効にすると、セッションスコープ変数もクラスター内で複製されます。ただし、セッションレプリケーションではセッションスコープの CFC または変数内の配列のレプリケーションはサポートされません。また、セッションフェイルオーバーの場合は CFC 内にデータを保持してアクセスすることもできます。セッションスコープ内に格納された ColdFusion 構造体は、フェイルオーバーの後でもセッションスコープで使用できます。
例えば、複数の ColdFusion のインスタンスを実行してサーバーの負荷を分散させている場合、セッション内に有用なデータ(CFC を含む)を格納して、そのセッションで配信されるすべてのページでデータにアクセスすることができます。CFC シリアル化を有効にするには、次のようにセッションで CFC を設定します。
<cfset session.datasourcecomponent = cfccomponent> |
フェイルオーバーが発生したら、次のように CFC のメソッドにアクセスしてメソッドを呼び出すことができます。
<cfset check = session.datasourcecomponent.verifyDSN("testdsn")> |
- リモートインスタンスをローカルマシンに登録します。
- ローカルマシンでクラスターを作成します。
- リモートインスタンスの cfroot_instance-name_runtime\conf\server.xml ファイルを開きます。
</host>}} エントリと {{</engine> エントリの間に次のブロックを追加します。
<Manager notifyListenersOnReplication="true" expireSessionsOnShutdown="false" className="org.apache.catalina.ha.session.DeltaManager">
</Manager>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership port="45565" dropTime="3000" address="228.0.0.4" className="org.apache.catalina.tribes.membership.McastService" frequency="500">
</Membership>
<Receiver port="4003" autoBind="100" address="auto" selectorTimeout="5000"
maxThreads="6" className="org.apache.catalina.tribes.transport.nio.NioReceiver">
</Receiver>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender">
</Transport>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector">
</Interceptor>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.
MessageDispatch15Interceptor">
</Interceptor>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="">
</Valve>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve">
</Valve>
<ClusterListener className="org.apache.catalina.ha.session.
JvmRouteSessionIDBinderListener">
</ClusterListener>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener">
</ClusterListener>
</Cluster>- エントリ内のメンバーシップポートをクラスターのマルチキャストポートで更新します。
ローカルホストの ColdFusion Administrator を使用して、ローカルインスタンスとリモートインスタンスをクラスターに追加します。
注意:リモートインスタンスとローカルインスタンスの JVM ルートを同じにしないでください。
- すべてのインスタンスを再起動します。
注意:複数のインスタンスでコードを実行する場合、リクエストされたテンプレートを現在実行中のインスタンスをレポートする CFML コードを実行すると便利です。セキュリティ上の理由で、現在のインスタンス名を提供する関数はありませんが、ColdFusion の管理 API は、インスタンス名を取得するメソッドを提供します(実行時 CFC 内の getInstanceName メソッド)。 |
リモートサーバーインスタンスに関する ColdFusion Administrator での定義
ColdFusion Administrator を使用して ColdFusion の新規リモートインスタンスを登録します。
- ColdFusion Administrator で、エンタープライズマネージャ/インスタンスマネージャ/リモートインスタンスの登録をクリックします。
インスタンス名、リモートホスト、リモートポート、http ポート、JVM ルート、負荷分散係数などの詳細を指定します。
インスタンス名は、そのインスタンスを識別するための文字列です。リモートポートと HTTP ポートがインスタンスマネージャページに表示されます。 これらのポートは、インスタンスの runtime¥conf フォルダーにある server.xml ファイルに指定されています。リモートポートは AJP ポートで、インスタンスポートはコネクタポートです。
JVM ルートはリモートインスタンスの名前です。 JVM ルートは、特定の Tomcat ワーカーに対する識別子として機能する属性です。 JVM ルートは、インスタンスの runtime¥conf フォルダーにある server.xml ファイルに指定されています。JVM ルートについて詳しくは、http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html を参照してください。注意:リモートインスタンスとローカルインスタンスをクラスタに追加した場合は、両方のインスタンスに同じ JVM ルートを設定することはできません。
HTTP 経由のリモート開始および停止機能を有効にするには、「Admin コンポーネントのポート」、「Admin コンポーネントのユーザー名」および「Admin コンポーネントのパスワード」に入力する必要があります。 デフォルトの Admin コンポーネントのポートは、8985 です。
注意:この機能を有効にするには、リモートホストに Admin コンポーネントをインストールします。
- リモートホストで、cfroot¥cfusion¥jetty¥etc¥jetty.xml を開きます。
- org.mortbay.jetty.bio.SocketConnector という文字列を検索します。
- リモートホストの IP アドレスでホストを更新します。
- jetty サーバーを再起動します。
- 「送信」をクリックします。
注意:ColdFusion 8、9 または 10 で IIS をすべてのサイトに対して設定している場合、ColdFusion11 で IIS をすべてのサイトに対して設定することはできません。また、ColdFusion 11 で IIS をすべてのサイトに対して設定している場合、ColdFusion 8、9 または 10 で IIS をすべてのサイトに対して設定することはできません。 |