CSA: configurar o ping de JDBC como uma alternativa à transmissão múltipla (somente no local)

ccppmop158
Como alternativa à transmissão múltipla de rede, o Clarity PPM permite a implementação opcional do sistema de troca de mensagens com base em JDBC no nível do banco de dados usando o protocolo de detecção ping do JDBC do JGROUPS. O ping de JDBC usa um banco de dados compartilhado comum para armazenar informações sobre os nós de agrupamento usados para a detecção.
A opção de ping do JDBC só está disponível e só é suportada no CA Clarity PPM Release 15.3 ou superior.
Em condições ideais, todos os nós de agrupamento podem acessar o mesmo banco de dados. Quando um nó é iniciado, ele consulta informações sobre os integrantes existentes no banco de dados, determina o coordenador e solicita aos nós do CA PPM a integração ao agrupamento. Cada nó também insere informações sobre si mesmo na tabela para que outros integrantes do nó possam encontrá-lo. As mensagens são entregues exatamente como na transmissão múltipla, exceto pelo fato de que agora é o JDBC que as está processando.
O Jaspersoft não pode usar o ping do JDBC. Os ambientes agrupados do Jaspersoft devem continuar a usar a transmissão múltipla. Se você implantar o Jaspersoft em um único servidor, deverá continuar usando a transmissão múltipla. As instâncias do Jaspersoft em servidores únicos usam uma conexão direta do banco de dados JDBC com o PPM.
2
A nova abreviação de Administração do sistema do CA Clarity PPM, CSA, às vezes, ainda será exibida como a abreviação antiga, NSA.
Ping do JDBC: pré-requisitos
(1 item incompleto) Verifique todas as configurações em um ambiente que não seja de produção, por exemplo, um ambiente de desenvolvimento ou de teste, antes de aplicá-las a um sistema de produção. (6 itens incompletos) Verifique se a configuração do CA PPM está usando a transmissão múltipla ou o ping do JDBC. Não é possível combinar essas opções. (2 itens incompletos) Se estiver usando o ping do JDBC, verifique se todos os serviços do CA PPM estão configurados para usá-lo. (3 itens incompletos) Verifique se todas as senhas do NSA em todos os servidores estão definidas com o mesmo valor. Uma senha comum é compartilhada entre todos os serviços do NSA por todos os integrantes do agrupamento. Essa senha é usada para validar os pacotes de transmissão múltipla pelos vários nós do agrupamento. Se uma redefinição for necessária, execute
admin password
(4 itens incompletos) Se um servidor tiver vários endereços IP (várias NICs), configure o beacon para se vincular a um único endereço IP específico. Implante novamente o serviço do beacon após fazer quaisquer alterações. 5 itens incompletos
Verifique se todos os serviços estão na mesma sub-rede.
  • Para confirmar no Windows, use
    ipconfig
    .
  • Para confirmar no Linux, use
    ifconfig
    .
Ping do JDBC: configuração
Faça as entradas no CSA e no arquivo properties.xml com cautela. Um único erro na configuração da máscara de rede durante o provisionamento do servidor pode fazer com que os serviços não se comuniquem entre si.
20180614-JDBC-PING-CSA.jpg
Siga estas etapas
:
  1. Abra a CSA indo para
    http://<servidor_do_ca_ppm>:<porta>
    . Por exemplo:
    http://ppm_server.my.org:8090
    .
  2. Clique em
    Página inicial
    ,
    Todos os serviços
    . Interrompa todos os serviços do CA PPM antes de fazer qualquer alteração.
  3. Clique em
    Página inicial
    ,
    Servidores
    .
  4. Repita essas etapas para cada servidor do agrupamento de aplicativos:
    1. Clique no servidor. O nome do servidor é exibido como um link. Por exemplo, my_ca_ppm:<porta> (local).
      A página Propriedades é exibida.
    2. No campo
      Endereço de transmissão múltipla
      , para atender o campo obrigatório, deixe o IP padrão.
    3. No campo
      Porta de transmissão múltipla
      , deixe o valor anterior ou digite um valor de porta padrão, como 8090 ou 9090, para satisfazer o campo obrigatório.
    4. No campo
      Endereço de ligação
      , digite o endereço IP do servidor de aplicativos. Um endereço de ligação é um IP de interface de rede local que garante que todas as máquinas estejam usando a mesma interface de IP na mesma sub-rede. Se houver vários servidores, cada um deles deverá ter a vinculação/endereço IP correto para si. Se um servidor tiver várias NICs e, portanto, vários endereços IP, especifique o IP que deseja que o CA PPM use para fazer a comunicação de rede.
      Ao contrário da transmissão múltipla, o ping do JDBC não requer que todos os servidores pertençam à mesma sub-rede.
    5. Clique em
      Salvar
      .
  5. Abra o arquivo
    properties.xml
    em cada servidor.
    1. Na seção
      NSA
      , adicione o parâmetro
      useJDBCPing="true"
      , conforme mostrado no seguinte exemplo:
      <nsa bindAddress="###.###.###.###" multicastAddress="###.###.###.###" multicastPort="9191" clientPort="9288" serviceName="CA PPM Beacon 123" useJDBCPing="true" "autoDiscovery=true"/>
      Substitua # pelos valores de nó do IP.
    2. Caso ainda não tenha definido os valores do campo
      Endereço de ligação
      na CSA, você poderá defini-los manualmente no arquivo
      properties.xml
      . A propriedade
      bindAddress
      deve usar o endereço IP associado ao servidor de aplicativos especificado.
    3. Repita essas etapas para cada servidor.
      Se o servidor tiver vários endereços IP (NICs), configure o beacon para se vincular a um único endereço IP específico. Esta etapa não é obrigatória, no entanto, se os beacons não estiverem configurados corretamente, os servidores não ficarão visíveis na CSA. Após fazer qualquer alteração, interrompa, remova, adicione e implante o serviço do beacon.
  6. Na CSA, clique em
    Página inicial
    ,
    Todos os serviços
    . Inicie todos os serviços do CA PPM.
  7. Verifique se os serviços do beacon foram iniciados com êxito em todos os servidores do agrupamento. Em cada servidor de aplicativos, execute o seguinte comando:
    niku start beacon
    .
  8. Confirme se o serviço do beacon permanece ativo. Em cada servidor de aplicativos, execute o seguinte comando:
    niku status beacon
    .
Ping do JDBC: verifique se a troca de mensagens de ping do JDBC está ativada
Assim que o ping do JDBC é ativado, o banco de dados do PPM cria uma tabela denominada
CMN_JGROUPS_PING
.
  • As informações do endereço de ping do JDBC são armazenadas nessa tabela.
  • Os nós de um agrupamento também são registrados nessa tabela.
Siga estas etapas
:
  1. Acesse o banco de dados com permissões para exibir essa tabela.
  2. Verifique se as informações sobre todos os serviços do PPM estão preenchidas na tabela
    CMN_JGROUPS_PING
    do banco de dados.
    A imagem a seguir fornece um exemplo:
    image2018-6-11 12:24:49.png
    CREATED
    : a data e a hora da mensagem enviada mais recente.
    CLUSTER_NAME
    : o nome do tópico do agrupamento pai de cada servidor integrante.
    PING_DATA
    : o conteúdo da mensagem.
    UUID
    : o identificador exclusivo de cada servidor, que consiste em uma ID da instância do aplicativo e no nome do tópico. Neste exemplo, o nome do tópico está definido como CLRTY em todos os casos.
  3. Quando o JGroups está usando o JDBCPing, a detecção dos nós no agrupamento é feita por meio do banco de dados. Após a detecção, o protocolo entre os nós é TCP e deve ser ponto a ponto.
    1. Atualize o arquivo
      my/etc/hosts
      para apontar para 127.0.0.1 para usar
      $HOSTNAME
      .
    2. Use um comando telnet ou nc para testar a conectividade da porta.
    3. Verifique se a comunicação na porta do beacon está
      aberta
      .
Alternar para o ping do JDBC não requer nenhuma etapa adicional para as integrações do PPM com SSO.
Ao atualizar o banco de dados de produção para teste, execute o
truncate table CMN_JGROUPS_PING
comando para remover as entradas existentes da tabela CMN_JGROUPS_PING. Se essa etapa não for executada, não será possível iniciar nenhum serviço do Clarity PPM no servidor de banco de dados atualizado.
Migrações de nuvem híbrida do CA PPM
A CA fornece o CA PPM SaaS e outras soluções de nuvem da CA. Reconhecemos também que alguns clientes podem implantar e gerenciar uma configuração personalizada do AWS ou do Microsoft Azure. Como administrador do CA PPM, você pode executar as seguintes etapas gerais:
  1. Após a atualização, alterne para o ping do JDBC. Vários serviços de aplicativos do PPM podem se comunicar entre si usando o ping do JDBC.
  2. Ambientes de servidor único do Jaspersoft podem se comunicar com o servidor de banco de dados do PPM usando uma conexão direta do JDBC.
No momento, não oferecemos suporte às configurações agrupadas do Jaspersoft no Azure, no AWS ou em qualquer outro ambiente de nuvem pública, privada ou híbrida. No entanto, reconhecemos a demanda por essa funcionalidade. Consulte a nova seção abaixo. Há suporte limitado disponível para armazenamento em cache replicado usando o JMS.
Configurar o armazenamento de cache replicado para o JasperReports Server com o JMS
No Azure, AWS, Google Cloud, entre outras nuvens públicas, em que a transmissão múltipla está desativada e o ping do JDBC está ativado, o suporte à configuração do Jaspersoft agrupado não existia anteriormente. O suporte limitado agora está disponível para usar o JMS (Java Message Service) para a replicação do ehcache do servidor do Jaspersoft.
O JMS é um mecanismo para interagir com filas de mensagens. As opções de código aberto para Linux e Windows incluem o Apache ActiveMQ e o Oracle Open MQ. Com o JasperReports 6.1.0 ou superior, a replicação do Ehcache pelo JMS agora está disponível e conta com suporte. (Em nossos testes e nesta documentação, usamos o ActiveMQ 5.12.1.)
Com o módulo de replicação do JMS do Ehcache, sua organização pode aproveitar seus investimentos em fila de mensagens para o armazenamento em cache.
  • Cada nó de cache assina um tópico predefinido, configurado como <topicBindingName> em
    ehcache.xml
    .
  • Cada cache replicado publica os elementos do cache no devido tópico. A replicação está configurada por cache, de acordo com o mecanismo de replicação padrão do Ehcache.
  • Os dados são enviados por push diretamente aos nós de cache dos emissores externos de tópico, em qualquer idioma. Depois que os dados tiverem sido enviados ao tópico de replicação, eles serão detectados automaticamente pelos assinantes do cache.
  • O JMSCacheLoader envia solicitações de carregamento de cache para um dos seguintes tipos de fila antes de enviar uma resposta:
    • Nó de agrupamento do Ehcache
    • Receptor de fila externa
A seguinte imagem ilustra os relacionamentos da entidade*:
apache_jms_diagram.png
*Imagem como cortesia da Apache Software Foundation. Apache ActiveMQ, Apache, o logotipo de pena da Apache e o logotipo de projeto do Apache ActiveMQ são marcas comerciais da Apache Software Foundation.
Siga estas etapas:
  1. Verifique se você já instalou uma release suportada do Clarity PPM com o servidor do JasperReports em um agrupamento.
  2. Certifique-se de que todos os nós do servidor do JasperReports apontem para um único nó de banco de dados.
  3. Instale e configure a instância do servidor do ActiveMQ. Para baixar e instalar o ActiveMQ, consulte http://activemq.apache.org/version-5-getting-started.html.
  4. Verifique se a porta padrão do agente do ActiveMQ está acessível.
  5. Inicie o servidor do ActiveMQ.
  6. Faça download de ehcache_jms.zip. A configuração é feita no arquivo
    ehcache.xml
    .
  7. Cada agrupamento deve usar um nome de tópico fixo para replicação. Por padrão, o ActiveMQ oferece suporte à criação automática de destinos.
  8. Configure um JMSCacheManagerPeerProviderFactory globalmente para um CacheManager. Execute essa etapa uma vez para cada CacheManager (uma vez por arquivo ehcache.xml).
  9. Para cada configuração de cache que você deseja replicar, adicione o JMSCacheReplicatorFactory ao cache.
    Todas as configurações mencionadas acima já estão disponíveis no
    ehcache.xml
    distribuído com o JasperReports Server 6.1.0. Siga as instruções abaixo para configurar a distribuição de cache usando o JMS. A transmissão múltipla é suportada no RMI, JMS e AWS. Em nossos testes, acompanharemos o mecanismo RMI.
  10. Interrompa o servidor tomcat.
  11. Vá para
    <tomcat>/webapps/reportservice/WEB-INF
    e abra o arquivo
    ehcache_hibernate.xml
    em um editor.
  12. Adicione um comentário ou remova a seguinte seção do arquivo entre os comentários ***NO CLUSTERING*** e ***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. Remova o comentário das seções ***JMS*** e ***END OF JMS*** eliminando as linhas <!-- START e END -->. Como resultado, você está ativando a replicação do Ehcache pelo JMS.
    <!-- ****************** 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. Especifique o URL do agente da instância do ActiveMQ. Procure o atributo
    providerURL
    no arquivo XML e forneça o valor do URL do agente do ActiveMQ. Atualize o atributo
    providerURL
    em 5 (cinco) locais diferentes no arquivo
    ehcache.xml
    . Por exemplo,
    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. Salve o arquivo.
  16. Repita as mesmas alterações de configuração nos seguintes locais:
    • <tomcat>/webapps/reportservice/WEB-INF/ehcache_hibernate.xml
    • <tomcat>/webapps/reportservice/WEB-INF/classes/ehcache_hibernate.xml
  17. Repita a mesma configuração (todas as etapas) em todas as instâncias do servidor do JasperReports disponíveis no agrupamento.
  18. Exclua ou limpe os seguintes diretórios:
    • tomcat
      temp
    • work/Catalina/localhost
  19. Inicie o servidor tomcat.
Configurar o ActiveMQ para o JasperReports no Windows Server
  1. Faça download do servidor do Activemq no site da Apache, no endereço http://activemq.apache.org/activemq-5158-release.html.
  2. Extraia o arquivo zip para Windows.
  3. Instale o Java JDK 1.7 e superior. Neste documento estamos usando o JDK 11.
  4. Defina a variável de ambiente JAVA_HOME no servidor.
  5. Vá para o diretório em que ActiveMQ foi extraído. Neste exemplo é
    E:\activemq\bin
    .
  6. Execute o comando
    activemq start
    para iniciar o servidor do activemq.
    E:\activemq\bin>activemq start
  7. Após o servidor ser iniciado, é possível acessar o console de administração na porta 8161. Abra um navegador e insira
    http://hostname:8161/admin
    . A combinação de nome de usuário e senha padrão é Admin.
Configurar o JasperReports Server com o ActiveMQ
  1. Interrompa o serviço do Jasper.
  2. Vá para
    %TOMCAT_HOME%/webapps/reportservice/WEB-INF
    .
  3. Edite o arquivo denominado
    ehcache_hibernate.xml
    .
  4. Transforme em comentário as linhas entre as seções
    RMI
    e
    END OF RMI
    .
    image2019-4-3_12-51-54.png
  5. Remova o comentário das linhas entre as seções
    JMS
    e
    END OF JMS
    .
  6. Substitua o valor "" de
    ProvideURL
    por "", sendo que hostname refere-se ao FQDN do servidor do ActiveMQ. Entre as seções acima, há 5 lugares onde isso precisa ser alterado.
  7. Copie o arquivo
    ehcache_hibernate.xml
    para a pasta
    classes
    da pasta
    %TOMCAT_HOME%/webapps/reportservice/WEB-INF
    .
  8. Inicie o serviço do Jasper.
  9. Se você efetuar logon na página de administração do ActiveMQ, verá dois provedores de cache,
    ehcacheQueue
    e
    ehcacheMQueue
    .
Monitorar o console do ActiveMQ
  1. Faça download, instale e configure a instância do servidor do ActiveMQ. Consulte http://activemq.apache.org/version-5-getting-started.html.
  2. Acesse o console web em http://localhost:8161/admin. Substitua localhost pelo IP do servidor para acessar o console web do ActiveMQ remotamente.
  3. Para verificar o número total de instâncias do Jaspersoft conectadas a essa instância do ActiveMQ, vá para a guia
    Queues
    .
    Por exemplo, http://localhost:8161/admin/queues.jsp. A tabela nessa página mostra quantas instâncias do JasperSoft estão conectadas às instâncias do servidor do ActiveMQ.
    image2019-4-29_11-14-5.png
  4. Para verificar a lista de instâncias do Jaspersoft conectadas ao ActiveMQ, vá para a guia
    Connections
    .
    Por exemplo, https://localhost:8161/admin/connections.jsp.
    image2019-4-29_11-15-11.png
Altere a senha padrão do administrador do ActiveMQ
  1. Verifique o arquivo
    <activemq-installer>/conf/jetty-realm.properties
    .
  2. Observe se o formato é:
    username:password,rolename
    Os valores padrão são:
    admin:admin,admin
  3. Altere o segundo valor para atualizar a senha para:
    admin: <nova_senha>, admin