CSA: configurazione del ping JDBC come alternativa al multicast

ccppmop1561
In alternativa al multicast della rete, Clarity PPM consente facoltativamente di implementare la messaggistica basata su JDBC a livello di database attraverso il protocollo di rilevamento ping JDBC JGROUPS. Il ping JDBC utilizza un database condiviso comune per archiviare le informazioni sui nodi cluster utilizzati per il rilevamento.
Dichiarazione di non responsabilità
: fino a ulteriore comunicazione, per questa opzione di configurazione è disponibile un supporto limitato. Se, dopo aver letto la documentazione qui riportata, si hanno ancora domande o si verificano ancora problemi, è possibile continuare a contattare il supporto tecnico di CA; tuttavia, sono previsti ritardi per questa capacità relativamente nuova, la cui popolarità aumenta man mano che clienti e partner valutano le proprie strategie di sviluppo. L'opzione ping JDBC è disponibile e supportata solo per CA Clarity PPM, release 15.3 (o release successive).
Idealmente, tutti i nodi cluster possono accedere allo stesso database. Quando un nodo viene avviato, esso recupera le informazioni relative ai membri esistenti dal database, determina il coordinatore e richiede ai nodi CA PPM di unirsi al cluster. Inoltre, ciascun nodo inserisce nella tabella informazioni su se stesso, cosicché gli altri membri del nodo possano individuarlo. I messaggi vengono recapitati così come sono in multicast, ma sotto la gestione di JDBC.
Jaspersoft non può utilizzare il ping JDBC. Gli ambienti Jaspersoft clusterizzati devono continuare a utilizzare il multicast. Se si distribuisce Jaspersoft su un solo server, è necessario continuare a utilizzare il multicast. Le istanze Jaspersoft del server singolo utilizzano una connessione database JDBC diretta a PPM.
2
Al posto della nuova abbreviazione di Amministrazione sistema CA Clarity PPM (CSA) viene talvolta ancora visualizzata l'abbreviazione precedente (NSA).
Ping JDBC: Prerequisiti
Verificare tutte le impostazioni in un ambiente non di produzione, quale ad esempio un ambiente di sviluppo o di test, prima di procedere alla pubblicazione in un sistema di produzione. Verificare che la configurazione di CA PPM utilizzi il multicast o il ping JDBC. Non è possibile combinare queste opzioni. Se si utilizza il ping JDBC, verificare che tutti i servizi CA PPM siano configurati per il suo utilizzo. Verificare che tutte le password NSA su tutti i server siano impostate sullo stesso valore. Una password comune viene condivisa tra tutti i servizi NSA da tutti i membri del cluster. Questa password viene utilizzata per convalidare i pacchetti multicast inviati dai vari nodi del cluster. Se occorre un ripristino, eseguire
admin password
Se un server ha più indirizzi IP (più schede di interfaccia di rete), configurare il beacon in modo che si associ a un unico indirizzo IP specifico. Una volta apportate le eventuali modifiche, ridistribuire il servizio beacon. 5 incomplete
Verificare che tutti i servizi siano nella stessa subnet.
  • Per eseguire la conferma su Windows, utilizzare
    ipconfig
    .
  • Per eseguire la conferma su Linux, utilizzare
    ifconfig
    .
Ping JDBC: configurazione
Effettuare con attenzione gli inserimenti in CSA e nel file properties.xml. Un solo errore nella configurazione della maschera di rete durante il provisioning del server può impedire la comunicazione tra i servizi.
20180614-JDBC-PING-CSA.jpg
Procedere come descritto di seguito
:
  1. Aprire CSA accedendo a
    http://<ca_ppm_server>:<port>
    . Ad esempio,
    http://ppm_server.my.org:8090
    Clarity PPM.
  2. Fare clic su
    Pagina iniziale
    ,
    Tutti i servizi
    . Prima di apportare modifiche, arrestare tutti i servizi CA PPM.
  3. Fare clic su
    Pagina iniziale
    ,
    Server
    .
  4. Ripetere questi passaggi per ciascun server del cluster delle applicazioni:
    1. Fare clic sul server. Il nome del server viene visualizzato come collegamento. Ad esempio, my_ca_ppm:<porta> (locale).
      Viene visualizzata la pagina delle proprietà.
    2. Nel campo
      Indirizzo multicast
      lasciare l'indirizzo IP predefinito per soddisfare il campo obbligatorio.
    3. Nel campo
      Porta multicast
      , lasciare il valore precedente o immettere un valore di porta standard, ad esempio 8090 o 9090 per soddisfare il campo obbligatorio.
    4. Nel campo
      Associa indirizzo
      , immettere l'indirizzo IP per il server applicazioni. Un indirizzo di associazione è un IP interfaccia di rete locale che garantisce che tutti i computer utilizzino la stessa interfaccia IP sulla stessa subnet. Se sono presenti più server, ciascuno deve disporre dell'indirizzo IP/di associazione corretto. Se un server dispone di più schede di interfaccia di rete e, quindi, di più indirizzi IP, specificare l'IP che CA PPM deve utilizzare per la comunicazione di rete.
      A differenza del multicast, il ping JDBC non richiede che tutti i server appartengano alla stessa subnet.
    5. Fare clic su
      Salva
      .
  5. Aprire il file
    properties.xml
    su ciascun server.
    1. Nella sezione
      NSA
      , aggiungere il parametro
      useJDBCPing="true"
      come illustrato nell'esempio seguente:
      <nsa bindAddress="###.###.###.###" multicastAddress="###.###.###.###" multicastPort="9191" clientPort="9288" serviceName="CA PPM Beacon 123" useJDBCPing="true" />
      Sostituire # con i valori del nodo IP.
    2. Se i valori del campo
      Indirizzo di associazione
      non sono ancora stati impostati in CSA, è possibile impostarli manualmente nel file
      properties.xml
      . La proprietà
      bindAddress
      deve utilizzare l'indirizzo IP associato al server applicazioni indicato.
    3. Ripetere la procedura per ciascun server.
      Se il server ha più indirizzi IP (NIC), configurare il beacon in modo che sia associato a un solo indirizzo IP specifico. Questo passaggio non è obbligatorio. Tuttavia, se i beacon non sono configurati correttamente, i server non sono visibili in CSA. Una volta apportate le modifiche, arrestare, rimuovere, aggiungere e distribuire il servizio beacon.
  6. In CSA, fare clic su
    Pagina iniziale
    ,
    Tutti i servizi
    . Avviare tutti i servizi CA PPM.
  7. Verificare che i servizi beacon siano stati avviati correttamente su tutti i server del cluster. Su ciascun server applicazioni, eseguire il seguente comando:
    niku start beacon
    .
  8. Confermare che il servizio beacon resta attivo. Su ciascun server applicazioni, eseguire il seguente comando:
    niku status beacon
    .
Ping JDBC: verifica dell'abilitazione della messaggistica ping JDBC
Una volta abilitato il ping JDBC, il database PPM crea una tabella denominata
CMN_JGROUPS_PING
.
  • Le informazioni sull'indirizzo ping JDBC sono archiviate in questa tabella.
  • In questa tabella vengono registrati anche i nodi del cluster.
Procedere come descritto di seguito
:
  1. Accedere al database utilizzando le autorizzazioni alla visualizzazione della tabella.
  2. Verificare che la tabella database
    CMN_JGROUPS_PING
    riporti le informazioni relative a tutti i servizi PPM.
    La seguente immagine fornisce un esempio:
    image2018-6-11 12:24:49.png
    CREATED
    : la data e l'ora del messaggio più recente pubblicato.
    CLUSTER_NAME
    : il nome dell'argomento del cluster padre per ciascun server membro.
    PING_DATA
    : il contenuto del messaggio.
    UUID
    : l'identificatore univoco di ciascun server, costituito da un ID istanza applicazione e un nome argomento. In questo esempio, il nome dell'argomento è impostato su CLRTY in tutti i casi.
  3. Se JGroups utilizza JDBCPing, il rilevamento dei nodi nel cluster viene eseguito utilizzando il database. Una volta individuato, il protocollo tra i nodi sarà TCP e dovrà essere peer-to-peer.
    1. Aggiornare il file
      my/etc/hosts
      per puntare a 127.0.0.1 per utilizzare
      $HOSTNAME
      .
    2. Utilizzare un comando telnet o nc per verificare la connettività della porta.
    3. Verificare che la comunicazione sulla porta beacon sia
      aperta
      .
Il passaggio al ping JDBC non richiede alcun passaggio aggiuntivo per le integrazioni di PPM con SSO.
Migrazioni al cloud ibrido CA PPM
CA propone CA PPM SaaS e altre soluzioni cloud CA. Sappiamo che alcuni clienti potrebbero distribuire e gestire una configurazione AWS o Microsoft Azure personalizzata. In qualità di amministratore CA PPM, è possibile effettuare le seguenti operazioni di alto livello:
  1. Una volta effettuato l'aggiornamento, passare al ping JDBC. Più servizi app PPM possono comunicare tra loro attraverso il ping JDBC.
  2. Gli ambienti Jaspersoft che utilizzano un solo server possono comunicare con il server di database PPM attraverso una connessione JDBC diretta.
Al momento, non sono supportate configurazioni Jaspersoft clusterizzate in Azure, AWS o qualsiasi altro ambiente cloud ibrido, pubblico o privato. Tuttavia, siamo consapevoli dell'esigenza di questa funzionalità. Consultare la nuova sezione, riportata di seguito. Il supporto limitato è disponibile per la memorizzazione nella cache di replica tramite JMS.
Configurazione della memorizzazione nella cache di replica per JasperReports Server con JMS
In Azure, AWS, Google Cloud e altri cloud pubblici in cui multicast è disabilitato e il ping JDBC è abilitato, il supporto per la configurazione Jaspersoft in cluster non era disponibile. Il supporto limitato è ora disponibile per l'utilizzo di Java Message Service (JMS) per la replica Ehcache del server Jaspersoft.
JMS è un meccanismo per l'interazione con le code di messaggi. Le opzioni open source per Linux e Windows includono Apache ActiveMQ e Oracle Open MQ. Con JasperReports 6.1.0 (o versioni successive), la replica Ehcache su JMS è ora disponibile e supportata. Nei nostri ambienti di test e nella presente documentazione abbiamo utilizzato ActiveMQ 5.12.1.
Con il modulo di replica Ehcache JMS, l'organizzazione può utilizzare l'investimento nella coda dei messaggi per la memorizzazione nella cache.
  • Ogni nodo della cache è sottoscritto a un argomento predefinito, configurato come <topicBindingName> in
    ehcache.xml
    .
  • Ogni cache di replica pubblica elementi della cache in tale argomento. La replica viene configurata per la cache in conformità al meccanismo di replica standard Ehcache.
  • I dati vengono inviati direttamente ai nodi della cache da editori esterni dell'argomento (in qualsiasi lingua). Una volta inviati all'argomento di replica, i dati vengono automaticamente selezionati dai sottoscrittori della cache.
  • JMSCacheLoader invia le richieste di carico della cache a uno dei seguenti tipi di coda prima dell'invio di una risposta:
    • Nodo cluster Ehcache
    • Destinatario coda esterna
L'immagine seguente mostra le relazioni di entità*:
apache_jms_diagram.png
* Immagine fornita da Apache Software Foundation. Apache ActiveMQ, Apache, il logo a forma di piuma di Apache e il logo di progetto Apache ActiveMQ sono marchi registrati di Apache Software Foundation.
Procedere come descritto di seguito:
  1. Accertarsi di disporre di una release installata e supportata di Clarity PPM con JasperReports Server in un cluster.
  2. Verificare che tutti i nodi JasperReports Server puntino a un singolo nodo di database.
  3. Installare e configurare l'istanza del server ActiveMQ. Per scaricare e installare ActiveMQ, consultare la pagina http://activemq.apache.org/version-5-getting-started.html.
  4. Verificare che la porta broker ActiveMQ predefinita sia accessibile.
  5. Avviare il server ActiveMQ.
  6. Scaricare ehcache_jms.zip. La configurazione viene eseguita nel file
    ehcache.xml
    .
  7. Ogni cluster deve utilizzare un nome di argomento fisso per la replica. Per impostazione predefinita, ActiveMQ supporta la creazione automatica delle destinazioni.
  8. Configurare JMSCacheManagerPeerProviderFactory a livello globale per CacheManager. Eseguire una volta questa operazione per CacheManager (una volta per ogni file ehcache.xml).
  9. Per ogni configurazione della cache che si desidera replicare, aggiungere JMSCacheReplicatorFactory alla cache.
    Tutte le configurazioni riportate precedentemente sono già disponibili nel file
    ehcache.xml
    distribuito con JasperReports Server 6.1.0. Attenersi alle istruzioni riportate di seguito per configurare la distribuzione della cache tramite JMS. Il multicasting è supportato su RMI JMS e AWS. Nel nostro ambiente di test, ci atteniamo al meccanismo RMI.
  10. Arrestare il server Tomcat.
  11. Accedere a
    <tomcat>/webapps/reportservice/WEB-INF
    e aprire il file
    ehcache_hibernate.xml
    in un editor di testo.
  12. Rimuovere o eliminare i commenti della seguente sezione del file compresa tra i commenti ***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. Rimuovere i commenti per le sezioni ***JMS*** e ***END OF JMS*** rimuovendo le righe <!-- START and END -->. La replica Ehcache tramite JMS risulterà attivata.
    <!-- ****************** 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. Specificare l'URL broker dell'istanza ActiveMQ. Ricercare l'attributo
    providerURL
    nel file XML e fornire il valore dell'URL broker ActiveMQ. Aggiornare l'attributo
    providerURL
    in cinque (5) posizioni diverse nel file
    ehcache.xml
    . Ad esempio,
    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. Salvare il file.
  16. Ripetere le stesse modifiche di configurazione nelle posizioni seguenti:
    • <tomcat>/webapps/reportservice/WEB-INF/ehcache_hibernate.xml
    • <tomcat>/webapps/reportservice/WEB-INF/classes/ehcache_hibernate.xml
  17. Ripetere la stessa configurazione (tutte le operazioni) su tutte le istanze JasperReports Server disponibili nel cluster.
  18. Eliminare o cancellare le seguenti directory:
    • tomcat
      temp
    • work/Catalina/localhost
  19. Avviare il server Tomcat.
Configurazione di ActiveMQ per JasperReports su Windows Server
  1. Scaricare il server Activemq da Apache all'indirizzo http://activemq.apache.org/activemq-5158-release.html.
  2. Estrarre il file .zip per Windows.
  3. Installare Java Jdk 1.7 (o versioni successive). Nella presente documentazione si utilizza JDK 11.
  4. Impostare la variabile di ambiente JAVA_HOME sul server.
  5. Accedere alla directory in cui ActiveMQ è stato estratto. In questo esempio si tratta di
    E:\activemq\bin
    .
  6. Eseguire il comando "
    activemq start
    " per avviare il server activemq.
    E:\activemq\bin>activemq start
  7. Dopo aver avviato il server, è possibile accedere alla console di amministrazione sulla porta 8161. Aprire un browser e immettere
    http://hostname:8161/admin
    . Il nome utente e la password predefiniti corrispondono ad admin.
Configurazione di JasperReports Server con ActiveMQ
  1. Arrestare il servizio Jasper.
  2. Accedere a
    %TOMCAT_HOME%/webapps/reportservice/WEB-INF
    .
  3. Modificare il file denominato "
    ehcache_hibernate.xml
    ".
  4. Escludere le righe tra le sezioni "
    RMI
    " ed "
    END OF RMI
    ".
    image2019-4-3_12-51-54.png
  5. Rimuovere le righe tra le sezioni "
    JMS
    " ed "
    END OF JMS
    ".
  6. Sostituire il valore
    ProvideURL
    da "" con "", in cui il nome host indica l'FQDN del server ActiveMQ. Nelle sezioni precedenti è necessario apportare le modifiche cinque volte.
  7. Copiare
    ehcache_hibernate.xml
    nella cartella
    classes
    della cartella
    %TOMCAT_HOME%/webapps/reportservice/WEB-INF
    .
  8. Avviare il servizio Jasper.
  9. Se si effettua l'accesso alla pagina di amministrazione di ActiveMQ, verranno visualizzati due provider di cache (
    ehcacheQueue
    ed
    ehcacheMQueue
    ).
Monitoraggio della console ActiveMQ
  1. Scaricare, installare e configurare l'istanza del server ActiveMQ. Consultare la pagina http://activemq.apache.org/version-5-getting-started.html.
  2. Accedere alla console Web da http://localhost:8161/admin. Sostituire localhost con l'IP del server per accedere alla console Web di ActiveMQ in modalità remota.
  3. Per verificare il numero totale di istanze Jaspersoft connesse all'istanza ActiveMQ, accedere alla scheda
    Queues (Code)
    .
    Ad esempio, http://localhost:8161/admin/queues.jsp. La tabella di questa pagina mostra il numero di istanze Jaspersoft connesse alle istanze del server ActiveMQ.
    image2019-4-29_11-14-5.png
  4. Per verificare l'elenco delle istanze Jaspersoft connesse ad ActiveMQ, accedere alla scheda
    Connections (Connessioni)
    .
    Ad esempio, https://localhost:8161/admin/connections.jsp.
    image2019-4-29_11-15-11.png
Modifica della password di amministrazione predefinita di ActiveMQ
  1. Esaminare il file
    <activemq-installer>/conf/jetty-realm.properties
    .
  2. Il formato è:
    nome utente: password, nome ruolo
    I valori predefiniti sono:
    admin:admin,admin
  3. Modificare il secondo valore per aggiornare la password in:
    admin: <nuova-password>, admin