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 Liberty profile. The reverse proxy server is configured using plug-ins.
Assume that you have two separate LQE servers that are deployed on two different Liberty profiles. 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® (IHS) as a reverse proxy for an ELM deployment, see Creating IHS plug-in for Liberty profile 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.CMSProviderIf 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/lib/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.

- To create a new self-signed certificate, click New Self-Signed.
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/webserver1Where,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 Liberty profile 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 Liberty profile 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.
- Import the signer certificate from the first Liberty server
(cert-lqe1.arm). From the Key database content list,
select Signer Certificates.
- 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
httpSessiontag in the server.xml file in all the clustered nodes to add thecloneIdfield. 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 samecloneIdis 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 Liberty profile 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 Liberty profile 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
ServerClustersection.<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
Serversection to have a uniqueCloneIdandName. TheCloneIDmust match the clone ID that was specified in the server.xml. - Duplicate the
Serversection and edit it to match theLQE2node.<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
PrimaryServerssection with the names of the servers specified in theServersection.<PrimaryServers> <Server Name="lqe1_node"/> <Server Name="lqe2_node"/> </PrimaryServers> - Edit the
UriGroupsection with the cluster name and leave the entry.<UriGroup Name="lqe_node_Cluster_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/lqe/*"/> </UriGroup> - Edit the
Routesection 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.soin 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 Robinis 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-
LoadBalanceWeightis a startingweight. The value is dynamically changed by the plug-in during run time. Theweightof 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.xmlfile and specify some other value forLoadBalanceWeightthat is higher than 20.At run time, theLoadBalanceWeightof 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 ofLoadBalanceWeightsto 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 Requestsare requests that contain a session cookie (JSESSIONID). Session affinity means that all requests of the sameJSESSIONIDis 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 RobinforLoadBalanceoption, then by default, theAffinity Requestsdo 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 Requestis still handled correctly and sent to samecloneid, as before. But new requests are routed randomly, and theLoadBalanceWeightis not used.Note: TheIgnoreAffinityRequestsoption is only available in the web server plug-in version 6.1 or higher. ConnectTimeout-
ConnectTimeoutindicates 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 forConnectTimeoutmust be small, so that the plug-in opens a new stream to the application server quickly.A
ConnectTimeoutvalue 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-
MaxConnectionsspecifies 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,MaxConnectionsis not needed and the default value ofMaxConnectionsis -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.
MaxConnectionscan be used to put a limit on the number of pending requests per server.When theMaxConnectionslimit is reached, the plug-in stops sending requests to that application server, but it is not marked down. The optimal value forMaxConnectionsdepends 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 theMaxConnectionslimit 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 thependingRequestsdrops back down below theMaxConnectionslimit.Tip:With
MaxConnections="-1", useLogLevel="Stats"to monitor thependingRequestsnumbers in the plug-in log, under normal conditions. Then, choose a value forMaxConnectionsthat is significantly higher than the highest number that is displayed in the log. This method enables you to determine aMaxConnectionsvalue that is right for your specific environment.
ServerIOTimeout-
ServerIOTimeoutmeans 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
ServerIOTimeoutoccurs. 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 aServerIOTimeoutoccurs. 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:ServerIOTimeoutuse 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 forServerIOTimeoutthat is much larger (2X or 3X or more) than the longest response time. This method ensures that yourServerIOTimeoutis high enough to allow adequate time for the application to respond normally. Make it a negative value so that if theServerIOTimeoutpops, 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 Liberty profiles
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: