Setting up load balancing for multiple LQEs
With the help of an example as shown in this topic, you can learn how to configure a reverse proxy server to act as a load balancer for LQE instances that are deployed on a IBM WebSphere Liberty. The reverse proxy server is configured using plug-ins.
Assume that you have two separate LQE servers that are deployed on two different IBM WebSphere Liberty. By using the steps given in this topic, you can set up a load balancer to distribute the query load between the two LQE servers.
For more information about setting up IBM HTTP Server (IHS) as a reverse proxy for an Engineering Lifecycle Management deployment, see Creating IHS plug-in for IBM WebSphere Liberty for troubleshooting tips.
Installing components
Before you begin
- IBM SDK
- IBM HTTP Server (IHS)
- Web server plug-ins for IBM WebSphere Application Server
- IBM HTTP Server
- /opt/IBM/HTTPServer
- WebSphere plug-ins
- /opt/IBM/WebSphere/Plugins/
- LQE is installed on two different servers that uses this same default location
- /opt/IBM/JazzTeamServer/
Creating a keystore and certificate using iKeyman for the IHS server
Procedure
- New key database: Complete the following
substeps.
- To locate and start iKeyman, run the following
command.
/opt/IBM/HTTPServer/java/jre/bin/ikeyman
- To create a new key database file, click Key Database File > New.
- To locate and start iKeyman, run the following
command.
- New keystore: Complete the following substeps.
- In the New dialog box, from the Key database Type list, select
CMS.Note: To enable the CMS provider, add the following line to the java.security file.
security.provider.10=com.ibm.security.cmskeystore.CMSProvider
If you are using iKeyman in /opt/IBM/HTTPServer/java/jre/bin, then you can find the java.security file here.
/opt/IBM/HTTPServer/java/jre/conf/security/java.security
- In the File Name field, type the name of your keystore. For instance, IHS_KEY.kdb.
- In the Location field, click Browse to enter a
path for your keystore. For example,
/opt/IBM/HTTPServer/bin
Remember: Add this path to the bin directory of the IHS server. Later, you must enter the same path for the httpd.conf file. - Click OK.
- In the Password Prompt dialog box, enter a password and then confirm.
- Select the Stash password to a file checkbox.Remember: Do not specify an expiration date. Otherwise, when this certificate expires you need to create a new stash file.
- In the New dialog box, from the Key database Type list, select
CMS.
- New self-signed certificate for the IHS keystore:
Complete the following steps.
- To create a new self-signed certificate, click New Self-Signed.
- In the Create New Self-Signed Certificate dialog box, enter the following information about the server.
- In the Key Label field, type the name of the certificate. For example, default.
- In the Common Name field, enter the web server name.
- In the Validity Period field, type 3650. The value 3650 is entered so that you do not need to create a new certificate in the same year.
- Click OK.
- Verify that the default certificate was created.
Creating a keystore and certificate for the web server plug-in
Procedure
- New directory for the plug-in
configuration information: To create a directory for the plug-in configuration file, run the
following
command.
mkdir /opt/IBM/WebSphere/Plugins/config/webserver1
Where,Use a separate keystore for the IHS server and the plug-in configuration file.- Plug-in installation path
- /opt/IBM/WebSphere/Plugins/
- Directory for the plug-in config file
- config/webserver1
- Export signer certificate: Complete the following
substeps to get a certificate from your Liberty server.
- Start iKeyman on the Liberty server where LQE is deployed.Note: If your IHS server is on a different server than your Liberty server, then you can use the iKeyman tool that comes with the ELM installation. For example, in this installation process, the iKeyman tool is located here.
/opt/IBM/JazzTeamServer/server/java/jre/bin/ikeyman
- In the iKeyman tool, click the open icon.
- From the Key database type list, select JKS.
- From the Files of Type list, select All Files.
- Click Browse and select the location of the IBM WebSphere Liberty keystore. For
example,
/opt/IBM/JazzTeamServer/server/liberty/servers/clm/resources/security/ibm-team-ssl.keystore
- Enter the password.
- Click Extract Certificate.
- In the New dialog box, in the Certificate file name field, enter the name for the certificate that identifies the LQE server. For example, cert-lqe1.arm.
- Accept the default location.
- Click OK. Verify that the certificate is created.
- Copy this certificate into the WebServer1 directory. Now close iKeyman on the WebSphere® Liberty server.
- Repeat steps 2-a to 2-k for the other LQE server.
Now, you have two certificates (cert-lqe1.arm and cert-lqe2.arm) in the /opt/IBM/WebSphere/Plugins/config/webserver1 location. - Start iKeyman on the Liberty server where LQE is deployed.
- New key database on the IHS server: Return to
iKeyman on the IHS server. If iKeyman is not up, then restart it. In the New dialog box,
complete the following substeps.
- From the Key database type field, select CMS.
- In the File Name field, enter a name of your keystore file. For example, plugin-key.kdb.
- Click Browse to select the path of your keystore file. For example, /opt/IBM/WebSphere/Plugins/config/webserver1.
- Click OK. The Password Prompt dialog box opens.
- Enter the password and confirm.
- Select the Stash password to a file checkbox.Remember: Do not specify an expiration date. Otherwise, when this file expires you must create a new stash file.
- Import Jazz signer
certificate: Complete the following substeps.
- Import the signer certificate from the first Liberty server (cert-lqe1.arm). From the Key database content list, select Signer Certificates.
- Click Add. The Open dialog box opens.
- Click Browse to go to the /opt/IBM/WebSphere/Plugins/config/WebServer1 directory, and then select the cert-lqe1.arm file.
- Click OK.
- In the Enter a Label dialog box, type LQE1.
- To import the cert-lqe2.arm file into the keystore, repeat steps 4-a to 4-e. Specify a different label, for example, LQE2.
The following message shows that the two certificates were successfully imported. - Update server.xml on each
LQE node: Complete the following substeps.
- In the Liberty server, update the server.xml configuration file on each
clustered node with the unique
cloneId
. - Update the
httpSession
tag in the server.xml file in all the clustered nodes to add thecloneId
field. It is the clone identifier of the cluster member.<httpSession invalidateOnUnauthorizedSessionRequestException="true" cookieSecure="true" cloneId="ccm1"/>
Note: Within a cluster, this identifier (cloneId
) must be unique for each node to maintain session affinity. When set, this name overwrites the default name that is generated by the server. The samecloneId
is used in the web plug-in configuration to identifyAffinity Requests
.
- In the Liberty server, update the server.xml configuration file on each
clustered node with the unique
- Create the plug-in configuration file
(plugin-cfg.xml): Complete the following substeps.
- Copy the plugin-cfg.xml file over to your IHS server and place it in the
/opt/IBM/WebSphere/Plugins/config/webserver1 directory.Note: In IBM WebSphere Liberty 6.0.4 or later, the plugin-cfg.xml is generated automatically at server startup under the server_install_dir/server/liberty/servers/clm/logs/state directory.
- Copy the plugin-cfg.xml file for each of the WebSphere Liberty server and rename them to plugin-cfg-lqe1.xml and plugin-cfg-lqe2.xml. Make a copy of one of them and use it to merge the content of the two files and call it plugin-cfg.xml.
- Open the plugin-cfg.xml configuration file and verify the contents. It
contains code snippet that is similar to the following code
snippet:
<?xml version="1.0" encoding="UTF-8"?><!--HTTP server plugin config file for clm generated on 2019.08.26 at 12:05:12 EDT--> <Config ASDisableNagle="false" AcceptAllContent="false" AppServerPortPreference="HostHeader" ChunkedResponse="false" FIPSEnable="false" IISDisableNagle="false" IISPluginPriority="High" IgnoreDNSFailures="false" RefreshInterval="60" ResponseChunkSize="64" SSLConsolidate="false" TrustedProxyEnable="false" VHostMatchingCompat="false"> <Log LogLevel="Error" Name="/opt/IBM/WebSphere/Plugins/logs/webserver1/http_plugin.log"/> <Property Name="ESIEnable" Value="true"/> <Property Name="ESIMaxCacheSize" Value="1024"/> <Property Name="ESIInvalidationMonitor" Value="false"/> <Property Name="ESIEnableToPassCookies" Value="false"/> <Property Name="PluginInstallRoot" Value="/opt/IBM/WebSphere/Plugins"/> <!-- Configuration generated using httpEndpointRef=defaultHttpEndpoint--> <!-- The default_host contained only aliases for endpoint defaultHttpEndpoint. The generated VirtualHostGroup will contain only configured web server ports: webserverPort=80 webserverSecurePort=443 --> <VirtualHostGroup Name="default_host"> <VirtualHost Name="*:80"/> <VirtualHost Name="*:443"/> </VirtualHostGroup> <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="clm_default_node_Cluster" PostBufferSize="0" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60" ServerIOTimeoutRetry="-1"> <Server CloneID="lqe1" ConnectTimeout="5" ExtendedHandshake="false" LoadBalanceWeight="20" MaxConnections="-1" Name="default_node_clm" ServerIOTimeout="900" WaitForContinue="false"> <Transport Hostname="lqe-1.myserver.ibm.com" Port="9080" Protocol="http"/> <Transport Hostname="lqe-1.myserver.ibm.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.sth"/> </Transport> </Server> <PrimaryServers> <Server Name="default_node_clm"/> </PrimaryServers> </ServerCluster> <UriGroup Name="default_host_clm_default_node_Cluster_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/lqe/*"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/IBMJMXConnectorREST/*"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ibm/api/*"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ibm/adminCenter/explore-1.0/*"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/ibm/adminCenter/serverConfig-1.0/*"/> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/adminCenter/*"/> </UriGroup> <Route ServerCluster="clm_default_node_Cluster" UriGroup="default_host_clm_default_node_Cluster_URIs" VirtualHostGroup="default_host"/> </Config>
- Copy the plugin-cfg.xml file over to your IHS server and place it in the
/opt/IBM/WebSphere/Plugins/config/webserver1 directory.
- Changes to the plugin-cfg.xml file:
You must make the following changes to the plugin-cfg.xml file to match your
environment.
- Examine the contents of the plugin-cfg.xml file and look for the following line.
<Log LogLevel="Error" Name= ************
- Verify that the following entry matches the directory that you created for your Liberty plug-in.
<Log LogLevel="Error" Name="/opt/IBM/WebSphere/Plugins/logs/webserver1/http_plugin.log"/>
-
Update the plugin-cfg.xml file with the values for the keystore and certificate, which were created in the Key database and Importing Jazz signer certificate section sections.
<Property Name="keyring" Value="keyring.kdb"/> <Property Name="stashfile" Value="keyring.sth"/> <Property Name="certLabel" Value="LibertyCert"/>
- Modify the plugin-cfg.xml to match the certificate information that you
created for the Liberty
plug-in.
<Property Name="keyring" Value="/opt/IBM/WebSphere/Plugins/config/WebServer1/plugin-key.kdb"/> <Property Name="stashfile" Value="/opt/IBM/WebSphere/Plugins/config/WebServer1/plugin-key.sth"/> <Property Name="certLabel" Value="LQE1"/>
- In the plugin-cfg.xml file, modify the
ServerCluster
section.<ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="lqe_node_Cluster" PostBufferSize="0" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60" ServerIOTimeoutRetry="-1">
- Edit the
Server
section to have a uniqueCloneId
andName
. TheCloneID
must match the clone ID that was specified in the server.xml. - Duplicate the
Server
section and edit it to match theLQE2
node.<Server CloneID="lqe2" ConnectTimeout="5" ExtendedHandshake="false" LoadBalanceWeight="20" MaxConnections="-1" Name="lqe2_node" ServerIOTimeout="900" WaitForContinue="false"> <Transport Hostname="lqe-2.myServer.ibm.com" Port="9080" Protocol="http"/> <Transport Hostname="lqe-2.myServer.ibm.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.sth"/> <Property Name="certLabel" Value="LQE2"/> </Transport> </Server>
- Edit the
PrimaryServers
section with the names of the servers specified in theServer
section.<PrimaryServers> <Server Name="lqe1_node"/> <Server Name="lqe2_node"/> </PrimaryServers>
- Edit the
UriGroup
section with the cluster name and leave the entry.<UriGroup Name="lqe_node_Cluster_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/lqe/*"/> </UriGroup>
- Edit the
Route
section with the names specified in the relevant sections.<Route ServerCluster="lqe_node_Cluster" UriGroup="lqe_node_Cluster_URIs" VirtualHostGroup="default_host"/>
The merged plugin-cfg.xml file must contain the following content.
<?xml version="1.0" encoding="UTF-8"?><!--HTTP server plugin config file for clm generated on 2019.08.26 at 08:05:47 EDT--> <Config ASDisableNagle="false" AcceptAllContent="false" AppServerPortPreference="HostHeader" ChunkedResponse="false" FIPSEnable="false" IISDisableNagle="false" IISPluginPriority="High" IgnoreDNSFailures="false" RefreshInterval="60" ResponseChunkSize="64" SSLConsolidate="false" TrustedProxyEnable="false" VHostMatchingCompat="false"> <Log LogLevel="debug" Name="/opt/IBM/WebSphere/Plugins/logs/webserver1/http_plugin.log"/> <Property Name="ESIEnable" Value="true"/> <Property Name="ESIMaxCacheSize" Value="1024"/> <Property Name="ESIInvalidationMonitor" Value="false"/> <Property Name="ESIEnableToPassCookies" Value="false"/> <Property Name="PluginInstallRoot" Value="/opt/IBM/WebSphere/Plugins"/> <!-- Configuration generated using httpEndpointRef=defaultHttpEndpoint--> <!-- The default_host contained only aliases for endpoint defaultHttpEndpoint. The generated VirtualHostGroup will contain only configured web server ports: webserverPort=80 webserverSecurePort=443 --> <VirtualHostGroup Name="default_host"> <VirtualHost Name="*:80"/> <VirtualHost Name="*:443"/> </VirtualHostGroup> <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="false" LoadBalance="Round Robin" Name="lqe_node_Cluster" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60" ServerIOTimeoutRetry="-1"> <Server CloneID="lqe2" ConnectTimeout="5" ExtendedHandshake="false" LoadBalanceWeight="20" MaxConnections="-1" Name="lqe2_node" ServerIOTimeout="900" WaitForContinue="false"> <Transport Hostname="lqe-2.myserver.ibm.com" Port="9080" Protocol="http"/> <Transport Hostname="lqe-2.myserver.ibm.com" Port="9443" Procol="https"> <Property Name="keyring" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.sth"/> <Property Name="certLabel" Value="LQE2"/> </Transport> </Server> <Server CloneID="lqe1" ConnectTimeout="5" ExtendedHandshake="false" LoadBalanceWeight="20" MaxConnections="-1" Name="lqe1_node" ServerIOTimeout="900" WaitForContinue="false"> <Transport Hostname="lqe-1.myserver.ibm.com" Port="9080" Protocol="http"/> <Transport Hostname="lqe-1.myserver.ibm.com" Port="9443" Protocol="https"> <Property Name="keyring" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.kdb"/> <Property Name="stashfile" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.sth"/> <Property Name="certLabel" Value="LQE1"/> </Transport> </Server> <PrimaryServers> <Server Name="lqe1_node"/> <Server Name="lqe2_node"/> </PrimaryServers> </ServerCluster> <UriGroup Name="lqe_node_Cluster_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/lqe/*"/> </UriGroup> <Route ServerCluster="lqe_node_Cluster" UriGroup="lqe_node_Cluster_URIs" VirtualHostGroup="default_host"/> </Config>
- Examine the contents of the plugin-cfg.xml file and look for the following line.
Modifying the httpd.conf file
Procedure
- SSL Module: Search for
Load Module ibm_isl module modules/mod_ibm_isl.so
in the httpd.conf file and then uncomment the following content.- The port that you are listening on. The port 443 is the default port.
- The virtual hostname (a * means accept all the traffic that is coming on port 443).
- The path to your key file that was created earlier.
- The path to the stash file that was created earlier.
For instance,LoadModule ibm_ssl_module modules/mod_ibm_ssl.so Listen 0.0.0.0:443 ## IPv6 support: <VirtualHost *:443> SSLEnable SSLProtocolDisable SSLv2 SSLv3 KeyFile /opt/IBM/HTTPServer/bin/IHS_KEY.kdb SSLStashFile /opt/IBM/HTTPServer/bin/IHS_KEY.sth </VirtualHost>
- Plug-in Location: At the end of the
httpd.conf file, enter the path to the plug-in file and the path to the ap22
module.
- Windows
LoadModule was_ap22_module "C:\IBM\WebSphere\Plugins\bin\64bits\mod_was_ap22_http.dll" WebSpherePluginConfig "C:\IBM\WebSphere\Plugins\config\WebServer1\plugin-cfg.xml"
- Linux
LoadModule was_ap22_module "/opt/IBM/WebSphere/Plugins/bin/64bits/mod_was_ap22_http.so" WebSpherePluginConfig "/opt/IBM/WebSphere/Plugins/config/WebServer1/plugin-cfg.xml"
Important parameters that are used in this configuration are described in the following list.
LoadBalance
-
The following values can be specified for this attribute.
Round Robin
: The round-robin implementation has a random starting point. The first application server is picked randomly.Round Robin
is then used to pick application servers from that point forward. This implementation ensures that in multiple process-based web servers, all of the processes do not start by sending the first request to the same application server.Random
: The random implementation also has a random starting point. However, with this implementation all subsequent servers are also randomly selected. Therefore, the same server might get selected repeatedly while other servers remain idle. The default load-balancing type isRandom
.
LoadBalanceWeight
-
LoadBalanceWeight
is a startingweight
. The value is dynamically changed by the plug-in during run time. Theweight
of a server (or clone) is reduced each time a request is assigned to that clone. When all weights for all servers drop to 0 or less, the plug-in must readjust all of the weights so that they are greater than 0. Using a starting value of only 2 (default), means that the weights get to 0 quickly and the plug-in is constantly readjusting the weights. Therefore, it is recommended to start with a higherLoadBalanceWeight
. The WebSphere Application Server administrative console allows a value up to 20 for theLoadBalanceWeight
. However, it is possible to manually edit theplugin-cfg.xml
file and specify some other value forLoadBalanceWeight
that is higher than 20.At run time, theLoadBalanceWeight
of each application server in a cluster are normalized by their highest common factor. For example, 100, 90, 80 have a common factor of 10. So, these configured weights would be divided by 10 at run time, resulting in actual starting weights of only 10, 9, 8. Setting all clones to the same startingLoadBalanceWeight
(for example: 20, 20, 20) results in an actual starting weight of only 1 for each because of normalization. So, it is recommended to set the weight of at least one of the clones to be off by a value of 1. For example, if there are three clones, you might choose the starting value ofLoadBalanceWeights
to be: 20, 20, 19. After normalization the weights remain unchanged.Note: Recommended values forLoadBalanceWeight
= All clones must have the same value, except one clone must be off by one. Affinity Requests
-
Affinity Requests
are requests that contain a session cookie (JSESSIONID
). Session affinity means that all requests of the sameJSESSIONID
is sent to the same application server. For example, if the first request is sent toclone5
, then the next request from that same client (Affinity Requests
) is also sent toclone5
, regardless of the value ofLoadBalanceWeight
. If you useRound Robin
forLoadBalance
option, then by default, theAffinity Requests
do not lower the "weight" (IgnoreAffinityRequests="true"
). This choice can cause an uneven distribution across the servers in environments that uses session affinity. But, ifIgnoreAffinityRequests="false"
, then the weight is reduced by eachAffinity Request
. This leads to a more balanced random environment.When you useRandom
, theAffinity Request
is still handled correctly and sent to samecloneid
, as before. But new requests are routed randomly, and theLoadBalanceWeight
is not used.Note: TheIgnoreAffinityRequests
option is only available in the web server plug-in version 6.1 or higher. ConnectTimeout
-
ConnectTimeout
indicates the time for which the plug-in must wait when it is trying to open a socket to the application server. If there are streams already open and available to the application server, the plug-in uses one of those streams. However, sometimes the plug-in must open a new stream to the application server. The value forConnectTimeout
must be small, so that the plug-in opens a new stream to the application server quickly.A
ConnectTimeout
value of 0 means never timeout. In that case, the timeout is left up to the operating system's TCP layer, which is not an ideal scenario. It is better to specify a small positive number, such as 5 seconds. The recommended value = 5. MaxConnections
-
MaxConnections
specifies the maximum number of pending connections to an application server that can be flowing through a web server process at any point in time. Specify one element for each server. It is not used to determine when to fail over (mark the server "down"). When a request is sent from the plug-in to the WebSphere Application Server, it is called aPendingRequest
, until the response comes back. If the application running in WebSphere Application Server is handling requests quickly, each request is in PENDING state for a short time. Therefore, under ideal conditions,MaxConnections
is not needed and the default value ofMaxConnections
is -1, which means unlimited.However, sometimes an application might start to become overwhelmed and the application might not be able to handle the requests as quickly. Therefore, pending requests start to build up.
MaxConnections
can be used to put a limit on the number of pending requests per server.When theMaxConnections
limit is reached, the plug-in stops sending requests to that application server, but it is not marked down. The optimal value forMaxConnections
depends on how quickly the application and the application server respond to each request. If normal responses are returned in less than 1 second, it might be appropriate to set a low value forMaxConnections
, like 20. However, if it normally takes several seconds to get a response from the application, you might use a higher value forMaxConnections
, such as 100.Note: If theMaxConnections
limit is reached, then the plug-in does not send any more requests to that server until responses come back for the current pending requests. The count of thependingRequests
drops back down below theMaxConnections
limit.Tip:With
MaxConnections="-1"
, useLogLevel="Stats"
to monitor thependingRequests
numbers in the plug-in log, under normal conditions. Then, choose a value forMaxConnections
that is significantly higher than the highest number that is displayed in the log. This method enables you to determine aMaxConnections
value that is right for your specific environment.
ServerIOTimeout
-
ServerIOTimeout
means how long must the plug-in wait for a response from the application. After the socket is opened, the plug-in sends the request to the application server. The application processes the request and a response is sent back to the client, through the plug-in. How long must that take? What is reasonable, based on the application? There is no single correct answer here. It depends on the application.If the application is quick to respond, then you can use a lower value for
ServerIOTimeout
. However, if the application requires more time to process the requests (such as, retrieve data from a database), then you can use a higher number forServerIOTimeout
. When you use the value 0, it means that the plug-in does not timeout the request. This scenario is not the ideal situation.A positive value means that the plug-in does not mark down the application server after a
ServerIOTimeout
occurs. So, if you want the plug-in to continue sending requests to the timed-out application server, use a positive value. A negative value means that the plug-in marks that the application server is down after aServerIOTimeout
occurs. So, if you want the plug-in to immediately mark the application as down and fail over to another application server in the same cluster, use a negative value forServerIOTimeout
.
Tip:ServerIOTimeout
use traces to determine the amount of time it takes for your application to respond to requests under normal conditions. Be sure to include the longest running requests that take the most time to respond. Then, choose a value forServerIOTimeout
that is much larger (2X or 3X or more) than the longest response time. This method ensures that yourServerIOTimeout
is high enough to allow adequate time for the application to respond normally. Make it a negative value so that if theServerIOTimeout
pops, the plug-in immediately marks down the server, and retries the request to a different application server.Important: If you are using Liberty plug-in version 6.1 or higher, then make the following settings in the httpd.conf file:-
set _IgnoreAffinityRequests="false"_
-
set _LoadBalance="Round Robin"_
- Windows
- Restart the IHS server.
Creating enterprise deployments and multiple WebSphere Liberty servers
About this task
Procedure
pluginCfgMerge
script to merge the plug-in configuration files
into a single file. pluginCfgMerge.bat plugin-cfg1.xml plugin-cfg2.xml plugin-cfg3.xml merged-plugin-cfg.xml
On Linux, the command is pluginCFgMerge.sh.
Setting up another load balancer
Alternatively, you can use another load balancer to balance the query load between your LQE servers.
Although not officially supported, the setup is documented in the following wiki page: