CSA: Configurazione del ping JDBC come alternativa al multicast (solo On Premise)

ccppmop1591
In alternativa al multicast di rete,
Clarity
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.
L'opzione ping JDBC è disponibile e supportata in
Clarity
solo a partire dalla release 15.3.
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
Clarity
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
Clarity
(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
Clarity
utilizzi il multicast o il ping JDBC. Non è possibile combinare queste opzioni. Se si utilizza il ping JDBC, verificare che tutti i servizi
Clarity
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. Nel caso in cui fosse necessario effettuare il ripristino, eseguire
admin password
Clarity PPM. 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 si trovino 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 di
    Clarity
    .
  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 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
      Clarity
      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" "autoDiscovery=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 di
    Clarity
    .
  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 di
Clarity
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 di database
    CMN_JGROUPS_PING
    riporti le informazioni relative a tutti i servizi
    Clarity
    .
    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 l'esecuzione di alcun passaggio aggiuntivo per le integrazioni di
Clarity
con SSO.
Quando si aggiorna il database dall'ambiente di produzione a quello di testing, eseguire il comando
truncate table CMN_JGROUPS_PING
per rimuovere le voci esistenti dalla tabella CMN_JGROUPS_PING. Se non si esegue questa operazione, non sarà possibile avviare i servizi
Clarity
sul server di database aggiornato.
Migrazioni al cloud ibrido di
Clarity
CA propone
Clarity
SaaS e altre soluzioni cloud CA.
Sappiamo che alcuni clienti potrebbero distribuire e gestire una configurazione AWS o Microsoft Azure personalizzata. L'amministratore di
Clarity
può effettuare le seguenti operazioni:
  1. Una volta effettuato l'aggiornamento, passare al ping JDBC. Più servizi app
    Clarity
    possono comunicare tra loro attraverso il ping JDBC.
  2. Gli ambienti Jaspersoft che utilizzano un solo server possono comunicare con il server di database
    Clarity
    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. Verificare di disporre di una release installata e supportata di
    Clarity
    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 il file 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
    in
    %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