Coherence*Webを使用したPIA Webレジリエンシの実装

PeopleSoft Internet Architecture (PIA) WebサーバーのCoherence*Webを使用してWebレジリエンシを追加します。Coherence*Webは、各PIA Webサーバー上に構成され、PIA WebLogicサーバーとは別のパラレルに実行されます。これは、Coherence*Webのアウトオブプロセス・トポロジと呼ばれます。クラスタは、複数のCoherence*Webキャッシュ・サーバーの起動時に形成されます。Coherence*Webを構成したら、Coherence*Webと連携するようにPIA Webサーバーを構成し、このクラスタに参加します。

Coherence*Webの構成

Coherence*Webの起動および管理に必要なインフラストラクチャおよびスクリプトを設定します。製品を起動するスクリプトの作成中に、スクリプトを実行する前に完了するタスクがいくつかあります。

PeopleTools 8.57では、Coherence*WebはFusion Middlewareインストールにバンドルされています。このプロジェクトでは、/u01/app/psft/pt/bea/coherenceディレクトリにあります。これは、すべてのPIA Webサーバーがアクセスできる共有ディレクトリです。

  1. Coherence*Web構成およびログ・ファイルのディレクトリを作成します。
    • ノード:すべてのPIA Webサーバー・ノード
    • ユーザー: psadm2
    $ . ./psft.env
    $ mkdir -p $PS_CFG_HOME/coherence/config
    $ mkdir -p $PS_CFG_HOME/coherence/log
  2. psft.envファイルを編集して、次の環境変数をpsft.envファイルに追加します。
    • ノード:すべてのPIA Webサーバー・ノード
    • ユーザー: psadm2
    export COHERENCE_HOME=$BASE_DIR/pt/bea/coherence
    export COHERENCE_CONFIG=$PS_CFG_HOME/coherence/config
    export COHERENCE_LOG=$PS_CFG_HOME/coherence/log
    環境ファイルを再ソースします。
  3. 各PIA Webサーバー・コンピュート・インスタンスのプライベートIPアドレスを取得します。

    このプロジェクトでは、各PIA Webサーバーには、Coherence*Webドキュメントのwell-known-address (WKA)と呼ばれるプライベートIPアドレスがあります。これらのプライベートIPアドレスは、後のステップで必要になります。

    • ノード:すべてのPIA Webサーバー・ノード
    • ユーザー: psadm2、OCIコンソール・ユーザー
    1. OCIコンソールにログインします。
    2. 「コンピュート」「インスタンス」の順にクリックします。
    3. Webサーバーを保持するコンパートメントを選択します。
    4. リストされている各PIA Webサーバーをクリックして、そのプライベートIPアドレスを表示します。住所を記録します。
  4. COHERENCE_CONFIGディレクトリにCoherenceオーバーライド・ファイルを作成します。
    ファイルの任意の名前を選択できますが、通常はtangosol-coherence-override.xml,と呼ばれ、複数のCoherence*Webドキュメントでその名前で参照されます。
    • ノード:すべてのPIA Webサーバー・ノード
    • ユーザー: psadm2
    XMLファイルのコンテンツは次のようになります。
    <?xml version="1.0"?>
    <!DOCTYPE coherence SYSTEM "coherence-override.dtd">
    <!--
    This operational configuration override file is set up for use with Coherence
    -->
    <coherence>
    <cluster-config>
    <unicast-listener>
      <well-known-addresses>
       <socket-address id="1">
          <address>10.0.103.85</address>
       </socket-address>
       <socket-address id="2">
          <address>10.0.103.203</address>
      </socket-address>
    </well-known-addresses>
    <port system-property="tangosol.coherence.localport">8088</port>
    <address system-property="coherence.localhost">10.0.103.0/24</address>
    </unicast-listener>
    </cluster-config>
    </coherence>
    1. すべてのPIA WebサーバーのプライベートIPアドレスを指定します。
      この構成例では、2つのWebサーバーを使用します。
    2. ファイルをすべてのPIA Webサーバーに配置します。コンテンツは同一である必要があります。
    パラメータ<address system-property="coherence.localhost">10.0.103.0/24</address>は、PIA Webサーバーを提供するプライベート・サブネット全体を指定します。Coherence*Webキャッシュ・サーバーが起動すると、実行されているローカル・ホストのプライベートIPアドレスが取得されます。
  5. 各PIA WebサーバーのバックグラウンドでCoherence*Webキャッシュ・サーバーを起動するスクリプトを作成します。
    スクリプトの例は、startCacheServer.shを参照してください。これは、GitHubのラッパー・ディレクトリにあります。
    • ノード:すべてのPIA Webサーバー・ノード
    • ユーザー: psadm2

ノート:

このスクリプトは、Coherence*Webネットワークの構成後に実行します。

Coherence*Webネットワークの構成

各PIA Webサーバーは単独で実行され、他のWebサーバーと通信しません。このレイヤーでサーバー間の回復性を実現するために、Coherence*Webサーバーはクラスタを形成し、キャッシュ・サーバーが相互に通信できるようにするネットワーク構成を必要とします。

Coherence*Webがキャッシュ・クラスタを形成できるようにするには、OCIコンソールを使用して、app_private_seclistに関連付けられたセキュリティ・リストにイングレス・ルールおよびエグレス・ルールを追加します。ポート8088および8089に加えて、Coherence*Webドキュメントで指定されているデフォルト・ポートを使用します。

イングレス・ルール:

ステートレス ソースCIDR IPプロトコル ソース・ポート範囲 宛先ポート範囲
NO 10.0.103.0/24 TCP すべて 7
NO 10.0.103.0/24 UDP すべて 7
NO 10.0.103.0/24 TCP すべて 7574
NO 10.0.103.0/24 UDP すべて 7574
NO 10.0.103.0/24 TCP すべて 8088-8089

エグレス・ルール:

ステートレス 宛先CIDR IPプロトコル ソース・ポート範囲 宛先ポート範囲
NO 0.0.0.0/0 TCP すべて すべて
NO 0.0.0.0/0 UDP すべて すべて
  1. OCIコンソールにログインします。
  2. app_private_seclistに関連付けられているセキュリティ・リストにイングレス・ルールおよびエグレス・ルールを追加します。
  3. 各コンピュート・インスタンスで次のfirewall-cmdコマンドをrootとして実行し、各PIA Webコンピュート・インスタンスの表でリストされているポートを有効にします。
    環境に合わせて変更します。
    $ firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.0.103.0/24 port port=7 protocol=tcp accept' –permanent
    $ firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.0.103.0/24 port port=7 protocol=udp accept' –permanent
    $ firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.0.103.0/24 port port=8088-8089 protocol=tcp accept' –permanent
    $ firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.0.103.0/24 port port=7574 protocol=tcp accept' –permanent
    $ firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.0.103.0/24 port port=7574 protocol=udp accept' --permanent
    $ firewall-cmd –reload
  4. 最初のCoherence*Webキャッシュ・サーバー(iad-psft-hcm-web01)を起動します。

    1つのコンピュート・インスタンスで次のコマンドをpsadm2として発行して、GitHubのBasic TasksディレクトリにあるstartCacheServer.shスクリプトを使用してキャッシュ・サーバーを起動します。次に、スクリプト・ディレクトリが管理者のPATHにあることを前提としています。

    $ startCacheServer.sh
    最初のキャッシュ・サーバーが起動されると、出力は次のようになります。
    …
    2022-08-31 21:15:11.539/0.639 Oracle Coherence 12.2.1.3.0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/u01/app/psft/pt/bea/coherence/lib/coherence.jar!/tangosol-coherence.xml" 
    …
    2022-08-31 21:15:16.137/5.237 Oracle Coherence GE 12.2.1.3.0 <Info> (thread=main, member=n/a): Started cluster Name=psadm2's cluster, ClusterPort=7574
    
    WellKnownAddressList(
      10.0.103.203
      10.0.103.85
      )
    
    MasterMemberSet(
      ThisMember=Member(Id=1, Timestamp=2022-08-31 21:15:12.825, Address=10.0.103.85:8088, MachineId=10879, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web01,process:21537, Role=CoherenceServer)
      OldestMember=Member(Id=1, Timestamp=2022-08-31 21:15:12.825, Address=10.0.103.85:8088, MachineId=10879, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web01,process:21537, Role=CoherenceServer)
      ActualMemberSet=MemberSet(Size=1
        Member(Id=1, Timestamp=2022-08-31 21:15:12.825, Address=10.0.103.85:8088, MachineId=10879, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web01,process:21537, Role=CoherenceServer)
        )
      MemberId|ServiceJoined|MemberState|Version
        1|2022-08-31 21:15:12.825|JOINED|12.2.1.3.0
      RecycleMillis=1200000
      RecycleSet=MemberSet(Size=0

    構成が正しく選択されていることを確認するには、WellKnownAddresslistセクションにリストされているIPアドレスを確認します。

    1つのキャッシュ・サーバーのみを起動したため、メンバー(キャッシュ・サーバーが起動されたコンピュート・インスタンス)はiad-psft-hcm-web01のみです。

  5. 同じスクリプトを使用して、2番目の中間層コンピュート・インスタンス(iad-psft-hcm-web02)でキャッシュ・サーバーを起動します。
    $ startCacheServer.sh
    クラスタに参加する必要があり、ログ・ファイルは次のようになります。
    …
    
    2022-08-31 21:15:36.513/0.628 Oracle Coherence 12.2.1.3.0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/u01/app/psft/pt/bea/coherence/lib/coherence.jar!/tangosol-coherence.xml" 
    …
    2022-08-31 21:15:38.307/2.421 Oracle Coherence GE 12.2.1.3.0 <Info> (thread=main, member=n/a): Started cluster Name=psadm2's cluster, ClusterPort=7574
    
    WellKnownAddressList(
      10.0.103.203
      10.0.103.85
      )
    
    MasterMemberSet(
      ThisMember=Member(Id=2, Timestamp=2022-08-31 21:15:37.981, Address=10.0.103.203:8088, MachineId=10880, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web02,process:12859, Role=CoherenceServer)
      OldestMember=Member(Id=1, Timestamp=2022-08-31 21:15:12.825, Address=10.0.103.85:8088, MachineId=10879, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web01,process:21537, Role=CoherenceServer)
      ActualMemberSet=MemberSet(Size=2
        Member(Id=1, Timestamp=2022-08-31 21:15:12.825, Address=10.0.103.85:8088, MachineId=10879, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web01,process:21537, Role=CoherenceServer)
        Member(Id=2, Timestamp=2022-08-31 21:15:37.981, Address=10.0.103.203:8088, MachineId=10880, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web02,process:12859, Role=CoherenceServer)
        )
      MemberId|ServiceJoined|MemberState|Version
        1|2022-08-31 21:15:12.825|JOINED|12.2.1.3.0,
        2|2022-08-31 21:15:37.981|JOINED|12.2.1.3.0
      RecycleMillis=1200000
      RecycleSet=MemberSet(Size=0
        )
    
    …

    前述のログ・ファイル・スニペットは、クラスタ内の2つのメンバー(両方ともCoherenceServerロール)を示しています。

  6. コンピュート・インスタンスiad-psft-hcm-web01で最初に起動したキャッシュ・サーバーのログ・ファイルを確認します。iad-psft-hcm-web02への接続が確立されていることを示す次のようなエントリが表示されます。
    2022-08-31 21:15:38.179/27.279 Oracle Coherence GE 12.2.1.3.0 <D6> (thread=Cluster, member=1): TcpRing connected to Member(Id=2, Timestamp=2022-08-31 21:15:37.981, Address=10.0.103.203:8088, MachineId=10880, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web02,process:12859, Role=CoherenceServer)

    キャッシュ・サーバーを1つずつ初めて起動し、それぞれをチェックして、正しく構成されていることを確認します。今後、中間層を起動する必要がある場合は、すべてのCoherence*Webキャッシュ・サーバーを一度に起動できます。

  7. 各コンピュート・インスタンスで1つのメンバーのみが表示されている場合、Coherence*Webキャッシュ・サーバーは相互に「参照」できません。
    これは、1つ以上のネットワーク・ポートがブロックされていることが原因です。ブロックされているポートをテストする1つの方法は、Netcat (nc)ユーティリティを使用することです。このユーティリティは、各PIA Webコンピュート・インスタンスにインストールする必要があります。
    1. yumを使用して、各PIA Webコンピュート・インスタンスにユーザーrootとしてnc)ユーティリティをインストールします
      # yum install -y nc
    2. rootとしてログインし、PIA Webサーバー上のTCPパケットとUDPパケットの両方のポートをテストします。
      たとえば、ポート7574がiad-psft-web01で開いているかどうかをテストするには、ポート7574でUDPパケットをリスニングするNetcatリスナーを起動します。
      # nc -u -l iad-psft-web01 7574

      ncコマンドは待機し、そこに置きます。

    3. 別のセッションで、iad-psft-web02rootとしてログインします。ポート7574でiad-psft-web01に接続するNetcat UDPクライアントを起動します。
       # nc -u iad-psft-web01 7574

      ncコマンドは待機します。

    4. そのターミナルで、testのようなものを入力して[Enter]を押します。
      「test」という単語がもう一方の端末に表示されます。
    5. ncがリスニングしているサーバー・ターミナルでtestと入力し、[Enter]を押します。
      クライアント端末に表示されます。
    6. テストが成功した場合は、ロールを切り替えてiad-psft-web02でncリスナーを実行し、iad-psft-web01でクライアントを実行してテストを繰り返します。
    7. テストが成功しなかった場合、次のような原因が考えられます。
      • PIA Webサーバー・サブネットの関連するセキュリティ・リストで、ポート7574のUDPプロトコルを許可するイングレス・ルールはありません。
      • PIA Webサーバー・サブネットの関連するセキュリティ・リストで、ポート7574のUDPプロトコルを許可するエグレス・ルールはありません。
      • firewall-cmdコマンドは、ポート7574のUDPトラフィックを許可するために、各PIA Webサーバーで実行されていません。
      Coherence*Webには、TCPとUDPの両方の接続をテストするためのデータグラム・テスト・ユーティリティが用意されています。詳細は、「データグラム・テスト・ユーティリティの使用」を参照してください。

Coherence*Web用のPIA Webサーバーの構成

Coherence*Webキャッシュ・サーバーが構成され、すべてのPIA Webサーバー・コンピュート・インスタンスで実行されている状態で、PIA Webサーバーを構成できるようになりました。

PeopleTools構成ファイルの最新バージョンには、必要な構成のほとんどがすでにコメント・アウトされています。Coherence*Webキャッシュ・サーバーへのアクセスを有効にするには、ステップに従って、環境に応じて調整します。

psadm2ユーザーとして、すべてのPIA Webサーバー・ノードで次を実行します。

  1. セッションCookieとネットワーク・ドメイン名が、weblogic.xmlファイル内のすべてのPIA Webサーバーで同じであることを確認します。weblogic.xmlファイルは、$PS_CFG_HOME/ webserv/HR92U033/applications/peoplesoft/PORTAL.war/WEB-INFにあります。この例では、ドメインはHR92U033です。
  2. 同じweblogic.xmlファイルで、end comment文字列を<persistent-store-type>coherence-web</persistent-store-type>タグの下から上に移動すると、コメントの一部ではなくなります。
    次に、weblogic.xmlファイルの例を示します。
    <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
    <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
    <description>PeopleSoft Internet Architecture</description>
      <session-descriptor>
      <id-length>32</id-length>
      <cookie-name>iad-hcm-8080-PORTAL-PSJSESSIONID</cookie-name>
      <cookie-domain>.appprivatesu.ebscloudmaavcn.oraclevcn.com</cookie-domain>
      <monitoring-attribute-name>USERID</monitoring-attribute-name>
      <persistent-store-table>wl_servlet_sessions</persistent-store-table>
      <http-proxy-caching-of-cookies>true</http-proxy-caching-of-cookies>
    <!-- Coherence*Web
    -->
      <persistent-store-type>coherence-web</persistent-store-type>
      </session-descriptor>
        <container-descriptor>
          <servlet-reload-check-secs>-1</servlet-reload-check-secs>
          <session-monitoring-enabled>true</session-monitoring-enabled>
      </container-descriptor>
      <context-root>/</context-root>
    </weblogic-web-app>
  3. web.xmlファイルで、Coherence*Webパラメータで始まるセクションのコメントを解除します。この項では、Coherence*Webに必要なすべてのパラメータについて説明します。
    web.xmlファイルは、weblogic.xmlファイルと同じディレクトリにあります。
    次に、この特定のセクションの例を示します。
    <!-- Coherence*Web parameters
    -->
      <context-param>
        <description>With this set to "true", attributes that are deemed to be
          mutable (detected with a simple check) and which are accessed through a get,
          are deemed to be suspect in that they may have been changed in application code.
          Suspect attributes are treated as changed. Defaults to "false".</description>
        <param-name>coherence-enable-suspect-attributes</param-name>
        <param-value>true</param-value>
      </context-param>
      <context-param>
        <description>This value specifies a class name of the optional
          com.tangosol.coherence.servlet.HttpSessionCollection.AttributeScopeController
          interface implementation to use.</description>
        <param-name>coherence-scopecontroller-class</param-name>
        <param-value>com.tangosol.coherence.servlet.AbstractHttpSessionCollection$GlobalScopeController</param-value>
      </context-param>
      <context-param>
        <description>Specifies a cache delegator class that is responsible for manipulating
         (getting, putting, or deleting) data in the distributed cache
        </description>
        <param-name>coherence-cache-delegator-class</param-name>
        <param-value>com.tangosol.coherence.servlet.LocalSessionCacheDelegator</param-value>
      </context-param>
      <context-param>
        <description>This value, if set to true, specifies that non-serializable attributes
          should be preserved as local ones. This parameter requires a load balancer to
          be present to retrieve non-serializable attributes for a session
        </description>
        <param-name>coherence-preserve-attributes</param-name>
        <param-value>true</param-value>
      </context-param>
      <context-param>
        <description>
          This value specifies a class name of the com.tangosol.coherence.servlet.HttpSessionCollection
          $SessionDistributionController interface implementation
        </description>
        <param-name>coherence-distributioncontroller-class</param-name>
        <param-value>com.tangosol.coherence.servlet.AbstractHttpSessionCollection$HybridController</param-value>
      </context-param>
  4. $PS_CFG_HOME/webserver/HR92U033/binディレクトリにあるPIA setEnv.shにパラメータを追加します。
    このファイルにCoherenceのコメントがあります。次に、PIA Web起動パラメータを追加したsetEnv.shファイルのスニペットを示します。
    次に、この特定のセクションの例を示します。
    # Coherence*Web related parameters
    # COHERENCE_PARAMETERS=-Dtangosol.coherence.session.localstorage=false
    # Optionally add -Dtangosol.coherence.override=file:OVERRIDE_FILE_PATH
    COHERENCE_PARAMETERS="-Dtangosol.coherence.override=file:/peoplesoft/local/ps_config/coherence/config/tangosol-coherence-override.xml -Dtangosol.coherence.session.localstorage=false -Djava.net.preferIPv4Stack=true"
    # Example: JAVA_OPTIONS_LINUX="$JAVA_OPTIONS_LINUX $COHERENCE_PARAMETERS"
    # export JAVA_OPTIONS_LINUX
    JAVA_OPTIONS_LINUX="$JAVA_OPTIONS_LINUX $COHERENCE_PARAMETERS"
    export JAVA_OPTIONS_LINUX
    # Refer to Coherence*Web documentation
    ノート:
    • 各パラメータの直前にハイフンがあります(ワード・ラップによって表示が分割される場合があります)。
    • JAVA_OPTION_LINUXをエクスポートする前に、COHERENCE_PARAMETERSを定義する必要があります。
    • PIA WebLogicサーバーがCoherence*Webクライアントとして正しく登録できるように、Dtangosol.coherence.override=file:/peoplesoft/local/ps_config/coherence/config/tangosol-coherence-override.xmlを指定する必要があります。
  5. カスタムのPeopleSoft起動スクリプトおよび停止スクリプトを使用して、PIA Webサーバーを再起動します。
    $ stopWS.sh 
    $ startWS.sh
  6. PIA Webサーバー・ノードごとにこれらのステップを繰り返します。
各PIA Webサーバーが再起動されると、Coherence*Webキャッシュ・サーバー・クラスタがクライアントとして結合されます。各キャッシュ・サーバー・ログには、接続を確立し、WeblogicServerロールでクラスタに参加するWebLogicサーバーが表示されます。ログからのスニペットを次に示します:
2021-10-28 23:27:01.237/160.748 Oracle Coherence GE 12.2.1.3.0 <D6> (thread=Cluster, member=1): TcpRing connected to Member(Id=3, Timestamp=2021-10-28 23:27:01.044, Address=10.0.103.85:8089, MachineId=10879, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web01,process:16067, Role=WeblogicServer)
…
2021-10-28 23:28:14.958/234.469 Oracle Coherence GE 12.2.1.3.0 <D6> (thread=Cluster, member=1): TcpRing connecting to Member(Id=4, Timestamp=2021-10-28 23:28:14.768, Address=10.0.103.203:8089, MachineId=10880, Location=site:appprivatesu.ebscloudmaavcn.oraclevcn.com,machine:iad-psft-hcm-web02,process:14708, Role=WeblogicServer)

各PIA Webサーバー上のキャッシュ・サーバー・ログには、前述のように表示されます。PeopleSoftデプロイメントにWebサーバーのレジリエンシが追加されました。

PIA Web回復性のテスト

Coherence*WebがWebレジリエンシを提供していることをテストおよび検証するには、次を実行します。

  1. 1つを除くすべてのPIA Webサーバーをシャットダウンします。
  2. Webブラウザを使用して、PeopleSoftアプリケーションにログインします。
  3. ナビゲートして、作業を行います。トランザクションを開始しますが、完了しないでください。
  4. 2つ目のPIA Webサーバーを起動して、完全に起動できるようにします。OCIコンソールからロード・バランサをチェックして、2番目のPIA Webサーバーのステータスが「OK」になっていることを確認します。
  5. ステップ1で残したPIA Webサーバーを停止します。
  6. PeopleSoftアプリケーションに接続されているWebブラウザで、トランザクションを続行します。
    わずかな一時停止が検出される場合がありますが、エラーが発生したり、再度ログインしたり、作業が失われることはありません。
    「未承認トークン」などのエラーが発生した場合は、次を確認します。
    • セッションCookieとドメイン名は、すべてのPIA Webサーバーのweblogic.xmlファイルで同じである必要があります。
    • OCI Load Balancerバックエンド・セットは、「アプリケーションCookie永続性の有効化」で構成する必要があり、Cookie名を指定する必要があります。
    • すべてのCoherence*Webキャッシュ・サーバーは、相互に確認でき、クラスタを形成している必要があります。
    • すべてのPIA Webサーバーが、WeblogicServerクライアントとしてキャッシュ・サーバー・クラスタに参加している必要があります。
    • セキュリティ・リスト・イングレス・ルールとエグレス・ルール、firewall-cmdコマンドなど、ネットワーク構成を再確認します。