Setting up Smart Reporting as a cluster


When installing BMC Helix ITSM: Smart Reporting in a clustered environment, consider the following points:

  • Install primary BMC Helix ITSM: Smart Reporting server with a new or existing database.
  • Install secondary server with the database used by the primary node.
  • Two types of clusters are available: Dynamic and Repository. The Dynamic cluster stores the node information in the memory, and the Repository cluster stores the node information in the centralized database. From version 18.08, the ClusterType parameter is set to Repository.

If you have already performed the Onboarding process before the installation of the secondary server, do not install the secondary node with the same database. Instead, create a blank or dummy database for the secondary server installation. After the successful installation, change the secondary node database details. For more information, see How To Change Repository Database details.

The installation may overwrite the existing table, so BMC recommends installing the secondary node with a dummy database. If it is not possible to create a dummy database, you can clone the primary server. 

Click to view a quick video (3:55) for an example on setting up Remedy Smart Reporting as a cluster.

To set up BMC Helix ITSM: Smart Reporting as a cluster (Tomcat only)

  1. Ensure that all the severs in cluster are in same time zone and are in sync.
  2. Install the BMC Helix ITSM: Smart Reporting on each node. Make sure all nodes point to a primary node repository.
  3. On each node update the web.xml file located at SmartReportingInstallDir/appserver/webapps/ROOT/WEB-INF:  

    1. Update and add the following: 

      <!-- Cluster Management -->
      <servlet>
      <servlet-name>ClusterManagement</servlet-name>
      <servlet-class>com.hof.mi.servlet.ClusterManagement</servlet-class>
      <init-param>
                 <param-name>ClusterType</param-name>
                 <param-value>REPOSITORY</param-value>
      </init-param>
      <init-param>
                 <param-name>SerialiseWebserviceSessions</param-name>
                 <param-value>true</param-value>
      </init-param>
      <init-param>
                 <param-name>CheckSumRows</param-name>
                 <param-value>true</param-value>
      </init-param>
      <init-param>
                 <param-name>EncryptSessionId</param-name>
                 <param-value>true</param-value>
      </init-param>
      <init-param>
                 <param-name>EncryptSessionData</param-name>
                 <param-value>true</param-value>
      </init-param>
      <init-param>
                 <param-name>AutoTaskDelegation</param-name>
                 <param-value>true</param-value>
      </init-param>
      <init-param>         
      <param-name>TaskTypes</param-name>         
      <param-value>       
      REPORT_BROADCAST_BROADCASTTASK,
      FILTER_CACHE,  
      REPORT_BROADCAST_MIREPORTTASK,     
      SOURCE_FILTER_REFRESH,
      SOURCE_FILTER_UPDATE_REMINDER,
      ORGREF_CODE_REFRESH,
      THIRD_PARTY_AUTORUN     
      </param-value>
      </init-param>
      <init-param>
        <param-name>MaxParallelTaskCounts</param-name>
      <param-value>            
      5,        
      5,
      5,
      5,
      5,          
      5,
      5
      </param-value>
      </init-param>
      <load-on-startup>11</load-on-startup>
      </servlet>

      If the AutoTaskDelegation parameter is set to true, the background tasks are automatically delegated to the next available node if the server goes down.

    2. Comment the following:

      <servlet>             
      <servlet-name>SystemTaskManager</servlet-name>            
      <servlet-class>com.hof.servlet.SystemTaskManager</servlet-class>            
      <load-on-startup>8</load-on-startup>
      </servlet>
    3.  Add <distributable/> tag
      The following is a sample snippet: 

      <web-app>            
      <distributable/>              <!-- System Event and Debug classes -->            
      <listener>                        
      <listener-class>com.hof.servlet.SysSessionListener</listener-class>                              
      </listener>
    4. Perform this step if HTTPS traffic is offloaded at the load balancer and Smart Reporting is configured to run on HTTP:

      In the server.xml file (Tomcat configuration file), set the HTTP Connector proxyPort and scheme to the values displayed in the following code snippet. The path of the server.xml file is ARSystemInstallationDirectory\SmartReporting\appserver\conf\server.xml.

      <Connector
       port="8080"
      protocol="HTTP/1.1"
      connectionTimeout="20000"
      proxyPort="443"
      scheme="https"
      disableUploadTimeout="true"/>

      proxyPort is the port of the LB (F5).

    5. (For Dynamic cluster type only) Add the following lines of code:

      Operating System

      File name

      Code

      Linux 

      catalina.sh

      JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
      JAVA_OPTS="$JAVA_OPTS -Djgroups.udp.mcast_addr=<multi-cast IP Address>"
      JAVA_OPTS="$JAVA_OPTS -Djgroups.udp.mcast_port=<multi-cast Port>"
      Example:
      JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
      JAVA_OPTS="$JAVA_OPTS -Djgroups.udp.mcast_addr=228.0.0.5"
      JAVA_OPTS="$JAVA_OPTS -Djgroups.udp.mcast_port=5555"

      Windows

      catalina.bat

      set JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true
      set JAVA_OPTS=%JAVA_OPTS% -Djgroups.udp.mcast_addr=228.0.0.5
      set JAVA_OPTS=%JAVA_OPTS% -Djgroups.udp.mcast_port=5555

      Note

      • Ensure that the multi-cast IP Address that you specify is available and the multi-cast Port is listening.
      • When you configure tomcat to run as a windows service, update the JAVA_OPTS based on the local tomcat configurations.

  4. After the cluster is set up, onboard the tenant. 

    For more information, see Onboarding. Also see the following video (1:44) about the Smart Reporting Onboarding process:


 

Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*