Note: Support removed for IBM WebSphere Application Server (Traditional WAS) with ELM version 7.0.3. Use WebSphere Liberty, either embedded and installed with ELM applications, or separately installed
Deploy each of the jts.war, ccm.war, rm.war (cold standby only), and qm.war on their respective Primary and Backup servers so that you can use idle standby as a strategy for failover in high availability environments.
The following table lists the abbreviations that are used throughout these deployment instructions:
Acronym | Term |
---|---|
URI | Uniform Resource Identifier |
JTS | Jazz Team Server |
CCM | Change and Configuration Management |
QM | Quality Management |
RM | Requirements Management |
LPA | Lifecycle Project Administration |
CLM | Rational solution for Collaborative Lifecycle Management (CLM), which includes JTS, the CCM application, the QM application, and the RM application |
ELM | IBM solution for Engineering Lifecycle Management (ELM), which includes JTS, the CCM application, the QM application, and the RM application. CLM was renamed to ELM beginning with release 7.0 |
The following table lists the basic high availability requirements:
Server | Software | Operating system |
---|---|---|
IBM HTTP Server |
|
Windows, Linux, AIX |
WebSphere Application Server Primary Server A |
|
Windows, Linux, AIX |
WebSphere Application Server Backup Server B |
|
Windows, Linux, AIX |
File Server, Shared Disk | Lucene Index: file-based indexes used by the applications | Windows, Linux, AIX |
The following is a list of known issues in the active CCM backup server:
The following sections describe setting up and configuring your primary and backup servers for a basic high-availability environment.
To install and configure copies of the IBM solution for Engineering Lifecycle Management (ELM) applications on the primary and backup servers, follow these steps.
For information about installing ELM applications, configuring WebSphere Application Server and deploying .WAR files, see the IBM Documentation [https://www.ibm.com/docs/en/elm/7.0.2?topic=installing-interactive-guides][Interactive Installation Guide]].
The jts.war application is typically installed with a single application server as its target. With the introduction of the Web server, the application container configuration must be modified to allow routing through the Web server.
To modify the application:
Reconfigure both the primary and backup Jazz Team Server instances to reference the same location for the full text index. To keep the index up to date and available to both the primary and back up servers, update the com.ibm.team.fulltext.indexLocation
and com.ibm.team.jfs.index.root.directory
properties in the teamserver.properties
files on both the primary and backup servers to store the index on a shared drive.
com.ibm.team.fulltext.indexLocation=I\:/sharedIndexFolder/workitemindex
com.ibm.team.fulltext.indexLocation=/net/LinuxHost/sharedIndex/workitemindex
teamserver.properties
file on the Backup server:
com.ibm.team.repository.scheduler.migration.mode.enabled=true
When asynchronous tasks are turned off, the backup server will not run the asynchronous tasks. If circumstances dictate that the backup server is used as the primary server for an extended period of time, this property should be reset to false to enable the background tasks in the Advanced Properties. Make sure to set it to true before restarting the primary server.
plugin.xml
file is updated with the connection information for that application server. At this point, you have partially configured the plugin-cfg.xml
file. Replace and then edit the following section of the plugin-cfg.xml
file on the Web server to complete the configuration. This plugin-cfg.xml
file is located in the plugin\config\webserver1
folder of the web server, where webserver1 is the name that you assigned to the web server in the previous section, "Installing and configuring the IBM HTTP Server and Web Server plug-ins".
<!-- JTS URI Group --> <UriGroup Name="default_host_JTS_basicHA_Cluster_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/admin/*"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/jts/*"/> </UriGroup> <!-- CCM URI Group --> <UriGroup Name="default_host_CCM_basicHA_Cluster_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ccm/*"/> </UriGroup> <!-- QM URI Group --> <UriGroup Name="default_host_QM_basicHA_Cluster_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/qm/*"/> </UriGroup> <!-- RM URI Group --> <UriGroup Name="default_host_RM_basicHA_Cluster_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/rm/*"/> </UriGroup>
<!-- JTS Server Cluster --> <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="server1_jts_Cluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60"> <Server LoadBalanceWeight="0" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="jts1Node01_server1" ServerIOTimeout="0" WaitForContinue="false"> <Transport Hostname="jts1.example.com" Port="9080" Protocol="http"/> <Transport Hostname="jts1.example.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.sth"/> </Transport> </Server> <Server LoadBalanceWeight="1" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="jts2Node01_server1" ServerIOTimeout="0" WaitForContinue="false"> <Transport Hostname="jts2.example.com" Port="9080" Protocol="http"/> <Transport Hostname="jts2.example.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.sth"/> </Transport>> </Server> </ServerCluster> <!-- End JTS Server Cluster --> <!-- CCM Server Cluster --> <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="server1_ccm_Cluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60"> <Server LoadBalanceWeight="0" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="ccm1Node01_server1" ServerIOTimeout="0" WaitForContinue="false"> <Transport Hostname="ccm5.example.com" Port="9080" Protocol="http"/> <Transport Hostname="ccm5.example.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.sth"/> </Transport> </Server> <Server LoadBalanceWeight="1" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="ccm2Node01_server1" ServerIOTimeout="0" WaitForContinue="false"> <Transport Hostname="ccm6.example.com" Port="9080" Protocol="http"/> <Transport Hostname="ccm6.example.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.sth"/> </Transport> </Server> </ServerCluster> <!-- End CCM Cluster --> <!-- QM Server Cluster --> <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="server1_qm_Cluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60"> <Server LoadBalanceWeight="0" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="qm1Node01_server1" ServerIOTimeout="0" WaitForContinue="false"> <Transport Hostname="qm7.example.com" Port="9080" Protocol="http"/> <Transport Hostname="qm7.example.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.sth"/> </Transport> </Server> <Server LoadBalanceWeight="1" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="qm2Node01_server1" ServerIOTimeout="0" WaitForContinue="false"> <Transport Hostname="qm8.example.com" Port="9080" Protocol="http"/> <Transport Hostname="qm8.example.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.sth"/> </Transport> </Server> </ServerCluster> <!-- End QM Cluster --> <!-- RM Server Cluster --> <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="server1_rm_Cluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60"> <Server LoadBalanceWeight="0" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="rm1Node01_server1" ServerIOTimeout="0" WaitForContinue="false"> <Transport Hostname="rm3.example.com" Port="9080" Protocol="http"/> <Transport Hostname="rm3.example.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.sth"/> </Transport> </Server> <Server LoadBalanceWeight="1" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="rm2Node01_server1" ServerIOTimeout="0" WaitForContinue="false"> <Transport Hostname="rm4.example.com" Port="9080" Protocol="http"/> <Transport Hostname="rm4.example.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/root/IBM/HTTPServer/Plugins/config/webserver1/plugin-key.sth"/> </Transport> </Server> </ServerCluster> <!-- End RM Cluster -->
<Route ServerCluster="server1_jts_Cluster" UriGroup="default_host_JTS_basicHA_Cluster_URIs" VirtualHostGroup="default_host"/> <Route ServerCluster="server1_ccm_Cluster" UriGroup="default_host_CCM_basicHA_Cluster_URIs" VirtualHostGroup="default_host"/> <Route ServerCluster="server1_qm_Cluster" UriGroup="default_host_QM_basicHA_Cluster_URIs" VirtualHostGroup="default_host"/> <Route ServerCluster="server1_rm_Cluster" UriGroup="default_host_RM_basicHA_Cluster_URIs" VirtualHostGroup="default_host"/>
JazzInstallDir/server/conf/jts/teamserver.properties JazzInstallDir/server/conf/jts/log4j.properties
JazzInstallDir/server/conf/ccm/teamserver.properties JazzInstallDir/server/conf/ccm/log4j.properties
JazzInstallDir/server/conf/qm/teamserver.properties JazzInstallDir/server/conf/qm/log4j.properties JazzInstallDir/server/conf/qm/integration_config.xml
JazzInstallDir/server/conf/rm/log4j.properties JazzInstallDir/server/conf/rm/fronting.properties JazzInstallDir/server/conf/rm/friendsconfig.rdf JazzInstallDir/server/rrcweb/composerweb.properties JazzInstallDir/server/rrcweb/log4j.properties
JazzInstallDir/server/conf/admin/friends.rtf JazzInstallDir/server/conf/admin/log4j.properties JazzInstallDir/server/conf/admin/admin.properties
plugin-cfg.xml
file on the web server so that on the PrimaryNode01 _server1 the LoadBalanceWeight = 0 property is set and on the BackupNode01_server1 the LoadBalanceWeight = 1 property is set. Save the plugin-cfg.xml
file. https://webserver/snoop
.
The process of detecting a failed server is a critical and time-sensitive task. Several factors can indicate that a server has failed, such as network problems, configuration problems, application overloading, or user error. Whatever solution you choose to detect server failures, you must ensure that the alert is as rapid as possible.
Sometimes, you can fix the failed application server by restarting it. If you suspect the repair or maintenance of the primary application server might take more time to fix, then it is best to mark the primary server as unavailable.
plugin-cfg.xml
file, locate the following line: <Server <nop>LoadBalanceWeight ="1" ...
<nop>LoadBalanceWeight
attribute from 1 to 0.
plugin-cfg.xml
file.
repotools-jts -resumeIndexer repositoryURL=https://server.example.com/jts adminUserId=wasadmin adminPassword=wasadmin
repotools-ccm -resumeIndexer repositoryURL=https://server.example.com/ccm adminUserId=wasadmin adminPassword=wasadmin
repotools-qm -resumeIndexer repositoryURL=https://server.example.com/qm adminUserId=wasadmin adminPassword=wasadminWhen failing over to the Jazz Team Server backup, start the LPA application from the WebSphere console.
When the LoadBalanceWeight
property is set to 0, no requests can be sent to the server even if it becomes available. To restore availability to the server, change the LoadBalanceWeight
property setting back to 1.
LoadBalanceWeight
property attributes so that you prevent the primary and backup servers from communicating to the repository at the same time.
During the recovery process, some users might experience a brief disconnection or delay. However, after the primary server is back up, the server resumes taking requests from the web server.
plugin-cfg.xml
file, locate the entry for the PrimaryNode01_server1
property, and change the LoadBalanceWeight
attribute from 0 to 1.
plugin-cfg.xml
file, locate the entry for the BackupNode01_server1
property, and change the LoadBalanceWeight
attribute from 1 to 0.
plugin-cfg.xml
file.
Status icon key: