第5章 テスト用のインストール

5.1. サーバーの起動

注記

Red Hat Java Web Server に汎用デプロイ可能パッケージを使用して Red Hat JBoss BPM Suite をインストールした場合は、「汎用デプロイ可能バンドルのインストール」にサーバー起動の手順が含まれているため、以下の説明に従う必要はありません。

Red Hat JBoss BPM Suite サーバーが Red Hat JBoss EAP にインストールされると、スタンドアロン または ドメイン モードで実行することができます。

5.1.1. スタンドアロンモード

注記

Red Hat JBoss EAP のデプロイ可能な ZIP パッケージを選択した場合には、設定手順は「Red Hat JBoss BPM Suite の Red Hat JBoss Enterprise Application Platform へのインストール」に記載されています。

デフォルトの起動スクリプト standalone.sh は、パフォーマンス重視で最適化されています。パフォーマンスモードでサーバーを実行する場合は、以下の手順に従います。

  1. コマンドラインで EAP_HOME/bin/ ディレクトリーに移動します。
  2. Unix 環境 の場合は以下を実行します。

    ./standalone.sh

    Windows 環境の場合は以下を実行します。

    ./standalone.bat

5.1.2. ドメインモード

「Red Hat JBoss BPM Suite インストーラーのインストール」を参照して JAR インストーラーを使用した場合には、Red Hat JBoss BPM Suite はすでにドメインモードで実行されるように設定されています。

注記

Red Hat JBoss EAP のデプロイ可能な ZIP パッケージを選択した場合には、ドメインモードの設定手順は「Red Hat JBoss BPM Suite の Red Hat JBoss Enterprise Application Platform へのインストール」に記載されています。

Red Hat JBoss BPM Suite をドメインモードで起動するには、以下の手順を実行します。

  1. コマンドラインで EAP_HOME/bin/ ディレクトリーに移動します。
  2. Unix 環境 の場合は以下を実行します。

    ./domain.sh

    Windows 環境の場合は以下を実行します。

    ./domain.bat

5.2. セキュリティーマネージャーの有効化

Red Hat JBoss BPM Suite には標準のセキュリティーポリシーが同梱されています。このポリシーは kie.policy ファイルに含まれます。このファイルの場所はお使いのディストリビューションにより異なります。Java Security Manager の Kie Policy を使用するには、アプリケーションサーバーでセキュリティーマネージャーを有効にする必要があります。Red Hat JBoss EAP 6.x 以降では、java.security.policy で指定した有効な security.policy ファイルと、kie.security.policy で指定した有効な kie.policy ファイルを使用して起動します。

埋め込みモードでルールおよびプロセスエンジンを使用する場合でも、これはすべてのコンテナーに適用されます。

注記

インストーラーを使用して Red Hat JBoss BPM Suite をインストールした場合は、セキュリティーポリシーを適用するオプションはインストール時に提供されています。インストーラーを使用してセキュリティーポリシーを適用すると、security.policykie.policyJBOSS_HOME/bin フォルダーに含まれるように standalone.conf ファイルが変更されます。これらのポリシーは、standalone.sh を使用すると、ランタイム時に有効化されます。

JBoss EAP 6 でのセキュリティーマネージャーの有効化

Red Hat JBoss BPM Suite には、セキュリティー重視で最適化されている standalone-secure.sh スクリプトも別途含まれています。このスクリプトによって、既知の脆弱性を保護するセキュリティーポリシーがデフォルトで適用されます。

standalone-secure.sh スクリプトは、Red Hat JBoss EAP のデプロイ可能なパッケージを使用した場合のみ利用できます。

重要

実稼動環境では standalone-secure.sh スクリプトの使用を推奨します。

セキュリティーマネージャーを使用すると、パフォーマンスが著しく低下することに注意してください。セキュリティーとパフォーマンスのバランスは、個々の状況を判断して決定する必要があります。「Java Security Manager とパフォーマンス管理」を参照してください。

サーバーをセキュアモードで実行する場合は、以下の手順に従います。

  1. コマンドラインで EAP_HOME_/bin/ ディレクトリーに移動します。
  2. Unix 環境 の場合は以下を実行します。

    ./standalone-secure.sh

    Windows 環境の場合は以下を実行します。

    ./standalone-secure.bat

JBoss EAP 7 でのセキュリティーマネージャーの有効化

Red Hat JBoss EAP バージョン 7 を使用する場合は standalone-secure.sh スクリプトは利用できません。セキュリティーマネージャーを有効化するには -secmgr および -Dkie.security.policy=./kie.policy フラグを指定してサーバーを起動します。以下に例を示します。

./standalone.sh -secmgr -Dkie.security.policy=./kie.policy

Red Hat JBoss EAP 7 での Java Security Manager に関する詳細は、『Red Hat JBoss Enterprise Application Platform: How to Configure Server Security』「Java Security Manager」を参照してください。

Java Security Manager とパフォーマンス管理

前述のとおり、Red Hat JBoss BPM Suite で MVEL スクリプトの評価をサンドボックス化できるように Java Security Manager (JSM) を有効にすると、高負荷環境でのパフォーマンスが低下します。Red Hat JBoss BPM Suite アプリケーションをデプロイする場合は、環境およびパフォーマンスマーカーに留意する必要があります。以下のガイドラインを使用して、セキュアで高パフォーマンスな Red Hat JBoss BPM Suite アプリケーションをデプロイしてください。

  • パフォーマンスが重要な高負荷の環境では、他のシステムで開発され、適切に評価されたアプリケーションのみをデプロイすることが推奨されます。また、このようなシステムでは、analyst のロールを持つユーザーを作成しないことが推奨されます。このような対策が取られた場合には、パフォーマンスが低下しないので JSM を無効にした状態のままでも安全です。
  • 負荷が高くないテストおよび開発環境や、ルールやプロセスのオーサリングが外部ネットワークに公開される環境では、MVEL の評価を適切にサンドボックス化してセキュリティーを強化するため、JSM を有効にすることが推奨されます。

JSM が無効な状態で、analyst ロールを持つユーザーに Business Central コンソールへのログインを許可することは安全でないため、推奨されません。

5.3. Business Central へのログイン

サーバーが正常に起動したら、Business Central へログインします。

  1. Web ブラウザーで http://localhost:8080/business-central にアクセスします。ドメイン名から実行するようユーザーインターフェースが設定されている場合は、http://www.example.com:8080/business-central のように localhost をドメイン名に置き換えます。
  2. インストール中に作成されたユーザー認証情報を使用してログインします (例: ユーザー名 helloworlduser とパスワード Helloworld@123)。
トラブルシューティング
Loading…​ 画面が消えない

Business Central へのログイン時に、Loading…​ 画面が消えない場合があります。これは、Business Central が使用する Server Sent Events (SSE) とお使いのファイアウォールが干渉しているために発生する可能性があります。

この問題を回避するには、Business Central で使用する SSE を無効にします。

  1. errai.bus.enable_sse_support=false を含む ErraiService.properties ファイルを作成します。
  2. このファイルを INSTALL_PATH/standalone/deployments/business-central.war/WEB-INF/classes/ にコピーします。
  3. business-central.war を再デプロイします。

2 種類の Red Hat JBoss BPM Suite クラスターを作成することができます。

デザインタイムクラスタリング

クラスター内の Red Hat JBoss BPM Suite の全ノードを使用して、プロセス、ルール、データオブジェクトなど Git リポジトリーにアセットを共有できます。開発プロセス時に単一障害点 (SPOF) や高可用性に関して懸念がある場合に適していいます。デザインタイムクラスタリングは、Apache HelixApache ZooKeeper を活用します。

デザインタイムクラスタリングは、ランタイムの実行には必要ありません。

ランタイムクラスタリング
Red Hat JBoss EAP など、コンテナーのクラスタリング機能を使用できます。ランタイムクラスタリングでは Apache Helix または Apache ZooKeeper ノードを管理する必要はありません。アプリケーションでタイマーを使用する場合は Quartz Enterprise Job Scheduler をサポートします。
注記

Websphere Application Server を使用する場合は、Quartz の設定は必要ありません。代わりにクラスタリングされた EJB タイマーを使用します。詳しい情報は「How to setup BPM Suite Timers to work in Websphere Application Server clustering」のサポート記事を参照してください。

Red Hat JBoss BPM Suite の以下のコンポーネントをクラスター化できます。

  • デザインタイムクラスター

    • Git リポジトリー: ビジネスアセットを保持する仮想ファイルシステム (VFS) リポジトリー
  • ランタイムクラスター

    • Intelligent Process Server または web applications: Web アプリケーションノードはランタイムデータを共有する必要があります。

      Intelligent Process Server のクラスタリングに関する説明は、「Intelligent Process Server のクラスタリング」またはコンテナーのクラスタリングに関するドキュメントを参照してください。

    • バックエンドデータベース: プロセスインスタンス、KIE セッション、履歴ログなど、状態データを含むデータベース

5.4. Git リポジトリーのクラスタリングメカニズム

Git リポジトリーをクラスタリングするには Red Hat JBoss BPM Suite は以下を使用します。

Apache Helix

クラスター内のノード全体でデータを同期、複製できるようにクラスター管理機能を提供します。Apache Helix クラスターは、Apache Zookeeper により管理されます。Apache Helix では、クラスターの定義、クラスターへのノードの追加、クラスターからのノードの削除、その他のクラスター管理タスクの実行が可能です。

追加情報:

  • Apache Helix は単一ノードのみに設定する必要があります。この設定は ZooKeeper により設定、分散されます。
  • Apache Helix クラスターは helix-admin.sh スクリプトで管理されます。コマンド一覧および Apache Helix のクラスターの別の管理方法については、「Apache Helix ドキュメント」を参照してください。
  • Apache Helix クラスターには 1 つだけコントローラーが必要ですが、全ノードを認識する必要があります。「Apache Helix コントローラー」のドキュメントと「Apache Helix アーキテクチャー」のドキュメントを参照してください。
Apache ZooKeeper

Apache Helix クラスターからのデータを同期、複製することができます。Apache ZooKeeper クラスターは アンサンブル と呼ばれ、サービスを利用するにはサーバーの大半が機能する状態でなければなりません。

ただし、アンサンブルは、どの種類のクラスタリングにも必要ではありません。Red Hat JBoss BPM Suite でデータを複製できるように、ZooKeeper のインスタンス 1 つのみが必要です。ZooKeeper のアンサンブルは、冗長性を提供し、ZooKeeper に障害が発生しないように保護します。

追加情報:

Apache Helix および Apache ZooKeeper の関係:

図5.1 Red Hat JBoss BPM Suite クラスターのスキーマ

3639

一般的なクラスタリング設定では以下を行います。

  1. Apache ZooKeeper および Apache Helix を使用してクラスターを設定します。これは、デザインタイムクラスタリングのみに必要です。
  2. Quartz テーブルでバックエンドデータベースを設定します。これは、タイマーを使用するプロセスにのみ必要です。
  3. コンテナーでクラスタリングを設定します。 『Red Hat JBoss BPM Suite インストールガイド』では、Red Hat JBoss EAP 6 向けのクラスタリングの説明のみ記載しています。

Maven リポジトリーのクラスタリング

さまざまな Business Central の操作により、Business Central の内部 Maven リポジトリーに JAR ファイルが公開されます。

このリポジトリーは、アプリケーションサーバーファイルシステムに通常のファイルとして存在するので、クラスター対応はありません。このフォルダーは、クラスター内のさまざまなノードとは同期されず、rsync などの外部ツールを使用して同期する必要があります。

外部同期ツールを使用する代わりに、各クラスターノードでシステムプロパティー org.guvnor.m2repo.dir を SAN または NAS を参照するように設定することができます。このような場合には、Maven リポジトリーフィルダーをクラスタリングする必要はありません。

5.5. Red Hat JBoss EAP のクラスタリング

クラスターモードで Red Hat JBoss BPM Suite をインストールするために、JAR インストーラーではサンプルの設定が提供されています。EAP 向けのデプロイ可能な ZIP でクラスタリングの設定をすることも可能です。

5.5.1. JAR インストーラーを使用したクラスタリング

注記

JAR インストーラーは、サンプル設定のみを提供します。プロジェクトのニーズに合わせて、設定を調節する必要があります。

「Red Hat JBoss BPM Suite インストーラーのインストール」に記載の JAR インストーラーを使用して、Red Hat JBoss BPM Suite の基本的なクラスタリング設定を行います。

自動設定では以下を作成します。

  • 3 つの ZooKeeper ノードとの ZooKeeper アンサンブル
  • Helix クラスター
  • Quartz データセンター 2 台 (マネージド 1 台、マネージド以外 1 台)

この Red Hat JBoss BPM Suite の設定には、EAP ノードが 2 つ含まれており、Maven リポジトリーを共有し、スケジュールされたタスクの連携に Quartz を使用し、business-central.wardashbuilder.war および kie-server.war をデプロイします。シナリオに適した設定にカスタマイズする方法、またはデプロイ可能な ZIP でクラスタリングを使用する方法は、「カスタム設定 (デプロイ可能な ZIP)」 およびお使いのコンテナークラスタリングのドキュメントを参照してください。

「インストーラーを使用した Red Hat JBoss BPM Suite のインストール」に説明されているインストールプロセスに従います。

  1. Configure runtime environment で、Install clustered configuration を選択して Next をクリックします。
  2. データベースの JDBC ベンダーを選択します。
  3. 適切なドライバーの JAR を指定します。

    • ファイルシステムで 1 つまたは複数のファイルを選択します。
    • 1 つまたは複数の URL を指定します。インストーラーにより、自動的にファイルがダウンロードされます。

    インストーラーにより、EAP_HOME/modules に JAR がコピーされ、適切な module.xml ファイルが作成されます。

    図5.2 JDBC ドライバーのセットアップ

    Configure JDBC provider and drivers
  4. Quartz で使用するデータベースにアクセスするための URL、ユーザー名、パスワードを入力します。

    インストーラーにより、以下が作成されます。

    • EAP_HOME/domain/configuration/quartz-definition.properties の Quartz 定義ファイル
    • EAP_HOME/domain/domain.xml の Quartz データソース 2 つ

      domain.xml ファイルを編集して設定をカスタマイズします。

      注記

      インストール時に、Quartz DDL スクリプトがこの手順で選択したデータベースで実行されます。このスクリプトにより、テーブルの追加など、Quartz の操作に必要な変更が加えられます。EAP_HOME/jboss-brms-bpmsuite-6.4-supplementary-tools/ddl-scripts でスクリプトを表示できます。変更の必要はありません。

      図5.3 Quartz データベース設定

      7215
  5. Next をクリックして、インストールを開始します。

    重要

    JAR インストーラーを使用する場合には、war アーカイブが EAP_HOME/standalone/deployments/ のアプリケーションから自動的に作成されます。そのため、インストール時にはアプリケーションが圧縮された状態、展開された状態の両方でストレージに存在するので追加の容量が必要になります。

    ZooKeeper インスタンス 3 つが EAP_HOME/jboss-brms-bpmsuite-6.4-supplementary-tools/zookeeper-onezookeeper-twozookeeper-three ディレクトリーに作成されます。

インストールの完了後、インストーラーからサーバーを起動しないでください。Apache Helix にクラスターノードと Apache ZooKeeper インスタンスを認識させ、クラスターを起動するには以下を実行します。

  1. EAP_HOME/jboss-brms-bpmsuite-6.4-supplementary-tools/helix-core に移動します。
  2. 以下の起動スクリプトを実行します。

    Unix システムの場合:

    ./startCluster.sh

    Windows の場合:

    ./startCluster.bat
  3. EAP_HOME/bin に移動します。
  4. 以下のスクリプトを実行して Red Hat JBoss EAP を起動します。

    Unix システムの場合:

    ./domain.sh

    Windows の場合:

    ./domain.bat

5.5.2. クラスターの起動

EAP_HOME/jboss-brms-bpmsuite-6.4-supplementary-tools/helix-corestartCluster.sh スクリプトは、クラスターを初期化して起動します。初期化されてから startCluster.sh を更に使用するとエラーが発生してしまいます。インストーラーで Red Hat JBoss BPM Suite クラスターをインストールした場合は各ファイルは以下の場所に存在します。

  • ZOOKEEPER_HOMEEAP_HOME/jboss-brms-bpmsuite-6.4-supplementary-tools/zookeeper-NUMBER に配置されます。
  • HELIX_HOMEEAP_HOME/jboss-brms-bpmsuite-6.4-supplementary-tools/helix-core に配置されます。

クラスターを起動するには、以下を実行します。

  1. 以下のように、ZooKeeper サーバーすべてを起動します。

    Unix システムの場合:

    ./ZOOKEEPER_HOME_ONE/bin/zkServer.sh start &
    ./ZOOKEEPER_HOME_TWO/bin/zkServer.sh start &
    ./ZOOKEEPER_HOME_THREE/bin/zkServer.sh start &

    Windows の場合:

    ZOOKEEPER_HOME_ONE/bin/zkServer.cmd start
    ZOOKEEPER_HOME_TWO/bin/zkServer.cmd start
    ZOOKEEPER_HOME_THREE/bin/zkServer.cmd start
  2. 以下のように、Helix コントローラーで ZooKeeper インスタンスが認識されるようにします。

    ./HELIX_HOME/bin/run-helix-controller.sh --zkSvr localhost:2181,localhost:2182,localhost:2183 --cluster bpms-cluster 2>&1 > /tmp/controller.log &
  3. EAP_HOME/bin に移動し、Red Hat JBoss EAP を起動します。

    Unix システムの場合:

    ./domain.sh

    Windows の場合:

    ./domain.bat
  4. Red Hat JBoss BPM Suite ノードにアクセスできます。たとえば、インストーラーを使用して Red Hat JBoss BPM Suite クラスターを作成した場合には、以下でノードにアクセスできます。

    localhost:8080/business-central
    localhost:8230/business-central

5.5.3. クラスターの停止

クラスターを停止するには、起動時と反対の順序でコンポーネントを停止します。

  1. Red Hat JBoss EAP インスタンスまたは使用するコンテナーを停止します。
  2. Helix コントローラープロセスを停止します。

    Unix システムでプロセスの PID を検索します。

    ps aux|grep HelixControllerMain

    PID を特定し、プロセスを中断します。

    kill -15 <pid of HelixControllerMain>

    Windows ではタスクマネージャーを使用してプロセスを停止します。

  3. ZooKeeper サーバーを停止します。各サーバーインスタンスで以下を実行します。

    Unix システムの場合:

    ./ZOOKEEPER_HOME_ONE/bin/zkServer.sh stop
    ./ZOOKEEPER_HOME_TWO/bin/zkServer.sh stop
    ./ZOOKEEPER_HOME_THREE/bin/zkServer.sh stop

    Windows の場合:

    ZOOKEEPER_HOME_ONE/bin/zkServer.cmd stop
    ZOOKEEPER_HOME_TWO/bin/zkServer.cmd stop
    ZOOKEEPER_HOME_THREE/bin/zkServer.cmd stop

5.5.4. カスタム設定 (デプロイ可能な ZIP)

Red Hat JBoss EAP クラスタリングを使用すると、単一の Red Hat JBoss EAP ドメインコントローラーは、管理ユーザーとして接続している他の Red Hat JBoss EAP スレーブと共に存在します。Business Central および dashbuilder をドメインコントローラーの管理ユーザーとしてデプロイでき、WAR デプロイメントは他の Red Hat JBoss EAP クラスターの他のメンバーに分散されます。

Red Hat JBoss EAP 6 でクラスタリングを設定するには、以下を実行します。

  1. 「クラスターの設定」に従い、ZooKeeper および Helix を設定します。
  2. 「Quartz の設定」に従い、Quartz を設定します。
  3. JDBC ドライバーをインストールします。『Red Hat JBoss EAP 管理および設定ガイド』「管理コンソールを用いた JDBC ドライバーのインストール」の章を参照してください。
  4. サーバーのデータソースを設定します。使用するモードをもとに、EAP_HOME/MODE/configuration にある domain.xml または standalone.xml を開きます。
  5. full プロファイルの場所を特定して、以下を行います。

    1. Red Hat JBoss BPM Suite で使用する主要なデータソースの定義を追加します。

      例5.1 主要な Red Hat JBoss BPM Suite データソースとして定義した PostgreSQL データソース

      <datasource jndi-name="java:jboss/datasources/psbpmsDS"
                  pool-name="postgresDS" enabled="true" use-java-context="true">
        <connection-url>jdbc:postgresql://localhost:5432/jbpm</connection-url>
        <driver>postgres</driver>
        <security>
          <user-name>bpms</user-name>
          <password>bpms</password>
        </security>
      </datasource>
    2. Quartz サービスのデータソースの定義を追加します。

      例5.2 Quartz データソースとして定義した PostgreSQL データソース

      <datasource jta="false" jndi-name="java:jboss/datasources/quartzNotManagedDS"
                  pool-name="quartzNotManagedDS" enabled="true" use-java-context="true">
        <connection-url>jdbc:postgresql://localhost:5432/jbpm</connection-url>
        <driver>postgres</driver>
        <security>
          <user-name>bpms</user-name>
          <password>bpms</password>
        </security>
      </datasource>
    3. データソースのドライバーを定義します。

      例5.3 PostgreSQL ドライバーの定義

      <driver name="postgres" module="org.postgresql">
        <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
      </driver>
    4. Red Hat JBoss EAP 7.0 に Red Hat JBoss BPM Suite をデプロイする場合には、データソースにスキーマが含まれるようにしてください。データソーススキーマを作成するには、jboss-bpmsuite-brms-6.4-supplementary-tools.zip にある DDL スクリプトを使用してください。データソースにスキーマが含まれない場合には、一度に 1 つのノードを起動するようにしてください。

      また、Red Hat JBoss EAP 7.0 にデプロイする場合には、EAP_HOME/domain/business-central.war/WEB-INF/classes/META-INF/persistence.xml を開き、hibernate.hbm2ddl.auto="update" プロパティーを hibernate.hbm2ddl.auto="none" に変更してください。

  6. _cluster_properties_BRMSで定義したプロパティーを使用して、EAP_HOME/domain/configuration/host.xmlmain-server-group 要素で複数の個別要素を設定します。

    Apache ZooKeeper で Red Hat JBoss EAP クラスターを設定する場合には、Red Hat JBoss EAP ノードと Apache ZooKeeper ノード数は同じでなくても構いません。ただし、ベストプラクティスとして、ZooKeeper および Red Hat JBoss EAP のノード数は同じにするようにしてください。

    クラスターノードのプロパティー

    jboss.node.name

    Red Hat JBoss BPM Suite クラスターで一意のノード名

    デフォルト

    文字列

    該当なし

    org.uberfire.cluster.id

    kie-cluster などの Helix クラスターの名前。この値は、Helix コントローラーに定義したものと同じ値に設定する必要があります。

    デフォルト

    文字列

    該当なし

    org.uberfire.cluster.local.id

    Helix クラスターノードの一意の ID。node1_12345 などのように、':' は '_' に置き換える点に注意してください。

    デフォルト

    文字列

    該当なし

    org.uberfire.cluster.vfs.lock

    kie-vfs など、Helix クラスターで定義されるリソース名

    デフォルト

    文字列

    該当なし

    org.uberfire.cluster.zk

    Zookeeper サーバーの場所

    デフォルト

    host1:port1host2:port2host3:port3…​などの形式の文字列

    該当なし

    org.uberfire.metadata.index.dir

    インデックス化および検索の際に Apache Lucene が使用する .index ディレクトリーの場所

    デフォルト

    パス

    現在の作業ディレクトリー

    org.uberfire.nio.git.daemon.host

    Git デーモンが有効な場合には、localhost の識別子としてこのプロパティーを使用します。

    デフォルト

    URL

    localhost

    org.uberfire.nio.git.daemon.hostport

    仮想化環境で実行中の場合はホストは Git デーモンのポート番号以外を使用します。

    デフォルト

    ポート番号

    9418

    org.uberfire.nio.git.daemon.port

    Git デーモンが有効な場合には、ポート番号としてこのプロパティーを使用します。

    デフォルト

    ポート番号

    9418

    org.uberfire.nio.git.dir

    ディレクトリー .niogit の場所。たとえば、バックアップの目的で値を変更します。

    デフォルト

    パス

    現在の作業ディレクトリー

    org.uberfire.nio.git.ssh.host

    SSH デーモンが有効な場合には、localhost の識別子としてこのプロパティーを使用します。

    デフォルト

    URL

    localhost

    org.uberfire.nio.git.ssh.hostport

    仮想化環境で実行中の場合はホストは SSH デーモンのポート番号以外を使用します。

    デフォルト

    ポート番号

    8003

    org.uberfire.nio.git.ssh.port

    SSH デーモンが有効な場合には、ポート番号としてこのプロパティーを使用します。

    デフォルト

    ポート番号

    8001

    例5.4 クラスター nodeOne 設定

    <system-properties>
      <property name="org.uberfire.nio.git.dir" value="/tmp/bpms/nodeone"
                boot-time="false"/>
      <property name="jboss.node.name" value="nodeOne" boot-time="false"/>
      <property name="org.uberfire.cluster.id" value="bpms-cluster" boot-time="false"/>
      <property name="org.uberfire.cluster.zk"
                value="server1:2181,server2:2182,server3:2183" boot-time="false"/>
      <property name="org.uberfire.cluster.local.id" value="nodeOne_12345"
                boot-time="false"/>
      <property name="org.uberfire.cluster.vfs.lock" value="vfs-repo" boot-time="false"/>
      <property name="org.uberfire.nio.git.daemon.host" value="nodeOne"/>
      <property name="org.uberfire.nio.git.daemon.port" value="9418" boot-time="false"/>
      <property name="org.uberfire.nio.git.daemon.hostport" value="9418"
                boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.port" value="8003" boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.hostport" value="8003" boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.host" value="nodeOne"/>
      <property name="org.uberfire.metadata.index.dir" value="/tmp/jbpm/nodeone"
                boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.cert.dir" value="/tmp/jbpm/nodeone"
                boot-time="false"/>
      <property name="org.quartz.properties"
                value="/tmp/jbpm/quartz/quartz-db-postgres.properties" boot-time="false"/>
    </system-properties>

    例5.5 クラスター nodeTwo 設定

    <system-properties>
      <property name="org.uberfire.nio.git.dir" value="/tmp/bpms/nodetwo"
                boot-time="false"/>
      <property name="jboss.node.name" value="nodeTwo" boot-time="false"/>
      <property name="org.uberfire.cluster.id" value="bpms-cluster" boot-time="false"/>
      <property name="org.uberfire.cluster.zk"
                value="server1:2181,server2:2182,server3:2183" boot-time="false"/>
      <property name="org.uberfire.cluster.local.id" value="nodeTwo_12346"
                boot-time="false"/>
      <property name="org.uberfire.cluster.vfs.lock" value="vfs-repo" boot-time="false"/>
      <property name="org.uberfire.nio.git.daemon.host" value="nodeTwo" />
      <property name="org.uberfire.nio.git.daemon.port" value="9419" boot-time="false"/>
      <property name="org.uberfire.nio.git.daemon.hostport" value="9419"
                boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.port" value="8004" boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.hostport" value="8004" boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.host" value="nodeTwo" />
      <property name="org.uberfire.metadata.index.dir" value="/tmp/jbpm/nodetwo"
                boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.cert.dir" value="/tmp/jbpm/nodetwo"
                boot-time="false"/>
      <property name="org.quartz.properties"
                value="/tmp/jbpm/quartz/quartz-db-postgres.properties" boot-time="false"/>
    </system-properties>

    例5.6 クラスター nodeThree 設定

    <system-properties>
      <property name="org.uberfire.nio.git.dir" value="/tmp/bpms/nodethree"
                boot-time="false"/>
      <property name="jboss.node.name" value="nodeThree" boot-time="false"/>
      <property name="org.uberfire.cluster.id" value="bpms-cluster" boot-time="false"/>
      <property name="org.uberfire.cluster.zk"
                value="server1:2181,server2:2182,server3:2183" boot-time="false"/>
      <property name="org.uberfire.cluster.local.id" value="nodeThree_12347"
                boot-time="false"/>
      <property name="org.uberfire.cluster.vfs.lock" value="vfs-repo" boot-time="false"/>
      <property name="org.uberfire.nio.git.daemon.host" value="nodeThree" />
      <property name="org.uberfire.nio.git.daemon.port" value="9420" boot-time="false"/>
      <property name="org.uberfire.nio.git.daemon.hostport" value="9420"
                boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.port" value="8005" boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.hostport" value="8005" boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.host" value="nodeThree" />
      <property name="org.uberfire.metadata.index.dir" value="/tmp/jbpm/nodethree"
                boot-time="false"/>
      <property name="org.uberfire.nio.git.ssh.cert.dir" value="/tmp/jbpm/nodethree"
                boot-time="false"/>
      <property name="org.quartz.properties"
                value="/tmp/jbpm/quartz/quartz-db-postgres.properties" boot-time="false"/>
    </system-properties>
  7. Red Hat JBoss EAP 『管理設定ガイド』の説明に従い、管理ユーザーを、『Red Hat JBoss BPM Suite Administration and Configuration Guide』の説明に従い、アプリケーションユーザーを追加してください。
  8. EAP_HOME/bin に移動して、ドメインモードでアプリケーションサーバーを起動します。

    Unix システムの場合:

    ./domain.sh

    Windows の場合:

    ./domain.bat
  9. ノードが利用できることを確認します。

Business Central アプリケーションをサーバーにデプロイします。

  1. アプリケーションに事前定義されている永続性を必要なデータベース (PostgreSQL) に変更します。persistence.xml で以下を変更します。

    1. アプリケーションサーバーで定義したソースに jta-data-source 名前を変更します(java:jboss/datasources/psbpmsDS)。
    2. Hibernate 方言をデータソースの方言に一致させます (org.hibernate.dialect.PostgreSQLDialect)。
  2. 管理ユーザーとして、ドメインのサーバー 管理 コンソールにログインして、コンソールの Runtime view を使用して新規デプロイメントを追加します。デプロイメントがドメインに追加されたら、正しいサーバーグループ (main-server-group) に割り当てます。
注記

全クラスターメンバーの準備が整うまでデプロイメントを明示的に確認することが重要です。

デプロイメントユニットをクラスターノードに作成した場合は、全クラスターメンバーに分散されるまで時間がかかります。デプロイメントの状態は、UI および REST を使用して確認できますが、デプロイメントが作成されたノードにクエリーが出されると、応答は deployed になります。このデプロイメントユニットを対象とする要求が別のクラスターに送信されると、DeploymentNotFoundException で失敗します。

5.5.5. Intelligent Process Server のクラスタリング

Intelligent Process Server は軽量のスケーラブルなコンポーネントです。これをクラスタリングすると、以下のような多数の利点があります。

  • デプロイされたコンテナーをもとに、リソースをパーティショニングすることができます。
  • 各インスタンスを別個にスケーリングできます。
  • ネットワーク全体にクラスターを分散して、単一のコントローラーで管理できます。

    • コントローラーは ZooKeeper アンサンブルにクラスタリングできます。
  • 他のコンポーネントは必要ありません。

基本的なランタイムクラスターは以下で構成されます。

  • Intelligent Process Server が含まれる複数の Red Hat JBoss EAP インスタンス
  • Business Central が含まれるコントローラーインスタンス
kieserver arch

以下のセクションでは、Red Hat JBoss EAP 6.4 上に Intelligent Process Server クラスターを起動する方法を説明します。

Intelligent Process Server クラスターの作成

  1. CONTROLLER_HOME/bin に移動します。
  2. kie-server ロールのユーザーを追加します。

    $ ./add-user.sh -a --user kieserver --password kieserver1! --role kie-server
  3. コントローラーを起動します。

    $ ./standalone.sh
  4. SERVER_1_HOME に移動します。
  5. kie-server.war をデプロイします。クラスターされたサーバーには business-central.war や他のアプリケーションは必要ありません。
  6. 必要なプロパティーの例については、以下の host.xml<servers> 部分を参照してください。

    <server name="server-one" group="main-server-group">
     <system-properties>
      <property name="org.kie.server.location" value="http://localhost:8180/kie-server/services/rest/server"></property> 1
      <property name="org.kie.server.controller" value="http://localhost:8080/business-central/rest/controller"></property> 2
      <property name="org.kie.server.controller.user" value="kieserver"></property> 3
      <property name="org.kie.server.controller.pwd" value="kieserver1!"></property> 4
      <property name="org.kie.server.id" value="HR"></property> 5
     </system-properties>
     <socket-bindings port-offset="100"/>
    </server>
    
    <server name="server-two" group="main-server-group" auto-start="true">
     <system-properties>
      <property name="org.kie.server.location" value="http://localhost:8230/kie-server/services/rest/server"></property>
      <property name="org.kie.server.controller" value="http://localhost:8080/business-central/rest/controller"></property>
      <property name="org.kie.server.controller.user" value="kieserver"></property>
      <property name="org.kie.server.controller.pwd" value="kieserver1!"></property>
      <property name="org.kie.server.id" value="HR"></property>
     </system-properties>
     <socket-bindings port-offset="150"/>
    </server>
    1
    org.kie.server.location: サーバーインスタンスの URL
    2
    org.kie.server.controller: コントローラー URL のコンマ区切りのリスト
    3
    org.kie.server.controller.user: コントローラー認証用に作成されたユーザー名。デフォルトでは kieserver を使用します。
    4
    org.kie.server.controller.pwd: コントローラー認証用のパスワード。デフォルトでは kieserver1! を使用します。
    5
    org.kie.server.id: コントローラーインスタンスで定義されたテンプレート ID に対応するサーバー ID。1 つのテンプレートを表す複数のサーバーインスタンスには同じ ID を指定してください。

    上記の例は、Red Hat JBoss EAP ドメインモードの定義です。ブートストラップスイッチの完全一覧については、『Red Hat JBoss BPM Suite Administration and Configuration Guide』「Bootstrap Switches」を参照してください。

  7. 必要なサーバー数だけ、以前の手順を繰り返します。ドメインモードで Red Hat JBoss EAP を起動するには、以下を実行します。
$ ./SERVER_HOME/bin/domain.sh

コントローラーにサーバーを接続した後に、コントローラーログを確認します。

13:54:40,315 INFO  [org.kie.server.controller.impl.KieServerControllerImpl] (http-localhost/127.0.0.1:8080-1) Server http://localhost:8180/kie-server/services/rest/server connected to controller
13:54:40,331 INFO  [org.kie.server.controller.impl.KieServerControllerImpl] (http-localhost/127.0.0.1:8080-2) Server http://localhost:8230/kie-server/services/rest/server connected to controller
13:54:40,348 INFO  [org.kie.server.controller.rest.RestKieServerControllerImpl] (http-localhost/127.0.0.1:8080-1) Server with id 'HR' connected
13:54:40,348 INFO  [org.kie.server.controller.rest.RestKieServerControllerImpl] (http-localhost/127.0.0.1:8080-2) Server with id 'HR' connected

または、コントローラーの Business Central で検証するには、以下を実行します。

  1. コントローラーの Business Central にログインします。
  2. DeployExecution Servers をクリックします。
  3. 各テンプレートに接続されているリモートサーバーを表示します。

5.6. 一般的なバンドルクラスタリング

5.6.1. クラスターの設定

注記

Business Central を使用しない場合には、以下のセクションはスキップしてください。

Business Central に Git (VFS) リポジトリーをクラスタリングするには、以下を実行します。

  1. Apache ZooKeeper、Apache Helix、Quartz DDL スクリプトが含まれる jboss-bpmsuite-brms-VERSION-supplementary-tools.zip をダウンロードします。
  2. アーカイブを展開します。ZooKeeper ディレクトリー (ZOOKEEPER_HOME) および Helix ディレクトリー (HELIX_HOME) が作成されます。
  3. Apache ZooKeeper を設定します。

    1. ZooKeeper ディレクトリーで conf に移動して、以下を実行します。

      cp zoo_sample.cfg zoo.cfg
    2. zoo.cfg を編集します。

      # The directory where the snapshot is stored.
      dataDir=$ZOOKEEPER_HOME/data/
      
      # The port at which the clients connects.
      clientPort=2181
      
      # Defining ZooKeeper ensemble.
      # server.{ZooKeeperNodeID}={server}:{port:range}
      server.1=localhost:2888:3888
      server.2=localhost:2889:3889
      server.3=localhost:2890:3890
      注記

      クラスタリングには複数の ZooKeeper ノードは必要ありません。

      dataDir の場所が存在し、アクセスできるようにしてください。

    3. ZooKeeper を実行する各メンバーにノード ID を割り当てます。たとえば、ノード 1 には 1、ノード 2 には 2、ノード 3 には3 などを使用します。

      ZooKeeper ノード ID は、各ノードの ZooKeeper のデータディレクトリーの配下にある myid というフィードで指定します。たとえば、ノード 1 の場合には、以下を指定します。

      echo "1" > /zookeeper/data/myid
  4. 必要に応じてさらに ZooKeeper 設定を指定します。
  5. ZOOKEEPER_HOME/bin/ に移動して ZooKeeper を起動します。

    ./zkServer.sh start

    ZOOKEEPER_HOME/bin/zookeeper.out ファイルで ZooKeeper ログを確認できます。このログをチェックしてアンサンブル (クラスター) が正しく形成されていることを確認します。ノードの 1 つをリーダーに選択して、他の 2 つのノードを従属させます。

  6. ZooKeeper アンサンブルが起動したら、Helix を設定、起動します。Helix は、単一のノードから以外は設定しないでください。この設定は、ZooKeeper アンサンブルに保存され、適時共有されます。

    設定のマスターとして ZooKeeper サーバーでクラスターを設定します。

    1. ZooKeeper ホストとポートをコンマ区切りリストで指定してクラスターを作成します。

      $HELIX_HOME/bin/helix-admin.sh --zkSvr ZOOKEEPER_HOST:ZOOKEEPER_PORT --addCluster <clustername>
    2. クラスターにノードを追加します。

      HELIX_HOME/bin/helix-admin.sh --zkSvr ZOOKEEPER_HOST:ZOOKEEPER_PORT --addNode <clustername> <name_uniqueID>

      例5.7 3 つのクラスターノードの追加

      ./helix-admin.sh --zkSvr server1:2181,server2:2182,server3:2183 --addNode bpms-cluster nodeOne:12345
      ./helix-admin.sh --zkSvr server1:2181,server2:2182,server3:2183 --addNode bpms-cluster nodeTwo:12346
      ./helix-admin.sh --zkSvr server1:2181,server2:2182,server3:2183 --addNode bpms-cluster nodeThree:12347
  7. クラスターにリソースを追加します。

    helix-admin.sh --zkSvr ZOOKEEPER_HOST:ZOOKEEPER_PORT  --addResource <clustername> <resourceName> <numPartitions> <stateModelName>

    「Helix Tutorial: State Machine Configuration」で状態マシンの設定について参照してください。

    例5.8 リソースとしての vfs-repo の追加

    ./helix-admin.sh --zkSvr server1:2181,server2:2182,server3:2183 --addResource bpms-cluster vfs-repo 1 LeaderStandby AUTO_REBALANCE
  8. 3 つのノードでクラスターをリバランスします。

    helix-admin.sh --zkSvr ZOOKEEPER_HOST:ZOOKEEPER_PORT --rebalance <clustername> <resourcename> <replicas>

    Helix Tutorial: Rebalancing Algorithms でリバランスについて参照してください。

    例5.9 bpms-cluster のリバランス

    ./helix-admin.sh --zkSvr server1:2181,server2:2182,server3:2183 --rebalance bpms-cluster vfs-repo 3

    このコマンドでは 3 は 3 つの bpms-cluster ノードを表します。

  9. クラスターの全ノードで Helix コントローラーを起動します。

    例5.10 Helix コントローラーの起動

    ./run-helix-controller.sh --zkSvr server1:2181,server2:2182,server3:2183 --cluster bpms-cluster 2>&1 > ./controller.log &
注記

ZooKeeper をクラスタリングする場合には、障害から復帰できるように奇数のインスタンスを追加します。障害の発生後、残りのノードが過半数を形成できる必要があります。たとえば、ZooKeeper ノードが 5 つあるクラスターの場合は、ノード 2 つの障害に耐えると完全に復帰できます。ZooKeepr インスタンスでもレプリケーションは機能しますが、障害が発生すると、復帰の可能性はありません。

5.6.2. クラスターの起動と停止

クラスターを起動する方法は、「クラスターの起動」を、クラスターを停止する方法は「クラスターの停止」を参照してください。

5.6.3. Quartz の設定

注記

ビジネスプロセスで Quartz (タイマー) を使用しない場合または Intelligent Process Server を使用する場合には、このセクションをスキップしてください。ビジネスプロセスでタイマーを複製する場合には Quartz コンポーネントを使用してください。

アプリケーションサーバーにデータベースを設定する前に、Quartz テーブルを作成する Quartz のデータベースを準備する必要があります。このテーブルは、タイマーデータや Quartz 定義ファイルを保持します。

Quartz を設定するには、以下を実行します。

  1. データベースを設定します。サポートされている JTA 以外のデータソースの 1 つを使用します。Quartz は JTA 以外のデータソースが必要であるため、Business Central データソースは使用できません。以下のコードでは、PostgreSQL のユーザーは bpms、パスワードは bpms を使用します。データベースは、アプリケーションサーバーに接続する必要があります。
  2. データベースに Quartz テーブルを作成して、タイマーイベントの同期を許可します。これには、データベースの DDL スクリプトを使用します。QUARTZ_HOME/docs/dbTables の ZIP アーカイブを展開するとスクリプトを入手できます。
  3. JBOSS_HOME/MODE/configuration/ ディレクトリーの Quartz 設定ファイル quartz-definition.properties を作成して、Quartz プロパティーを定義します。

    例5.11 PostgreSQL データベースの Quartz 設定ファイル

    #============================================================================
    # Configure Main Scheduler Properties
    #============================================================================
    
    org.quartz.scheduler.instanceName = jBPMClusteredScheduler
    org.quartz.scheduler.instanceId = AUTO
    
    #============================================================================
    # Configure ThreadPool
    #============================================================================
    
    org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount = 5
    org.quartz.threadPool.threadPriority = 5
    
    #============================================================================
    # Configure JobStore
    #============================================================================
    
    org.quartz.jobStore.misfireThreshold = 60000
    
    org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreCMT
    org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
    org.quartz.jobStore.useProperties=false
    org.quartz.jobStore.dataSource=managedDS
    org.quartz.jobStore.nonManagedTXDataSource=notManagedDS
    org.quartz.jobStore.tablePrefix=QRTZ_
    org.quartz.jobStore.isClustered=true
    org.quartz.jobStore.clusterCheckinInterval = 20000
    
    #============================================================================
    # Configure Datasources
    #============================================================================
    org.quartz.dataSource.managedDS.jndiURL=jboss/datasources/psbpmsDS
    org.quartz.dataSource.notManagedDS.jndiURL=jboss/datasources/quartzNotManagedDS

    設定済みのデータソースはファイルの最後で Quartz スキーマ 2 つに対応する点に注意してください。

    クラスターノードの確認間隔

    クラスター検出の推奨される間隔は 20 秒で、quartz-definition.properties ファイルの org.quartz.jobStore.clusterCheckinInterval で設定されています。お使いの設定環境によっては、パフォーマンスの影響を考慮し、必要に応じて設定を変更してください。

    データベースの方言を定義する org.quartz.jobStore.driverDelegateClass プロパティー。Oracle を使用する場合には、org.quartz.impl.jdbcjobstore.oracle.OracleDelegate に設定します。

  4. org.quartz.properties プロパティーの quartz-definition.properties ファイルへの絶対パスを指定します。詳細情報は、「_cluster_properties_BRMS」を参照してください。

注記: Quartz トリガーの再試行数および遅延を設定するには、以下のシステムプロパティーを更新してください。

  • org.jbpm.timer.quartz.retries (デフォルト値は 5)
  • org.jbpm.timer.quartz.delay (デフォルト値は 1000、単位はミリ秒)