Implementar a Resiliência da Web do PIA com o Coherence*Web

Adicione resiliência da Web ao Coherence*Web para seus servidores Web PIA (Internet Architecture) PeopleSoft. O Coherence*Web é configurado em cada servidor Web PIA e é executado em paralelo, mas separado dos servidores WebLogic do PIA. Isso é chamado de Topologia Fora do Processo para Coherence*Web. Um cluster é formado quando dois ou mais servidores de cache Coherence*Web são iniciados. Depois de configurar o Coherence*Web, você configurará os servidores Web PIA para trabalhar com o Coherence*Web e, em seguida, eles entrarão neste cluster.

Configurar Coherence*Web

Configure a infraestrutura e os scripts necessários para iniciar e gerenciar o Coherence*Web. Embora você crie o script que inicia o produto, há mais algumas tarefas a serem concluídas antes de executar o script.

Com o PeopleTools 8.57, o Coherence*Web é fornecido com a instalação do Fusion Middleware. Neste projeto, ele está no diretório: /u01/app/psft/pt/bea/coherence. Este é um diretório compartilhado que todos os servidores da Web da PIA podem acessar.

  1. Crie diretórios para arquivos de configuração e log do Coherence*Web.
    • Nó: Todos os nós do servidor Web PIA
    • Usuário: psadm2
    $ . ./psft.env
    $ mkdir -p $PS_CFG_HOME/coherence/config
    $ mkdir -p $PS_CFG_HOME/coherence/log
  2. Edite o arquivo psft.env para adicionar as seguintes variáveis de ambiente ao arquivo psft.env.
    • Nó: Todos os nós do servidor Web PIA
    • Usuário: 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
    Obtenha novamente o arquivo do ambiente.
  3. Obtenha o endereço IP privado de cada instância de computação do servidor Web PIA.

    Em nosso projeto, cada servidor Web PIA tem um endereço IP privado, conhecido como um endereço bem conhecido (WKA) na documentação Coherence*Web. Você precisará desses endereços IP privados nas etapas posteriores.

    • Nó: Todos os nós do servidor Web PIA
    • Usuário: psadm2, usuário da Console do OCI
    1. Faça log-in na Console do OCI.
    2. Clique em Compute e, em seguida, clique em Instâncias.
    3. Selecione o compartimento que contém os servidores Web.
    4. Clique em cada um dos servidores da Web PIA listados para ver seu endereço IP privado. Registre os endereços.
  4. Crie um arquivo de substituição do Coherence no diretório COHERENCE_CONFIG.
    Você pode escolher qualquer nome para o arquivo, mas ele geralmente é chamado de tangosol-coherence-override.xml, e é referenciado com esse nome em vários documentos do Coherence*Web.
    • Nó: Todos os nós do servidor Web PIA
    • Usuário: psadm2
    O arquivo XML terá conteúdo semelhante ao seguinte:
    <?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. Especifique o endereço IP privado para cada servidor Web PIA.
      Este exemplo de configuração usa dois servidores Web.
    2. Coloque o arquivo em TODOS os servidores Web PIA. O conteúdo deve ser idêntico.
    O parâmetro <address system-property="coherence.localhost">10.0.103.0/24</address> especifica toda a sub-rede privada que atende aos servidores Web PIA. Quando o servidor de cache Coherence*Web for iniciado, ele obterá o endereço IP privado do host local no qual está sendo executado.
  5. Crie um script que iniciará o servidor de cache Coherence*Web em segundo plano em cada servidor Web PIA.
    Consulte startCacheServer.sh para obter um script de exemplo. Ele está localizado no diretório wrapper em GitHub.
    • Nó: Todos os nós do servidor Web PIA
    • Usuário: psadm2

Observação:

Você executará o script depois de configurar a rede Coherence*Web.

Configurar a Rede Coherence*Web

Cada servidor web PIA é executado isoladamente e não se comunica com os outros servidores web. Para fornecer resiliência entre servidores nessa camada, os servidores Coherence*Web formam um cluster e exigem uma configuração de rede que permite que seus servidores de cache se comuniquem entre si.

Para permitir que o Coherence*Web forme um cluster de cache, use a Console do OCI para adicionar regras de entrada e saída à lista de segurança associada ao app_private_seclist. Além das portas 8088 e 8089, você usará as portas padrão especificadas na documentação do Coherence*Web.

Regras de Entrada:

Sem Informações de Estado CIDR de Origem Protocolo IP Faixa de Portas de Origem Faixa de Portas de Destino
NÃO 10.0.103.0/24 TCP Tudo 7
NÃO 10.0.103.0/24 UDP Tudo 7
NÃO 10.0.103.0/24 TCP Tudo 7,574
NÃO 10.0.103.0/24 UDP Tudo 7,574
NÃO 10.0.103.0/24 TCP Tudo 8,088-8,089

Regras de saída:

Sem Informações de Estado CIDR de Destino Protocolo IP Faixa de Portas de Origem Faixa de Portas de Destino
NÃO 0.0.0.0/0 TCP Tudo Tudo
NÃO 0.0.0.0/0 UDP Tudo Tudo
  1. Faça log-in na Console do OCI.
  2. Adicione as regras de entrada e saída à lista de segurança associada ao app_private_seclist.
  3. Execute os comandos firewall-cmd a seguir como root em cada instância de computação para ativar as portas listadas na tabela em cada uma das instâncias de computação Web do PIA.
    Modifique para seu ambiente.
    $ 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. Inicie o primeiro servidor de cache Coherence*Web (iad-psft-hcm-web01).

    Use o script startCacheServer.sh localizado no diretório Tarefas Básicas em GitHub para iniciar um servidor de cache, emitindo os comandos a seguir em uma instância de computação como psadm2. O seguinte pressupõe que o diretório de script esteja no PATH do administrador.

    $ startCacheServer.sh
    Quando o primeiro servidor de cache for iniciado, a saída será semelhante à seguinte:
    …
    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

    Você pode verificar se a configuração está sendo selecionada corretamente vendo os endereços IP listados na seção WellKnownAddresslist.

    Como você só iniciou um servidor de cache, há apenas um membro (a instância de computação na qual o servidor de cache foi iniciado): iad-psft-hcm-web01.

  5. Use o mesmo script para iniciar o servidor de cache na segunda instância de computação da camada intermediária (iad-psft-hcm-web02).
    $ startCacheServer.sh
    Ele deve unir o cluster e o arquivo de log deve ser semelhante ao seguinte:
    …
    
    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
        )
    
    …

    O trecho de código do arquivo de log acima mostra dois membros no cluster, ambos com uma atribuição CoherenceServer.

  6. Olhe para o arquivo de log do servidor de cache que você iniciou primeiro na instância de computação iad-psft-hcm-web01. Você deverá ver entradas semelhantes às seguintes, mostrando que uma conexão com iad-psft-hcm-web02 foi estabelecida.
    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)

    A primeira vez que você iniciar os servidores de cache um de cada vez e verificar cada um para verificar se ele está configurado corretamente. No futuro, quando você precisar iniciar suas camadas intermediárias, poderá iniciar todos os servidores de cache Coherence*Web de uma só vez.

  7. Se em cada instância de computação você vir apenas um membro, os servidores de cache Coherence*Web não poderão "ver" um ao outro.
    Isso é causado pelo bloqueio de uma ou mais portas de rede. Uma maneira de testar portas bloqueadas é usar o utilitário Netcat (nc), que deve ser instalado em cada instância de computação web PIA.
    1. Use yum para instalar o utilitário nc) em cada instância de computação web do PIA como o usuário root
      # yum install -y nc
    2. Efetue log-in como root para testar portas para pacotes TCP e UDP em seus servidores Web PIA.
      Por exemplo, para testar se a porta 7574 está aberta em iad-psft-web01, inicie um listener Netcat que escute pacotes UDP na porta 7574:
      # nc -u -l iad-psft-web01 7574

      O comando nc aguardará, deixe-o sentado lá.

    3. Em uma sessão separada, faça log-in como root em iad-psft-web02. Inicie um cliente Netcat UDP que se conecte a iad-psft-web01 na porta 7574:
       # nc -u iad-psft-web01 7574

      O comando nc aguardará.

    4. Nesse terminal, digite algo como "test" e pressione Enter.
      A palavra "teste" deve ser exibida no outro terminal.
    5. Digite "test" no terminal do servidor em que nc está fazendo listening e pressione Enter.
      Ele deve aparecer no terminal do cliente.
    6. Se o teste for bem-sucedido, alterne as atribuições e execute o listener nc em iad-psft-web02 e o cliente em iad-psft-web01 e repita o teste.
    7. Se o teste não for bem sucedido, então uma ou mais das seguintes são provavelmente a causa:
      • Não há regra de entrada que permita o protocolo UDP para a porta 7574 na lista de segurança relevante para a sub-rede do servidor Web PIA.
      • Não há regra de saída que permita o protocolo UDP para a porta 7574 na lista de segurança relevante para a sub-rede do servidor Web PIA.
      • O comando firewall-cmd não foi executado em cada servidor Web PIA para permitir tráfego UDP da porta 7574.
      O Coherence*Web fornece um utilitário de teste do datagrama para testar conexões para TCP e UDP. Consulte Usando o Utilitário de Teste do Datagrama para obter mais detalhes.

Configurar Servidor Web PIA para Coherence*Web

Com os servidores de cache Coherence*Web configurados e em execução em todas as instâncias de computação do servidor Web PIA, agora você pode configurar os servidores Web PIA.

As versões recentes dos arquivos de configuração PeopleTools já têm a maior parte da configuração necessária, comentadas. Para ativar o acesso aos servidores de cache do Coherence*Web, siga as etapas, ajustando conforme apropriado para seu ambiente.

Execute o seguinte em todos os nós do servidor Web do PIA, como o usuário psadm2.

  1. Certifique-se de que o cookie de sessão e os nomes de domínio de rede sejam os mesmos para todos os servidores Web PIA no arquivo weblogic.xml. O arquivo weblogic.xml está localizado em $PS_CFG_HOME/ webserv/HR92U033/applications/peoplesoft/PORTAL.war/WEB-INF. Para este exemplo, o domínio é HR92U033.
  2. No mesmo arquivo weblogic.xml, mova a string end comment abaixo da tag <persistent-store-type>coherence-web</persistent-store-type> para acima dela, de modo que ela não faça mais parte do comentário:
    Veja a seguir um exemplo do arquivo 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. No arquivo web.xml, não comente a seção começando com "Parâmetros Coherence*Web". Esta seção contém todos os parâmetros necessários para o Coherence*Web.
    O arquivo web.xml está no mesmo diretório que o arquivo weblogic.xml.
    Veja a seguir um exemplo desta seção específica:
    <!-- 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. Adicione os parâmetros adicionais ao PIA setEnv.sh localizado no diretório $PS_CFG_HOME/webserver/HR92U033/bin.
    Há um comentário neste arquivo para o Coherence. Aqui está um trecho de código para o arquivo setEnv.sh no qual adicionamos os parâmetros de inicialização da Web do PIA:
    Veja a seguir um exemplo desta seção específica:
    # 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
    Notas:
    • Há hifens imediatamente antes de cada parâmetro (quebra de palavras pode dividir a exibição)
    • Defina o COHERENCE_PARAMETERS antes de exportar JAVA_OPTION_LINUX
    • Você deve especificar o Dtangosol.coherence.override=file:/peoplesoft/local/ps_config/coherence/config/tangosol-coherence-override.xml para que o servidor PIA WebLogic possa se registrar corretamente como um cliente Coherence*Web.
  5. Reinicie o servidor Web PIA, usando os Scripts de Inicialização e Encerramento PeopleSoft personalizados.
    $ stopWS.sh 
    $ startWS.sh
  6. Repita essas etapas para cada nó do servidor Web PIA.
À medida que cada servidor Web PIA é reiniciado, ele ingressará no cluster do servidor de cache Coherence*Web como clientes. Cada log do servidor de cache deve mostrar os servidores WebLogic que estabelecem uma conexão e unem o cluster com uma atribuição WeblogicServer. Aqui está um trecho do log:
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)

Os logs do servidor de cache em cada servidor web PIA devem mostrar algo como o acima. A implantação PeopleSoft agora tem resiliência do servidor Web.

Testar a resiliência da Web do PIA

Execute o seguinte para testar e validar se o Coherence*Web está fornecendo resiliência da Web.

  1. Desligue todos, exceto um servidor Web PIA.
  2. Usando um Web browser, faça log-in no aplicativo PeopleSoft.
  3. Navegue, faça algum trabalho. Inicie uma transação, mas não conclua-a.
  4. Inicie um segundo servidor Web PIA e permita que ele seja totalmente criado. Verifique o balanceador de carga na Console do OCI para garantir que o status do segundo servidor Web PIA mostre OK.
  5. Desligue o servidor web PIA que foi deixado para cima na etapa 1.
  6. Em seu navegador da Web conectado ao aplicativo PeopleSoft, continue sua transação.
    Você pode detectar uma ligeira pausa, mas você não deve receber um erro, precisa fazer login novamente ou perder qualquer trabalho.
    Se ocorrer um erro como "Token não autorizado", revise o seguinte:
    • O cookie de sessão e os nomes de domínio devem ser os mesmos para todos os arquivos weblogic.xml do servidor Web PIA.
    • O conjunto de backend do Balanceador de Carga do OCI deve ser configurado com Ativar persistência de cookie do aplicativo e o nome do cookie deve ser especificado.
    • Todos os servidores de cache Coherence*Web devem ser capazes de se ver e formaram um cluster.
    • Todos os servidores Web PIA devem ter entrado no cluster do servidor de cache como clientes WeblogicServer.
    • Verifique novamente as configurações de rede, incluindo as regras de entrada e saída da lista de segurança, comandos firewall-cmd e assim por diante.