CSA: マルチキャストの代替としての JDBC Ping の設定

ccppmop1561
ネットワーク マルチキャストの代替として、Clarity PPM では、データベース レベルで JGROUPS JDBC ping ディスカバリ プロトコルを使用して、JDBC ベースのメッセージングのオプション実装が可能です。 JDBC ping は、ディスカバリに使用されるクラスタ ノードの情報を格納するのに共通の共有データベースを使用します。
免責事項
: 別途通知があるまで、限定的なサポートがこの設定オプションで利用できます。 マニュアルのこのページを読んだ後に、質問がある、または問題が発生した場合は、引き続き CA サポートに問い合わせできます。ただし顧客やパートナーがその展開方法を評価しているので、普及しつつあるこの比較的新しい機能に対して遅延が予測されます。 JDBC ping オプションは、CA Clarity PPM リリース 15.3 以降のみ利用可能で、サポートされています。
理想的には、すべてのクラスタ ノードは、同じデータベースにアクセスできます。 ノードの開始時に、データベースから既存のメンバーに関する情報を照会して、コーディネータを決定し、更に CA PPM ノードに対してクラスタへ参加するよう要求します。 各ノードも自身に関する情報をテーブルに挿入して、他のノードのメンバーが検索できるようにします。 メッセージはマルチキャストの場合と同様に送信されます。異なるのは JDBC で処理される点です。
Jaspersoft では JDBC ping を使用できません。 Jaspersoft のクラスタ化された環境では、マルチキャストの使用を続行する必要があります。 1 台のサーバ上で Jaspersoft を展開する場合は、マルチキャストの使用を続行する必要があります。 シングルサーバの Jaspersoft のインスタンスは、PPM への JDBC データベースの直接接続を使用します。
2
CA Clarity PPM システム管理の新しい略語(CSA)に対して、以前の略語(NSA)がまだ使用されている場合があります。
JDBC Ping: 前提条件
1 未完了 本稼働システムで運用を開始する前にテストまたは開発などの非本番環境のすべての設定を確認します。 6 未完了 CA PPM の設定でマルチキャストまたは JDBC PING を使用していることを確認します。 これらのオプションは混在できません。 2 未完了 JDBC PING を使用している場合は、JDBC PING を使用するように CA PPM のすべてのサービスが設定されていることを確認します。 3 未完了 すべてのサーバですべての NSA パスワードが同じ値に設定されていることを確認します。 1 つの共通パスワードが、NSA サービス全体で、クラスタのすべてのメンバに共有されます。 このパスワードは、さまざまなクラスタ ノードによって送信されたマルチキャスト パケットの検証に使用されます。 リセットが必要な場合は、以下のコマンドを実行します。
admin password
4 未完了 サーバに複数の IP アドレス(複数の NIC)がある場合は、Beacon を 1 つの特定の IP アドレスにバインドするように設定します。 変更を加えた後、Beacon サービスを再展開します。 5 未完了
すべてのサービスが同じサブネット内にあることを確認します。
  • Windows で確認するには、
    ipconfig
    を使用します。
  • Linux で確認するには、
    ifconfig
    を使用します。
JDBC Ping: 設定
CSA および properties.xml ファイルで、エントリを慎重に作成します。 サーバのプロビジョニング中に 1 つのネット マスク設定を誤ることにより、サービスが相互に通信できないことがあります。
20180614-JDBC-PING-CSA.jpg
以下の手順に従います。
  1. http://<ca_ppm_server>:<port>
    に移動して、CSA を開きます。 例:
    http://ppm_server.my.org:8090
    Clarity PPM。
  2. ホーム
    ]-[
    すべてのサービス
    ]をクリックします。 変更を加える前に、CA PPM のすべてのサービスを停止します。
  3. [ホーム]
    -
    [サーバ]
    をクリックします。
  4. アプリケーション クラスタ内の各サーバに対して以下の手順を繰り返してください。
    1. サーバをクリックします。 サーバ名はリンクとして表示されます。 たとえば、my_ca_ppm:<port>(ローカル)です。
      プロパティ ページが表示されます。
    2. マルチキャスト アドレス
      ]フィールドで、必須フィールドを満たすために、デフォルト IP をそのままにします。
    3. [マルチキャスト ポート]
      フィールドで、以前の値を残すか、8090 または 9090 などの標準的なポート値を入力し、必須フィールドを設定します。
    4. バインド アドレス
      ]フィールドに、アプリケーション サーバの IP アドレスを入力します。 バインド アドレスは、同じサブネット上で、同じ IP インターフェースをすべてのマシンが使用していることを保証するローカル ネットワーク インターフェースの IP です。 複数のサーバがある場合は、各サーバにはそのサーバの正しいバインド/IP アドレスが必要です。 サーバに複数の NIC と、そのため複数の IP アドレスがある場合は、CA PPM がネットワーク通信に使用する IP アドレスを指定します。
      マルチキャストとは異なり、JDBC PING ではすべてのサーバが同じサブネットに属している必要はありません。
    5. [保存]
      をクリックします。
  5. 各サーバ上の
    properties.xml
    ファイルを開きます。
    1. NSA
      セクションで、以下の例に示すように、
      useJDBCPing="true"
      パラメータを追加します。
      <nsa bindAddress="###.###.###.###" multicastAddress="###.###.###.###" multicastPort="9191" clientPort="9288" serviceName="CA PPM Beacon 123" useJDBCPing="true" />
      # を使用する IP ノードの値に置き換えます。
    2. CSA で
      [バインド アドレス]
      フィールドの値を設定しなかった場合は、その値を手動で
      properties.xml
      ファイルに設定できます。
      bindAddress
      プロパティでは、特定のアプリケーション サーバに関連付けられた IP アドレスを使用する必要があります。
    3. 各サーバに対してこれらの手順を繰り返します。
      サーバに複数の IP アドレス(NIC)がある場合、Beacon を 1 つの特定の IP アドレスにバインドするように設定します。 この手順は必須ではありません。ただし、Beacon が正しく設定されていない場合、サーバは CSA で表示されません。 変更を加えた後に、Beacon サービスを停止、削除、追加、および展開します。
  6. CSA で、[
    ホーム
    ]-[
    すべてのサービス
    ]をクリックします。 CA PPM のすべてのサービスを開始します。
  7. クラスタ内のすべてのサーバ上で Beacon サービスが正常に開始されていることを確認します。 各アプリケーション サーバ上で、以下のコマンドを実行します。
    niku start beacon
  8. Beacon サービスがアクティブのままであることを確認します。 各アプリケーション サーバ上で、以下のコマンドを実行します。
    niku status beacon
JDBC Ping: JDBC Ping メッセージングが有効であることの確認
JDBC ping を有効にすると、PPM データベースで
CMN_JGROUPS_PING
という名前のテーブルが作成されます。
  • JDBC Ping のアドレス情報は、このテーブルに格納されます。
  • クラスタの各ノードも、このテーブルに登録されます。
以下の手順に従います。
  1. このテーブルを表示する権限を持つデータベースにアクセスします。
  2. PPM のすべてのサービスに関する情報が
    CMN_JGROUPS_PING
    データベース テーブルに含まれていることを確認します。
    以下の図に例を示します。
    image2018-6-11 12:24:49.png
    CREATED
    : 最近ポストされたメッセージの日付と時刻。
    CLUSTER_NAME
    : 各メンバ サーバの親クラスタのトピック名。
    PING_DATA
    : メッセージ コンテンツ。
    UUID
    : 各サーバに対する一意の識別子。アプリケーションのインスタンス ID とトピック名で構成される。 この例では、トピック名はすべてのケースで CLRTY に設定されます。
  3. JGroups で JDBCPing を使用している場合、クラスタ内のノードの検出はデータベースを使用して行われます。 ノードが検出されると、ノード間のプロトコルは TCP なので、ピア ツー ピアである必要があります。
    1. 127.0.0.1 を指定して
      $HOSTNAME
      を使用するように
      my/etc/hosts
      ファイルを更新します。
    2. telnet または nc コマンドを使用してポート接続をテストします。
    3. beacon ポート上の通信が
      開いている
      ことを確認します。
JDBC ping への切り替えでは、SSO を使用した PPM 統合で追加の手順は不要です。
CA PPM のハイブリッド クラウドへの移行
CA では、CA PPM SaaS および他の CA クラウド ソリューションを提供します。 一部のお客様が、カスタマイズされた AWS や Microsoft Azure の設定を展開し管理することも認識しています。 CA PPM 管理者として、以下の概略手順を実行できます。
  1. アップグレードした後は、JDBC ping に切り替えます。 複数の PPM アプリケーション サービスは、JDBC ping を使用して相互に通信できます。
  2. Jaspersoft のシングル サーバ環境は、JDBC の直接接続を使用して、PPM データベース サーバと通信できます。
この時点で、クラスタ化 Jaspersoft 構成は、Azure、AWS、他のパブリック、プライベート、またはハイブリッド クラウド環境でサポートされていません。 ただし、この機能の需要を認識しています。 以下の新しいセクションを参照してください。 JMS を使用したレプリケート済みキャッシュについては、限定サポートが利用可能です。
JMS による JasperReports サーバのレプリケート済みキャッシュの設定
Azure、AWS、Google Cloud、およびマルチキャストが無効で JDBC ping が有効なその他のパブリック クラウドでは、クラスタ化 Jaspersoft 構成のサポートが以前はサポートされていませんでした。 Jaspersoft サーバの ehcache レプリケーションで JMS (Java Message Service)の限定サポートが利用できるようになりました。
JMS は、メッセージ キューとの対話用のメカニズムです。 Linux および Windows のオープン ソース オプションには、Apache ActiveMQ および Oracle Open MQ が含まれています。 JasperReports 6.1.0 以降を使用している場合、JMS での Ehcache レプリケーションが利用可能になり、サポートされるようになりました。 (当社のテストおよびこのドキュメントでは、ActiveMQ 5.12.1 を使用しました)
Ehcache JMS レプリケーション モジュールを使用すると、組織がキャッシュ用のメッセージ キュー投資を活用できます。
  • 各キャッシュ ノードは、
    ehcache.xml
    で <topicBindingName> として設定されている、事前定義済みのトピックをサブスクライブします。
  • 各レプリケート済みキャッシュは、そのトピックにキャッシュ要素を発行します。 レプリケーションは、Ehcache 標準レプリケーション メカニズムに従ってキャッシュごとに設定されます。
  • データは任意の言語で外部トピック パブリッシャからキャッシュ ノードに直接プッシュされます。 データがレプリケーション トピックに送信されると、キャッシュ サブスクライバによって自動的に取得されます。
  • JMSCacheLoader は応答を送信する前に、以下のキュー タイプのいずれかにキャッシュ ロード要求を送信します。
    • Ehcache クラスタ ノード
    • 外部キュー レシーバ
以下の画像は、エンティティ関係を示しています。*
apache_jms_diagram.png
* Apache Software Foundation から提供された画像です。 Apache ActiveMQ、Apache、Apache の羽のロゴ、および Apache ActiveMQ プロジェクトのロゴは、Apache Software Foundation の商標です。
以下の手順に従います。
  1. クラスタ内に JasperReports サーバを含む Clarity PPM のサポートされているリリースがインストールされていることを確認します。
  2. すべての JasperReports サーバ ノードが単一のデータベース ノードを参照していることを確認します。
  3. ActiveMQ サーバ インスタンスをインストールおよび設定します。 ActiveMQ をダウンロードしてインストールするには、http://activemq.apache.org/version-5-getting-started.html を参照してください。
  4. ActiveMQ ブローカのデフォルト ポートがアクセス可能であることを確認します。
  5. ActiveMQ サーバを起動します。
  6. ehcache_jms.zip をダウンロードします。 設定は、
    ehcache.xml
    ファイルで実行されます。
  7. 各クラスタでは、レプリケーション用に固定トピック名を使用する必要があります。 デフォルトでは、ActiveMQ はデスティネーションの自動作成をサポートします。
  8. CacheManager に JMSCacheManagerPeerProviderFactory をグローバルに設定します。 この手順は CacheManager ごとに 1 回ずつ実行します(ehcache.xml ファイルごとに 1 回)。
  9. レプリケートする各キャッシュ設定で、キャッシュに JMSCacheReplicatorFactory を追加します。
    JasperReports サーバ 6.1.0 に付属している
    ehcache.xml
    では、上記のすべての設定がすでに利用可能です。 JMS を使用したキャッシュ分散の設定については、以下の手順を実行してください。 RMI、JMS、および AWS では、マルチキャスティングがサポートされています。 当社のテストでは、RMI メカニズムに従っています。
  10. tomcat サーバを停止します。
  11. <tomcat>/webapps/reportservice/WEB-INF
    に移動して、エディタで
    ehcache_hibernate.xml
    ファイルを開きます。
  12. ***NO CLUSTERING*** と ***END of NO CLUSTERING*** コメントの間で、ファイルの以下のセクションのコメント化を解除するか、削除します。
    <!-- *********************** NO CLUSTERING ************************* --> <!-- <cache name="defaultRepoCache" maxElementsInMemory="10000" eternal="false" overflowToDisk="false" timeToIdleSeconds="36000" timeToLiveSeconds="180000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" statistics="true"> </cache> <cache name="aclCache" maxElementsInMemory="10000" eternal="false" overflowToDisk="false" timeToIdleSeconds="360000" timeToLiveSeconds="720000" diskPersistent="false"> </cache>--> <!-- ******************** END of NO CLUSTERING ****************** -->
  13. <!-- START and END --> 行を削除することで、***JMS*** および ***END OF JMS*** セクションのコメント化を解除します。 その結果、JMS を介した Ehcache レプリケーションが有効化されます。
    <!-- ****************** JMS ****************** --> <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.jms.JMSCacheManagerPeerProviderFactory" properties="initialContextFactoryName=com.jaspersoft.jasperserver.api.engine.replication.JRSActiveMQInitialContextFactory, providerURL=tcp://EXAMPLE_SERVER-I154330:61616, replicationTopicConnectionFactoryBindingName=topicConnectionFactory, replicationTopicBindingName=ehcache, getQueueConnectionFactoryBindingName=queueConnectionFactory, getQueueBindingName=ehcacheQueue, topicConnectionFactoryBindingName=topicConnectionFactory, topicBindingName=ehcache" propertySeparator=","/> <cache name="org.hibernate.cache.StandardQueryCache" maxEntriesLocalHeap="5000" maxElementsInMemory="5000" eternal="false" timeToLiveSeconds="120"> <cacheEventListenerFactory class="net.sf.ehcache.distribution.jms.JMSCacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true, asynchronousReplicationIntervalMillis=1000" propertySeparator=","/> <cacheLoaderFactory class="net.sf.ehcache.distribution.jms.JMSCacheLoaderFactory" properties="initialContextFactoryName=com.jaspersoft.jasperserver.api.engine.replication.JRSActiveMQInitialContextFactory, providerURL=tcp://EXAMPLE_SERVER-I154330:61616, replicationTopicConnectionFactoryBindingName=topicConnectionFactory, replicationTopicBindingName=ehcache, getQueueConnectionFactoryBindingName=queueConnectionFactory, getQueueBindingName=ehcacheQueue, topicConnectionFactoryBindingName=topicConnectionFactory, topicBindingName=ehcache" propertySeparator=","/> </cache> <cache name="org.hibernate.cache.UpdateTimestampsCache" maxEntriesLocalHeap="5000" eternal="true"> <cacheEventListenerFactory class="net.sf.ehcache.distribution.jms.JMSCacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=true, replicateRemovals=true, asynchronousReplicationIntervalMillis=1000" propertySeparator=","/> <cacheLoaderFactory class="net.sf.ehcache.distribution.jms.JMSCacheLoaderFactory" properties="initialContextFactoryName=com.jaspersoft.jasperserver.api.engine.replication.JRSActiveMQInitialContextFactory, providerURL=tcp://samsh06-I154330:61616, replicationTopicConnectionFactoryBindingName=topicConnectionFactory, replicationTopicBindingName=ehcache, getQueueConnectionFactoryBindingName=queueConnectionFactory, getQueueBindingName=ehcacheQueue, topicConnectionFactoryBindingName=topicConnectionFactory, topicBindingName=ehcache" propertySeparator=","/> </cache> <cache name="defaultRepoCache" maxElementsInMemory="10000" eternal="false" overflowToDisk="false" timeToIdleSeconds="36000" timeToLiveSeconds="180000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" statistics="true"> <cacheEventListenerFactory class="net.sf.ehcache.distribution.jms.JMSCacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=true, replicateRemovals=true, asynchronousReplicationIntervalMillis=1000" propertySeparator=","/> <cacheLoaderFactory class="net.sf.ehcache.distribution.jms.JMSCacheLoaderFactory" properties="initialContextFactoryName=com.jaspersoft.jasperserver.api.engine.replication.JRSActiveMQInitialContextFactory, providerURL=tcp://EXAMPLE_SERVER-I154330:61616, replicationTopicConnectionFactoryBindingName=topicConnectionFactory, replicationTopicBindingName=ehcache, getQueueConnectionFactoryBindingName=queueConnectionFactory, getQueueBindingName=ehcacheQueue, topicConnectionFactoryBindingName=topicConnectionFactory, topicBindingName=ehcache" propertySeparator=","/> </cache> <cache name="aclCache" maxElementsInMemory="10000" eternal="false" overflowToDisk="false" timeToIdleSeconds="360000" timeToLiveSeconds="720000" diskPersistent="false"> <cacheEventListenerFactory class="net.sf.ehcache.distribution.jms.JMSCacheReplicatorFactory" properties="replicateAsynchronously=true, replicatePuts=false, replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true, asynchronousReplicationIntervalMillis=1000" propertySeparator=","/> <cacheLoaderFactory class="net.sf.ehcache.distribution.jms.JMSCacheLoaderFactory" properties="initialContextFactoryName=com.jaspersoft.jasperserver.api.engine.replication.JRSActiveMQInitialContextFactory, providerURL=tcp://EXAMPLE_SERVER-I154330:61616, replicationTopicConnectionFactoryBindingName=topicMConnectionFactory, replicationTopicBindingName=ehcacheM, getQueueConnectionFactoryBindingName=queueMConnectionFactory, getQueueBindingName=ehcacheMQueue, topicConnectionFactoryBindingName=topicMConnectionFactory, topicBindingName=ehcacheM" propertySeparator=","/> </cache> <!-- ******************** END of JMS ************************* -->
  14. ActiveMQ インスタンスのブローカ URL を指定します。 XML ファイルで
    providerURL
    属性を検索し、ActiveMQ ブローカ URL の値を指定します。
    ehcache.xml
    ファイルの 5 つの異なる場所で
    providerURL
    属性を更新します。 たとえば、
    providerURL=tcp://EXAMPLE_SERVER-I154330:61616
    のようになります。
    <cacheLoaderFactory class="net.sf.ehcache.distribution.jms.JMSCacheLoaderFactory" properties="initialContextFactoryName=com.jaspersoft.jasperserver.api.engine.replication.JRSActiveMQInitialContextFactory, providerURL=tcp://localhost:61616, replicationTopicConnectionFactoryBindingName=topicMConnectionFactory, replicationTopicBindingName=ehcacheM, getQueueConnectionFactoryBindingName=queueMConnectionFactory, getQueueBindingName=ehcacheMQueue, topicConnectionFactoryBindingName=topicMConnectionFactory, topicBindingName=ehcacheM" propertySeparator=","/>
  15. ファイルを保存します。
  16. 以下の場所で同じ設定変更を繰り返します。
    • <tomcat>/webapps/reportservice/WEB-INF/ehcache_hibernate.xml
    • <tomcat>/webapps/reportservice/WEB-INF/classes/ehcache_hibernate.xml
  17. クラスタ内の利用可能なすべての JasperReports サーバ インスタンスで同じ設定(すべての手順)を繰り返します。
  18. 以下のディレクトリを削除するか、そうでなければクリーンアップします。
    • tomcat
      temp
    • work/Catalina/localhost
  19. tomcat サーバを起動します。
Windows サーバ上での JasperReports 用 ActiveMQ の設定
  1. Apache (http://activemq.apache.org/activemq-5158-release.html)から Activemq サーバをダウンロードします。
  2. Windows 用の zip ファイルを抽出します。
  3. Java Jdk 1.7 以降をインストールします。 このドキュメントでは、JDK 11 を使用しています。
  4. サーバ上で、JAVA_HOME 環境変数を設定します。
  5. ActiveMQ が抽出されたディレクトリに移動します。 この例では、
    E:\activemq\bin
    です。
  6. activemq start
    」コマンドを実行して、activemq サーバを起動します。
    E:\activemq\bin>activemq start
  7. サーバの起動後に、ポート 8161 から管理コンソールにアクセスできます。 ブラウザを開き、「
    http://hostname:8161/admin
    」と入力します。 既定のユーザ名/パスワードは admin です。
ActiveMQ を使用した JasperReports サーバの設定
  1. Jasper サービスを停止します。
  2. %TOMCAT_HOME%/webapps/reportservice/WEB-INF
    に移動します。
  3. ehcache_hibernate.xml
    」という名前のファイルを編集します。
  4. RMI
    」および「
    END OF RMI
    」セクションの間の行をコメント化します。
    image2019-4-3_12-51-54.png
  5. JMS
    」および「
    END OF JMS
    」セクションの間の行のコメント化を解除します。
  6. ProvideURL
    の値を「」から「」に置き換えます(hostname は ActiveMQ サーバの FQDN です)。 上記のセクションの間で、この値を変更する必要がある場所が 5 つあります。
  7. ehcache_hibernate.xml
    」を、
    %TOMCAT_HOME%/webapps/reportservice/WEB-INF
    フォルダの下の「
    classes
    」フォルダにコピーします。
  8. jasper サービスを開始します。
  9. ActiveMQ の管理ページにログインした場合は、
    ehcacheQueue
    および
    ehcacheMQueue
    という 2 つのキャッシュ プロバイダが表示されます。
ActiveMQ コンソールの監視
  1. ActiveMQ サーバ インスタンスをダウンロード、インストール、および設定します。 http://activemq.apache.org/version-5-getting-started.html を参照してください。
  2. http://localhost:8161/admin から Web コンソールにアクセスします。 localhost を、ActiveMQ Web コンソールにリモートでアクセスするサーバの IP で置き換えます。
  3. この ActiveMQ インスタンスに接続されている Jaspersoft インスタンスの合計数を確認するには、
    [Queues]
    タブに移動します。
    たとえば、http://localhost:8161/admin/queues.jsp です。 このページのテーブルには、ActiveMQ サーバ インスタンスに接続されている Jaspersoft インスタンスの数が表示されます。
    image2019-4-29_11-14-5.png
  4. ActiveMQ に接続されている Jaspersoft インスタンスのリストを確認するには、
    [Connections]
    タブに移動します。
    たとえば、https://localhost:8161/admin/connections.jsp です。
    image2019-4-29_11-15-11.png
デフォルトの ActiveMQ の「admin」のパスワードの変更
  1. ファイル
    <activemq-installer>/conf/jetty-realm.properties
    を参照します。
  2. 形式が以下であることに注意してください。
    username:password,rolename
    既定値:
    admin:admin,admin
  3. 2 番目の値を変更してパスワードを更新します。
    admin: <新規パスワード>, admin