CSA: Configuración de ping de JDBC como alternativa a la multidifusión (solo local)

ccppmop158
Como alternativa a la multidifusión de la red, Clarity PPM permite la implementación opcional de la mensajería basada en JDBC a nivel de la base de datos utilizando el protocolo de detección ping de JGROUPS JDBC. El ping de JDBC utiliza una base de datos compartida común para almacenar información sobre los nodos del clúster utilizados para la detección.
La opción de ping de JDBC solo está disponible y es compatible con CA Clarity PPM versión 15.3 o posterior
.
Idealmente, todos los nodos del clúster pueden acceder a la base de datos. Cuando se inicia un nodo, busca la información acerca de los miembros existentes de la base de datos, determina el coordinador y solicita a los nodos de CA PPM que se unan al clúster. Cada nodo también introduce información sobre sí mismo en la tabla para que otros miembros del nodo la puedan encontrar. Los mensajes se entregan de la misma manera que en la multidifusión, excepto que ahora los gestiona JDBC.
Jaspersoft no puede utilizar ping de JDBC. Los entornos en clúster de Jaspersoft deben continuar utilizando la multidifusión. Si se implementa Jaspersoft en un único servidor, se debe continuar utilizando la multidifusión. Las instancias de servidor único de Jaspersoft utilizan una conexión de la base de datos de JDBC directa con PPM.
2
La nueva abreviatura de la Administración del sistema de CA Clarity PPM (CSA) a veces sigue apareciendo con su abreviatura heredada (NSA).
Ping de JDBC: Requisitos previos
1 Incompleto: Compruebe todos los valores de configuración en un entorno que no sea de producción, como un entorno de desarrollo o prueba, antes de activarlos en un sistema de producción. 6 Incompleto: Compruebe que la configuración de CA PPM está utilizando la multidifusión o ping de JDBC. No se pueden mezclar estas opciones. 2 Incompleto: Si utiliza ping de JDBC, compruebe que todos los servicios de CA PPM están configurados para utilizar ping de JDBC. 3 Incompleto: Verifique que todas las contraseñas de NSA de todos los servidores están configuradas con el mismo valor. Todos los miembros del clúster comparten una única contraseña común en todos los servicios de NSA. Esta contraseña se utiliza para validar los paquetes de multidifusión enviados por los distintos nodos del clúster. Si es necesario realizar el restablecimiento de la contraseña, ejecute
admin password
4 Incompleto: Si un servidor tiene varias direcciones IP (varias NIC), configure el servicio Beacon para que se enlace a una única dirección IP específica. Vuelva a implementar el servicio Beacon después de realizar cualquier cambio. 5 Incompleto
Compruebe que todos los servicios se encuentran en la misma subred.
  • Para confirmar en Windows, utilice
    ipconfig
    .
  • Para confirmar en Linux, utilice
    ifconfig
    .
Ping de JDBC: Configuración
Asegúrese de que las entradas en CSA y en el archivo properties.xml se realizan con cuidado. Un único error de configuración de la máscara de red mientras se aprovisiona el servidor puede provocar que los servicios no se comuniquen entre ellos.
20180614-JDBC-PING-CSA.jpg
Siga estos pasos
:
  1. Abra CSA desplazándose a
    http://<servidor_ca_ppm>:<puerto>
    . Por ejemplo,
    http://ppm_server.my.org:8090
    Clarity PPM:
  2. Haga clic en
    Página principal
    y, a continuación, en
    Todos los servicios
    . Detenga todos los servicios de CA PPM antes de realizar cualquier cambio.
  3. Haga clic en
    Página principal
    y, a continuación, en
    Servidores
    .
  4. Repita estos pasos para cada servidor en el clúster de la aplicación.
    1. Haga clic en el servidor. El nombre del servidor aparece como un vínculo. Por ejemplo, my_ca_ppm:<puerto> (local).
      Aparece la página Propiedades.
    2. En el campo
      Dirección de multidifusión
      , para cumplir el campo obligatorio, deje la dirección IP predeterminada.
    3. En el campo
      Puerto de multidifusión
      , deje el valor anterior o introduzca un valor de puerto estándar como 8090 o 9090 para satisfacer el campo obligatorio.
    4. En el campo
      Dirección de vínculo
      , introduzca la dirección IP del servidor de aplicaciones. Una dirección de vínculo es una dirección IP de la interfaz de red local que garantiza que todos los equipos utilizan la misma interfaz de la dirección IP en la misma subred. Si tiene varios servidores, cada servidor debe tener la dirección IP o vínculo correctos de ese servidor. Si un servidor tiene varias NIC y, por lo tanto, varias direcciones IP, especifique la dirección IP que desea que CA PPM utilice para la comunicación de red.
      A diferencia de la multidifusión, ping de JDBC no necesita que todos los servidores pertenezcan a la misma subred.
    5. Haga clic en
      Save
      .
  5. Abra el archivo
    properties.xml
    en cada servidor.
    1. En la sección
      NSA
      , agregue el parámetro
      useJDBCPing="true"
      tal y como se muestra en el ejemplo siguiente:
      <nsa bindAddress="###.###.###.###" multicastAddress="###.###.###.###" multicastPort="9191" clientPort="9288" serviceName="CA PPM Beacon 123" useJDBCPing="true" "autoDiscovery=true"/>
      Sustituya # con los valores del nodo de la dirección IP.
    2. Si todavía no ha establecido los valores del campo
      Dirección de vínculo
      en CSA, puede configurarlos manualmente en el archivo
      properties.xml
      . La propiedad
      bindAddress
      debe utilizar la dirección IP asociada con el servidor de aplicaciones proporcionado.
    3. Repita estos pasos para cada servidor.
      Si el servidor tiene varias direcciones IP (NIC), configure el servicio Beacon para vincularse a una única dirección IP específica. Este paso no es obligatorio, pero si el servicio Beacon no se configura correctamente, los servidores no estarán visibles en CSA. Después de realizar cambios, detenga, elimine, agregue e implemente el servicio Beacon.
  6. En CSA, haga clic en
    Página principal
    y, a continuación, en
    Todos los servicios
    . Inicie todos los servicios de CA PPM.
  7. Verifique que los servicios Beacon se inician correctamente en todos los servidores del clúster. En cada servidor de aplicaciones, ejecute el siguiente comando:
    niku start beacon
    .
  8. Confirme que el servicio Beacon permanece activo. En cada servidor de aplicaciones, ejecute el siguiente comando:
    niku status beacon
    .
Ping de JDBC: Verificación de que la mensajería de ping de JDBC está activada
Después de activar ping de JDBC, la base de datos de PPM crea una tabla llamada
CMN_JGROUPS_PING
.
  • La información de la dirección de ping de JDBC se almacena en esta tabla.
  • Los nodos de un clúster también se registran en esta tabla.
Siga estos pasos
:
  1. Acceda a la base de datos con permisos para ver esta tabla.
  2. Compruebe que la información sobre todos los servicios de PPM se rellena en la tabla
    CMN_JGROUPS_PING
    de la base de datos.
    La imagen siguiente proporciona un ejemplo:
    image2018-6-11 12:24:49.png
    CREATED
    : La fecha y hora del mensaje registrado más recientemente.
    CLUSTER_NAME
    : El nombre del tema del clúster principal para cada servidor miembro.
    PING_DATA
    : El contenido del mensaje.
    UUID
    : El identificador único para cada servidor que consta de un nombre de tema y un ID de instancia de la aplicación. En este ejemplo, el nombre de tema se ha establecido en CLRTY en todos los casos.
  3. Cuando JGroups utiliza JDBCPing, la detección de los nodos del clúster se realiza utilizando la base de datos. Una vez detectados, el protocolo entre los nodos es TCP y debe ser punto a punto.
    1. Actualice el archivo
      my/etc/hosts
      para que apunte a 127.0.0.1 para utilizar
      $HOSTNAME
      .
    2. Utilice un comando telnet o nc para probar la conectividad del puerto.
    3. Verifique que la comunicación en el puerto Beacon esté
      abierta
      .
El cambio a utilizar ping de JDBC no requiere ningún paso adicional para las integraciones de PPM con el inicio de sesión único.
Cuando actualice la base de datos de producción a prueba, ejecute el comando
truncate table CMN_JGROUPS_PING
para eliminar las entradas existentes de la tabla CMN_JGROUPS_PING. Si no se realiza este paso, no se podrá iniciar ningún servicio de Clarity PPM en el servidor de base de datos actualizado.
Migraciones a la nube híbrida de CA PPM
CA ofrece CA PPM SaaS y otras soluciones de la nube de CA. También hay algunos clientes que pueden implementar y gestionar una configuración personalizada de AWS o Microsoft Azure. Como administrador de CA PPM, puede realizar los siguientes pasos de alto nivel:
  1. Después de actualizar, cambie a ping de JDBC. Varios servicios de aplicaciones de PPM pueden comunicarse entre sí utilizando ping de JDBC.
  2. Los entornos de servidor único de Jaspersoft pueden comunicarse con el servidor de la base de datos de PPM utilizando una conexión directa de JDBC.
En este momento, no se admiten las configuraciones en clúster de Jaspersoft en Azure, AWS o cualquier otro entorno de nube híbrida, privada o pública. Sin embargo, reconocemos la demanda de esta funcionalidad. Consulte la nueva sección que aparece a continuación. Existe soporte limitado para el almacenamiento en caché replicado mediante JMS.
Configuración del almacenamiento en caché replicado para JasperReports Server con JMS
En Azure, AWS, Google Cloud y otras nubes públicas donde la multidifusión está desactivada y el ping de JDBC está activado, previamente no se admitía la configuración de Jaspersoft en clúster. Ahora se proporciona soporte limitado para usar Java Message Service (JMS) para replicar Ehcache del servidor de Jaspersoft.
JMS es un mecanismo para interactuar con las colas de mensajes. Las opciones de código abierto para Linux y Windows incluyen Apache ActiveMQ y Oracle Open MQ. En JasperReports 6.1.0 o posterior, ahora está disponible y se admite la replicación de Ehcache a través de JMS. (En las pruebas realizadas y en esta documentación, se ha utilizado ActiveMQ 5.12.1).
Con el módulo de replicación de Ehcache a través de JMS, la organización puede aprovechar la inversión de la cola de mensajes para el almacenamiento en caché.
  • Cada nodo de la memoria caché se suscribe a un tema predefinido, configurado como <topicBindingName> en
    ehcache.xml
    .
  • Cada memoria caché replicada publica elementos de la memoria caché en ese tema. La replicación se configura por memoria caché de acuerdo con el mecanismo de replicación estándar de Ehcache.
  • Los datos se insertan directamente en los nodos de la memoria caché desde los editores externos de temas en cualquier idioma. Una vez que los datos se han enviado al tema de la replicación, los suscriptores de la memoria caché seleccionan automáticamente el tema.
  • JMSCacheLoader envía las solicitudes de carga de memoria caché a uno de los siguientes tipos de cola antes de enviar una respuesta:
    • Nodo de clúster Ehcache
    • Receptor de cola externo
La siguiente imagen muestra las relaciones entre las distintas entidades*:
apache_jms_diagram.png
*Imagen cedida por Apache Software Foundation. Apache ActiveMQ, Apache, el logotipo de pluma de Apache y el logotipo de proyecto de Apache ActiveMQ son marcas comerciales registradas de Apache Software Foundation.
Siga estos pasos:
  1. Verifique que ya está instalada una versión compatible de Clarity PPM con JasperReports Server en un clúster.
  2. Compruebe que todos los nodos de JasperReports Server redirigen a un nodo de base de datos único.
  3. Instale y configure la instancia del servidor de ActiveMQ. Para descargar e instalar ActiveMQ, consulte http://activemq.apache.org/version-5-getting-started.html.
  4. Compruebe que el puerto del agente de ActiveMQ predeterminado es accesible.
  5. Inicie el servidor de ActiveMQ.
  6. Descargue ehcache_jms.zip. La configuración se realiza en el archivo
    ehcache.xml
    .
  7. Cada clúster debe utilizar un nombre de tema fijo para la replicación. ActiveMQ admite la creación automática de destinos de manera predeterminada.
  8. Configure un atributo JMSCacheManagerPeerProviderFactory de manera global para un atributo CacheManager. Realice este paso una vez para cada parámetro de CacheManager (una vez por archivo ehcache.xml).
  9. Agregue el atributo JMSCacheReplicatorFactory a la memoria caché para cada configuración de memoria caché que desee replicar.
    Todas las configuraciones mencionadas con anterioridad ya están disponibles en el archivo
    ehcache.xml
    distribuido con JasperReports Server 6.1.0. Siga las instrucciones siguientes para configurar la distribución de la memoria caché con JMS. La multidifusión es compatible con RMI, JMS y AWS. En las pruebas realizadas, se ha seguido el mecanismo de RMI.
  10. Detenga el servidor de Tomcat.
  11. Vaya a
    <tomcat>/webapps/reportservice/WEB-INF
    y abra el archivo
    ehcache_hibernate.xml
    en un editor.
  12. Agregue una marca de comentario o elimine la siguiente sección del archivo entre los comentarios ***NO CLUSTERING*** y ***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. Elimine los comentarios de las secciones ***JMS*** y ***END OF JMS*** eliminando las líneas <!-- START y END -->. Se activa la replicación de Ehcache a través de 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 la dirección URL del agente de la instancia de ActiveMQ. Busque el atributo
    providerURL
    en el archivo XML y proporcione el valor de la dirección URL del agente de ActiveMQ. Actualice el atributo
    providerURL
    en cinco (5) lugares diferentes en el archivo
    ehcache.xml
    . Por ejemplo,
    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. Guarde el archivo.
  16. Repita los mismos cambios de configuración en las siguientes ubicaciones:
    • <tomcat>/webapps/reportservice/WEB-INF/ehcache_hibernate.xml
    • <tomcat>/webapps/reportservice/WEB-INF/classes/ehcache_hibernate.xml
  17. Repita la misma configuración (todos los pasos) en todas las instancias de JasperReports Server disponibles en el clúster.
  18. Suprima o limpie los siguientes directorios:
    • tomcat
      temp
    • work/Catalina/localhost
  19. Inicie el servidor de Tomcat.
Configuración de ActiveMQ para JasperReports en Windows Server
  1. Descargue ActiveMQ Server desde Apache en http://activemq.apache.org/activemq-5158-release.html.
  2. Extraiga el archivo ZIP para Windows.
  3. Instale Java JDK 1.7 o una versión posterior. En esta documentación se utiliza JDK 11.
  4. Establezca la variable de entorno JAVA_HOME en el servidor.
  5. Vaya al directorio donde se ha extraído ActiveMQ. En este ejemplo es
    E:\activemq\bin
    .
  6. Ejecute el comando
    activemq start
    para iniciar ActiveMQ Server.
    E:\activemq\bin>activemq start
  7. Después de iniciar el servidor se podrá acceder a la Consola de administración en el puerto 8161. Abra un explorador e introduzca
    http://nombrehost:8161/admin
    . El nombre de usuario y la contraseña predeterminados es admin.
Configuración de JasperReports Server con ActiveMQ
  1. Detenga el servicio de Jasper.
  2. Vaya a
    %TOMCAT_HOME%/webapps/reportservice/WEB-INF
    .
  3. Edite el archivo llamado
    ehcache_hibernate.xml
    .
  4. Agregue marcas de comentario a las líneas que se encuentran entre las secciones
    RMI
    y
    END OF RMI
    .
    image2019-4-3_12-51-54.png
  5. Quite las marcas de comentario de las líneas que se encuentran entre las secciones
    JMS
    y
    END OF JMS
    .
  6. Sustituya el valor de
    ProvideURL
    de a donde hostname hace referencia al FQDN de ActiveMQ Server. Entre las secciones anteriores, existen 5 secciones colocadas donde se debe cambiar este valor.
  7. Copie el archivo
    ehcache_hibernate.xml
    a la carpeta
    classes
    que se encuentra en la carpeta
    %TOMCAT_HOME%/webapps/reportservice/WEB-INF
    .
  8. Inicie el servicio de Jasper.
  9. Al iniciar sesión en la página de administración de ActiveMQ se deben ver dos proveedores de memoria cache,
    ehcacheMQueue
    y
    ehcacheQueue
    .
Control de la consola de ActiveMQ
  1. Descargue, instale y configure la instancia del servidor de ActiveMQ. Consulte http://activemq.apache.org/version-5-getting-started.html.
  2. Acceda a la consola web desde http://localhost:8161/admin. Sustituya localhost por la IP del servidor para acceder a la consola web de ActiveMQ de forma remota.
  3. Para verificar el número total de instancias de Jaspersoft que están conectadas a esta instancia de ActiveMQ, vaya a la ficha
    Queues
    .
    Por ejemplo, http://localhost:8161/admin/queues.jsp. La tabla de esta página muestra cuántas instancias de Jaspersoft están conectadas a las instancias del servidor de ActiveMQ.
    image2019-4-29_11-14-5.png
  4. Para verificar la lista de instancias de Jaspersoft que están conectadas a ActiveMQ, vaya a la ficha
    Connections
    .
    Por ejemplo, https://localhost:8161/admin/connections.jsp.
    image2019-4-29_11-15-11.png
Cambio de la contraseña "admin" de ActiveMQ predeterminada
  1. Consulte el archivo
    <instalador-activemq>/conf/jetty-realm.properties
    .
  2. El formato es el siguiente:
    nombre_usuario:contraseña,nombre_rol
    Los valores predeterminados son:
    admin:admin,admin
  3. Cambie el segundo valor para actualizar la contraseña a:
    admin: <contraseña-nueva>, admin