Oracle Application Server 高可用性フレームワーク
5.2 Oracle BPEL Process Manager
5.2.2 アクティブ アクティブ アクティブ アクティブ / アクティブ・トポロジの アクティブ・トポロジの アクティブ・トポロジの アクティブ・トポロジの Oracle BPEL Process Manager
Oracle BPEL Process Managerのアーキテクチャもステートレスなため、高可用性の実現が簡単
になります。図5-1に、Real Application Clustersデータベースをデハイドレーション・ストア として使用した、アクティブ/アクティブ・トポロジでのOracle BPEL Process Managerを示 します。
図 図 図
図5-1 アクティブアクティブアクティブアクティブ/アクティブ・トポロジのアクティブ・トポロジのアクティブ・トポロジのアクティブ・トポロジのOracle BPEL Process Manager
アクティブ/アクティブ・トポロジには、次のような特性があります。
■ すべてのコンポーネントがアクティブです(つまり、すべてのコンポーネントがリクエス トを処理できます)。
■ Oracle Application Serverインスタンスの前にロード・バランサが配置されています。これ
には、Oracle Web Cacheなどのソフトウェア・ロード・バランサを使用できますが、本番
での使用に備えて、F5 BIG-IPなどのハードウェア・ロード・バランサをお薦めします。
ロード・バランサによって、アクティブ・ノードの1つにリクエストが分散されます。該 当するノードが使用不可の場合、リクエストは次に使用可能なノードに送信されます。
■ すべてのBPELサーバーが、デハイドレーション・ストアとして同じデータベースを使用 します。
■ すべてのBPELエンジンで、生成されるSOAP URLのサーバーURLおよびコールバック・
アドレスとしてロード・バランサを使用します。具体的には、Oracle BPEL Process
Managerコンソールを使用して、soapServerUrlおよびsoapCallbackUrlプロパ
ティをロード・バランサのURLに設定します。
■ OPMNによって返されるJNDIプロバイダのリストを使用するようにJNDIルックアップ
(サービスの取得のためなど)を変更します。たとえば、次のようにJNDIプロバイダを指 定するのではありません。
jndiProviderURL = "ormi://localhost/Service"
かわりに次のように指定します。
jndiProviderURL = "opmn:ormi://host1:port1:oc4j/Service, opmn:ormi://host2:port2:oc4j/Service"
これによって、JVMレベルの高可用性を実現できます。1つのOC4Jインスタンスに対し て複数のJVMプロセスを実行している場合、OPMNでは、使用可能なJVMの数に基づい て独立したJNDIオブジェクトにリクエストをルーティングできます。
BPELプロセスのデプロイプロセスのデプロイプロセスのデプロイプロセスのデプロイ
アクティブ/アクティブ・トポロジにBPELプロセスをデプロイする手順は次のとおりです。
■ 設計環境(たとえば、Oracle JDeveloper)で、クラスタ内の各ノードにBPELプロセスを コンパイルしてデプロイします。これは手動またはスクリプトを使用して実行できます。
詳細は、『Oracle BPEL Process Manager開発者ガイド』を参照してください。
■ クラスタ内のすべてのサーバーが同じドメインを持つようにします(前述の手順と同様、
手動またはスクリプトを使用して実行できます)。
5.2.2.1 アクティブ アクティブ アクティブ アクティブ / アクティブ・トポロジでの アクティブ・トポロジでの アクティブ・トポロジでの アクティブ・トポロジでの BPEL プロセスの起動 プロセスの起動 プロセスの起動 プロセスの起動
この項では、SOAP/WSDLまたはOracle BPEL Process Manager Java APIを使用してBPELプ ロセスを起動する場合に必要な変更について説明します。
SOAP/WSDLを使用する場合は、ノードのホスト名ではなく、ロード・バランサの仮想サー
バー名を使用する必要があります。
Oracle BPEL Process Manager Java APIを使用する場合は、アクティブ/アクティブ・トポロ
ジで各ノードのホスト名をリストします。前述のjndiProviderURLの例を参照してくださ い。
5.2.2.2 デハイドレーション・ストアに デハイドレーション・ストアに デハイドレーション・ストアに デハイドレーション・ストアに Real Application Clusters データベー データベー データベー データベー スを使用 スを使用
スを使用 スを使用
高可用性を実現するには、Real Application Clustersデータベースなどの高可用性データベース でデハイドレーション・ストアを実行する必要があります。Real Application Clustersデータ ベースを使用すると、すべてのコンポーネントで高可用性を実現できます。
デハイドレーション・ストアにReal Application Clustersデータベースを使用する場合、構成 に対し、次の変更を行う必要があります。
■ Real Application Clustersデータベースへの接続情報のフォーマットが次のようになるよう
に、OC4Jのdata-sources.xmlファイルを変更します。
jdbc:oracle:thin:@(DESCRIPTION=
(ADDRESS_LIST=(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=tcp)(HOST=hostname1)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=hostname2)(PORT=1521)) )
(CONNECT_DATA=(SERVICE_NAME=orcl)) )
注意 注意 注意
注意: アクティブ/アクティブ・トポロジのOracle BPEL Process Manager のインストールおよび構成方法の詳細な手順は、『Oracle BPEL Process
Manager管理者ガイド』の「Oracle BPEL Process Managerのクラスタリン
グ」を参照してください。
hostname1およびhostname2は、Real Application Clustersデータベースを実行するノード の名前を指定します。
orclは、データベースのサービス名を指定します。
アドレスおよびロード・バランサのオプションは両方ともADDRESS_LIST要素内にあり ます。
また、Real Application Clustersデータベースに対する高速接続フェイルオーバーを有効化でき
ます。構成手順は、『Oracle Application Serverエンタープライズ・デプロイメント・ガイド』
の第3.2項「APPHOST1およびAPPHOST2でのRACデータベースに対する高速接続フェイル
オーバーの構成」を参照してください。
5.2.2.3 異なるサブネットにあるマシンでのアクティブ 異なるサブネットにあるマシンでのアクティブ 異なるサブネットにあるマシンでのアクティブ 異なるサブネットにあるマシンでのアクティブ / アクティブ・トポ アクティブ・トポ アクティブ・トポ アクティブ・トポ ロジの実行
ロジの実行 ロジの実行 ロジの実行
マシンが異なるサブネットにある環境でアクティブ/アクティブ・トポロジを実行する場合は、
トポロジを実行する前に、次の手順に従ってORACLE_
HOME¥bpel¥system¥config¥jgroups-protocol.xmlファイルに変更を加える必要があり ます。
1. Oracle BPEL Process Managerを停止します。
2. jgroups-protocol.xmlファイルの最初の<config>セクションをコメント・アウトし ます。例5-1の(2)を参照してください。
3. jgroups-protocol.xmlファイルの2番目の<config>セクションをコメント解除しま す。例5-1の(3)を参照してください。
4. hostAおよびhostBを、アクティブ/アクティブ・トポロジの実際のホスト名に置き換えま
す。例5-1の(4)を参照してください。
5. Oracle BPEL Process Managerを再起動します。
例 例 例
例5-1 jgroups-protocol.xmlファイルの例ファイルの例ファイルの例ファイルの例
<!-- ************ JGroups Protocol Stack Configuration ************** -->
<!-- generated by XmlConfigurator on Mon Apr 26 11:15:41 PDT 2004 -->
<!-- input file: default.old.xml -->
<!-- (2) Comment out this <config> section. -->
<config>
<UDP mcast_send_buf_size="32000"
mcast_port="45788"
ucast_recv_buf_size="64000"
mcast_addr="228.8.15.24"
bind_to_all_interfaces="true"
loopback="true"
mcast_recv_buf_size="64000"
max_bundle_size="48000"
max_bundle_timeout="30"
use_incoming_packet_handler="false"
use_outgoing_packet_handler="false"
ucast_send_buf_size="32000"
ip_ttl="32"
enable_bundling="false"/>
<PING timeout="2000"
num_initial_members="3"/>
<MERGE2 max_interval="10000"
min_interval="5000"/>
<FD timeout="2000"
max_tries="3"
shun="true"/>
<VERIFY_SUSPECT timeout="1500"/>
<pbcast.NAKACK max_xmit_size="8192"
use_mcast_xmit="false"
gc_lag="50"
retransmit_timeout="600,1200,2400,4800"/>
<UNICAST timeout="1200,2400,3600"/>
- desired_avg_gossip: periodically sends STABLE messages around. 0 disables this
- max_bytes: max number of bytes received from anyone until a STABLE message is sent. Use either this or
desired_avg_gossip, but not both ! 0 disables it.
- stability_delay: range (number of milliseconds) that we wait until sending a STABILITY message.
This prevents STABILITY multicast storms. If max_bytes is used, this should be set to a low value (> 0 though !).
-->
<pbcast.STABLE stability_delay="1000"
desired_avg_gossip="20000"
max_bytes="0"/>
<FRAG frag_size="8192"
down_thread="false"
up_thread="false"/>
<VIEW_SYNC avg_send_interval="60000" down_thread="false" up_thread="false" />
<pbcast.GMS print_local_addr="true"
join_timeout="3000"
join_retry_timeout="2000"
shun="true"/>
</config>
<!-- (2) end of <config> section to comment out -->
<!-- For cluster across subnet, please use the following tcp config and - change the initial_hosts instead of the above, the initial_hosts that are
going to be participating in the cluster.
-->
<!-- (3) Uncomment this <config> section
<config>
<TCP start_port="7900" loopback="true" send_buf_size="32000"
recv_buf_size="64000"/>
<!-- (4) Replace "hostA" and "hostB" with hostnames in your topology.
-->
<TCPPING timeout="3000" initial_hosts="hostA[7900],hostB[7900]" port_range="3"
num_initial_members="3"/>
<FD timeout="2000" max_tries="4"/>
<VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
<pbcast.NAKACK gc_lag="100" retransmit_timeout="600,1200,2400,4800"/>
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="20000"
down_thread="false" max_bytes="0" up_thread="false"/>
<VIEW_SYNC avg_send_interval="60000" down_thread="false" up_thread="false" />
<pbcast.GMS print_local_addr="true" join_timeout="5000"
join_retry_timeout="2000" shun="true"/>
</config>
--> <!-- (3) end of config section to comment out -->