Yellowfinの各ノードは「Cluster Aware」するために「ClusterManagement」サーブレットを有効にしなくてはいけません。ClusterManagementサーブレットは、各ノードのweb.xmlファイルに追加の設定を加えることで有効化されます。
アプリケーションの連携は、実装モードに応じて異なる動きをします。現状、REPOSITORY、DYNAMIC、LEGACYの3つのモードを利用することができます。
Multicast cluster messaging(DYNAMICモード)
Yellowfinのアプリケーション連携は、JGroupsと呼ばれるマルチキャストメッセージングライブラリにより制御されます。この方法を使用することで、同一のYellowfinデータベースを共有するクラスタ内の他のノードを自動的に検出します。
JGroupsのデフォルト構成では、グループメンバーシップと新ノードの検出にUDPマルチキャストメッセージを使用します。このようなタイプのメッセージを送信できない環境もあります。例えば、Amazonでは内部ネットワークのノード間でのマルチキャストパケットを許可していません。Multicast Cluster Messagingアダプターを使用すると、ノード検出に他の方法を使用するよう、JGroupsを設定するXMLファイルを渡すことができます。このファイルは、各ノードのweb.xml ファイルにあるClusterManagementサーブレット内のBroadcastConfigurationサーブレットのパラメーターにパスを渡すことで参照することができます。
DYNAMICモードのweb.xmlへの変更
各ノードのweb.xml ファイルに、以下のサーブレット定義を追加しなくてはいけません。
<!-- Cluster Management -->
<servlet>
<servlet-name>ClusterManagement</servlet-name>
<servlet-class>com.hof.mi.servlet.ClusterManagement</servlet-class>
<init-param>
<param-name>ClusterType</param-name>
<param-value>DYNAMIC</param-value>
</init-param>
<init-param>
<param-name>SerialiseWebserviceSessions</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>CheckSumRows</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>EncryptSessionId</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>EncryptSessionData</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>AutoTaskDelegation</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>TaskTypes</param-name>
<param-value>
REPORT_BROADCAST_BROADCASTTASK,
REPORT_BROADCAST_MIREPORTTASK,
FILTER_CACHE,
SOURCE_FILTER_REFRESH,
SOURCE_FILTER_UPDATE_REMINDER,
THIRD_PARTY_AUTORUN,
ORGREF_CODE_REFRESH,
ETL_PROCESS_TASK,
SIGNALS_DCR_TASK,
SIGNALS_ANALYSIS_TASK,
SIGNALS_CLEANUP_TASK,
COMPOSITE_VIEW_REFRESH,
SIGNALS_CORRELATION_TASK
</param-value>
</init-param>
<init-param>
<param-name>MaxParallelTaskCounts</param-name>
<param-value>
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
</param-value>
</init-param>
<load-on-startup>11</load-on-startup>
</servlet>
TaskTypesとMaxParallelTaskCountsは、どちらのタスクをYellowfinが実行する予定かに基づき、各ノードで微調整が必要です。上記の構成では、ノードは各タイプのタスク最大2つを並行に実行します。より詳細な情報は、こちらを参照してください。
Multicast with repository discovery(REPOSITORYモード)
Repository discoveryはDYNAMICモードの実装ですが、共有されたYellowfinリポジトリ経由でノードを検出するために、カスタムプラグインが付属しています。これは、マルチキャストパケットが機能しない環境でクラスタリングを有効化する場合に有効です。
この機能は、各ノードのweb.xml ファイルでRepositoryDiscoveryサーブレットのパラメーターをtrueに設定したDYNAMICモードで有効化することもできます。
REPOSITORYモードのweb.xmlへの変更
各ノードのweb.xml ファイルに、以下のサーブレット定義を追加しなくてはいけません。
<!-- Cluster Management -->
<servlet>
<servlet-name>ClusterManagement</servlet-name>
<servlet-class>com.hof.mi.servlet.ClusterManagement</servlet-class>
<init-param>
<param-name>ClusterType</param-name>
<param-value>REPOSITORY</param-value>
</init-param>
<init-param>
<param-name>SerialiseWebserviceSessions</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>CheckSumRows</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>EncryptSessionId</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>EncryptSessionData</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>AutoTaskDelegation</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>TaskTypes</param-name>
<param-value>
REPORT_BROADCAST_BROADCASTTASK,
REPORT_BROADCAST_MIREPORTTASK,
FILTER_CACHE,
SOURCE_FILTER_REFRESH,
SOURCE_FILTER_UPDATE_REMINDER,
THIRD_PARTY_AUTORUN,
ORGREF_CODE_REFRESH,
ETL_PROCESS_TASK,
SIGNALS_DCR_TASK,
SIGNALS_ANALYSIS_TASK,
SIGNALS_CLEANUP_TASK,
COMPOSITE_VIEW_REFRESH,
SIGNALS_CORRELATION_TASK
</param-value>
</init-param>
<init-param>
<param-name>MaxParallelTaskCounts</param-name>
<param-value>
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
</param-value>
</init-param>
<load-on-startup>11</load-on-startup>
</servlet>
TaskTypesとMaxParallelTaskCountsは、どちらのタスクをYellowfinが実行する予定かに基づき、各ノードで微調整が必要です。上記の構成では、ノードは各タイプのタスク最大2つを並行に実行します。より詳細な情報は、こちらを参照してください。
Web service cluster messaging(LEGACYモード)
YellowfinのLegacy Cluster Messagingは、AXIS webserviceにより制御されます。これは、起動時にすべてのノードが定義されていなくてはならず、各ノードのweb.xmlファイルでサービスエンドポイント、ポート番号、ユーザー、パスワードが定義されていなくてはいけません。Legacyモードでは、クラスタインスタンスは同一ホスト上に存在することができません。
LEGACYモードのweb.xmlへの変更
各ノードのweb.xml ファイルに、以下のサーブレット定義を追加しなくてはいけません。
<!-- Cluster Management -->
<servlet>
<servlet-name>ClusterManagement</servlet-name>
<servlet-class>com.hof.mi.servlet.ClusterManagement</servlet-class>
<init-param>
<param-name>ServiceUser</param-name>
<param-value>admin@yellowfin.com.au</param-value>
</init-param>
<init-param>
<param-name>ServicePassword</param-name>
<param-value>test</param-value>
</init-param>
<init-param>
<param-name>ServiceAddress</param-name>
<param-value>/services/AdministrationService</param-value>
</init-param>
<init-param>
<param-name>ServicePort</param-name>
<param-value>80</param-value>
</init-param>
<init-param>
<param-name>ClusterHosts</param-name>
<param-value>
192.168.4.184
</param-value>
</init-param>
<init-param>
<param-name>SerialiseWebserviceSessions</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>CheckSumRows</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>EncryptSessionId</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>EncryptSessionData</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>11</load-on-startup>
</servlet>
web.xml ファイルのパラメーター
以下のプロパティは、各ノードのweb.xml ファイルに設定することのできる、ClusterManagementサーブレット定義のオプションを概説しています。
プロパティ | 値 |
ClusterType | DYNAMIC、REPOSITORY、またはLEGACYです。 DYNAMICは、マルチキャストメッセージングを使用し、クラスタ内の他のノードを自動的に検知します。REPOSITORYはDYNAMICの拡張であり、マルチキャストメッセージングは機能しません。LEGACYはデフォルト設定であり、定義されたクラスタノードの一覧と通信をするために、webサービスを使用します。 |
BroadcastConfiguration | JGroups構成ファイルです。これは、マルチキャストネットワーキングが機能しない環境で、使用されるJGroupsの構成をカスタマイズすることができます。これは、DYNAMICモードでのみ利用可能であり、設定はオプションです。デフォルトでは、JGroupsはudp.xml内で定義された構成を使用します。 |
ServiceUser | 他ノードへのwebservice接続を検証するユーザーです。LEGACYモードでのみ利用可能です。 |
ServicePassword | ServiceUserのパスワードです。LEGACYモードでのみ利用可能です。 |
ServicePasswordEncrypted | True、またはFalseのどちらかを定義します。 ServicePasswordの値が暗号化されているかどうかで設定を行います。 |
ServiceAddress | Yellowfin webserviceのパスです。LEGACYモードでのみ利用可能です。 |
ServicePort | Yellowfinが実行されているポート番号です。LEGACYモードでのみ利用可能です。 |
ClusterHosts | クラスタ内のすべてのノードをカンマ区切りで表示した一覧です。これには、IPアドレス、またはホスト名を含めることができます。LEGACYモードでのみ利用可能です。 |
SerialiseWebserviceSessions | True、またはFalseのどちらかを定義します。 クラスタでシングルサインオンを使用している場合に必要となります。データベースへのトークンをシリアル化することで、任意のノードからトークンへアクセスすることができます。 |
CheckSumRows | True、またはFalseのどちらかを定義します。 データベース内のシリアル化されたwebserviceセッションレコードの合計を確認するセキュリティオプションです。これは、Yellowfinでの不正なセッション作成につながる可能性のあるテーブルへの変更を防ぐことができます。 |
EncryptSessionId | True、またはFalseのどちらかを定義します。 データベースでシリアル化されたwebserviceセッションIDを暗号化するセキュリティオプションです。これは、Yellowfinでの不正なセッション作成につながる可能性のあるテーブルへの変更を防ぐことができます。 |
EncryptSessionData | True、またはFalseのどちらかを定義します。 データベースでシリアル化されたwebsetviceセッションレコードを暗号化するセキュリティオプションです。これは、Yellowfinでの不正なセッション作成につながる可能性のあるテーブルへの変更を防ぐことができます。 |
AutoTaskDelegation | True、またはFalseのどちらかを定義します。 これは、DYNAMICおよび、REPOSITORYモードでのみ利用可能であり、設定はオプションです。 これを有効にすると、クラスタはバックグラウンドタスクを実行するために、自動的に「マスタ」ノードを割り当てます。これを有効化することで、バックグラウンドタスクを実行するために、手動でノードを設定する必要がありません。マスタノードは、明示的に無効化されていない場合、システムタスクも実行します。 AutoTaskDelegationが無効化されている場合、各ノードはLEGACYモードのように稼働します。バックグラウンドタスクを実行するために、特定のノードを指定する必要があるため、こちらのモードは推奨されません。 |
TaskTypes | これは、DYNAMICおよび、REPOSITORYモードでのみ利用可能なオプションです。 これは、ノード上で実行可能なタスクタイプのカンマ区切り一覧です。これが指定されない場合、ノードはバックグラウンドタスクを実行しません。 利用可能なタイプは、こちらで指定されています。 |
MaxParallelTaskCounts | これは、DYNAMICおよび、REPOSITORYモードでのみ利用可能なオプションです。 これは、ノード上で同時に実行できる(TaskTypeで指定された)各タイプのタスク数を示す、カンマ区切りの数字の一覧です。一覧内で指定された各値は、TaskTypeパラメーター内の値と1対1でマッピングされます。対応するカウントを持たないTaskTypeは無視されます。 |
SessionReplication | True、またはFalseのどちらかを定義します。 コンテナレベルのセッションレプリケーションを有効にする場合は、これをtrueに設定します。これは、クラスタ内のセッションを破棄するために使用されるロジックを変更します。 |
RepositoryDiscovery | True、またはFalseのどちらかを定義します。 これは、DYNAMICモードでのみ利用可能です。これにより、REPOSITORYモードがサポートされる前に、ビルドでRepositoryDiscoveryを有効にします。REPOSITORYモードは、RepositoryDiscoveryが有効化されたDYNAMICモードのエイリアスです。 |
追加のパラメーター
いくつかの環境下では、DYNAMICモードが機能しない場合があります。これは通常、サーバ上のネットワーク構成が原因です。デフォルトでJGroupsは、利用可能であればIPv6を使用します。IPv4を強制的に実行することで、正常に動作するようになる場合もあります。以下のコマンドを、catalina.sh、またはcatalina.batファイルに追加します。
ファイル | コマンド |
Catalina.sh |
JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
|
Catalina.bat |
set JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true
|
デフォルトのJGroups設定(udp.xml)を使用している場合は、マルチキャストアドレスとポート番号を設定することもできます。これは、クラスタノードがお互いを検出できない環境で役立ちます。
ファイル | コマンド |
Catalina.sh |
JAVA_OPTS="$JAVA_OPTS -Djgroups.udp.mcast_addr=228.0.0.5 -Djgroups.udp.mcast_port=47885"
|
Catalina.bat |
set JAVA_OPTS=%JAVA_OPTS% -Djgroups.udp.mcast_addr=228.0.0.5 -Djgroups.udp.mcast_port=47885
|