2 <html lang="en-us" itemscope itemtype="http://schema.org/Article">
5 <meta name="description" content=" Implemented a load balancing redirection scheme for cqweb...">
6 <meta name="generator" content="Movable Type 5.2.3">
7 <title>Load Balancing Redirection - Status</title>
8 <link rel="alternate" type="application/atom+xml" title="Recent Entries" href="http://defaria.com/blogs/Status/atom.xml">
9 <link rel="canonical" href="http://defaria.com/blogs/Status/2006/09/load-balancing.html">
10 <meta name="viewport" content="width=device-width,initial-scale=1">
11 <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles.css">
13 <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles_ie.css">
14 <script src="/mt/mt-static/support/theme_static/rainier/js/html5shiv.js"></script>
17 <link rel="start" href="http://defaria.com/blogs/Status/">
19 <link rel="prev" href="http://defaria.com/blogs/Status/2006/09/jvm-stackheap-s.html" title="JVM Stack/Heap Sizes">
20 <link rel="next" href="http://defaria.com/blogs/Status/2006/10/redirecting-on.html" title="Redirecting on ErrorDocument">
21 <!-- Open Graph Protocol -->
22 <meta property="og:type" content="article">
23 <meta property="og:locale" content="en-us">
24 <meta property="og:title" content="Load Balancing Redirection">
25 <meta property="og:url" content="http://defaria.com/blogs/Status/2006/09/load-balancing.html">
26 <meta property="og:description" content=" Implemented a load balancing redirection scheme for cqweb...">
27 <meta property="og:site_name" content="Status">
28 <meta property="og:image" content="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
30 <meta itemprop="description" content=" Implemented a load balancing redirection scheme for cqweb...">
31 <link itemprop="url" href="http://defaria.com/blogs/Status/2006/09/load-balancing.html">
32 <link itemprop="image" href="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
37 <div id="container-inner">
38 <header id="header" role="banner">
39 <div id="header-inner">
40 <div id="header-content">
42 <a href="http://defaria.com/blogs/Status/">
51 <nav role="navigation">
53 <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
62 <div id="content-inner">
63 <ul class="breadcrumb breadcrumb-list">
64 <li class="breadcrumb-list-item"><a href="http://defaria.com/blogs/Status/">Home</a></li>
65 <li class="breadcrumb-list-item">Load Balancing Redirection</li>
67 <div id="individual-main" class="main" role="main">
68 <article id="entry-1833" class="entry entry-asset asset hentry">
69 <div class="asset-header">
70 <h2 itemprop="name" class="asset-name entry-title">Load Balancing Redirection</h2>
71 <footer class="asset-meta">
72 <ul class="asset-meta-list">
73 <li class="asset-meta-list-item">Posted on <time datetime="2006-09-29T14:35:09-08:00" itemprop="datePublished">September 29, 2006</time></li>
74 <li class="asset-meta-list-item">by <span class="author entry-author vcard"></span></li>
77 <li class="asset-meta-list-item">in <a itemprop="articleSection" rel="tag" href="http://defaria.com/blogs/Status/texas-instruments/">Texas Instruments</a></li>
83 <div class="entry-content asset-content" itemprop="articleBody">
85 <li>Implemented a load balancing redirection scheme for cqweb</li>
87 <h2>Load Balancing CQ Web Servers based on Number of CQ Web Users</h2>
89 <p>The task at hand was to write a redirector that load balances amongst a number of CQ Web servers based on the number of CQ Web Users currently on each server. Additionally, based on how the user came into the CQ Web server farm, redirect them to the proper schema.</p>
91 <h3>Determining Load</h3>
93 <p>The old IIS CQ Web Server used to allow you to query the number of active CQ Web Users. The new Apache/Tomcat server only allows admins to do this. Additionally the admin need to be logged in, thus have a valid token. IBM/Rational suggests using Apache's server-status URL to determine load. However that only displays number of Apache requests in progress not number of CQ Web Users.</p>
95 <p>If ExtendedStatus is turned on then Apache lists each connection and the URL they are working on. By filtering "GET /cqweb" we can get a rough estimate of the number of CQ Web Users. There is a problem in that the redirector script cannot query the same web server that it's running on. Additionally this information can only be obtained if ExtendedStatus is turned on.</p>
97 <h2>Algorithm for selecting a server</h2>
99 <p>The algorithm for selecting a non busy server is described as:</p>
101 <p>Pick a lightly loaded server out of the pool. Note that if a server is not running with ExtendedStatus on then $cq_users will be undef. This is different than the case where the server has ExtendedStatus on but there just aren't any CQ Web users (which would be denoted by $cq_users = 0). Thus we may have the condition where:
103 <table cellspacing=0 cellpadding=2 border=1>
108 <th>ExtendedStatus</th>
133 <p>In such a case we wish to pick server3 since it has no current CQ web users.
135 <p>The algorithm used here will be to remove all servers from the pool who are not running with ExtendedStatus on since we cannot reliably tell how loaded the server is from the standpoint of CQ Web users. If, however, no servers have ExtendedStatus on (thus all $cq_users return as undef) then we will consider the $nbr_apache_requests. IOW $nbr_apache_requests is not equivalent with $cq_users and thus they cannot be compared together. But if no server is running with ExtendedStatus on we need to pick something!</p>
137 <p><b>Note:</b> If $random then a server is simply randomly chosen.</p>
139 <p>Unfortunately, given this algorithm, if we had the following situation:</p>
141 <table cellspacing=0 cellpadding=2 border=1>
146 <th>ExtendedStatus</th>
171 <p>Then this algorithm will always return server4.</p>
173 <p><b><font color=red>Important Note:</font></b> The web server doing the redirection cannot be queried. Attempting to do so hangs! Therefore it cannot participate in the server pool. It is recommended that another web server be set up as the redirector and the DNS name cqweb assigned to it. This web server can, however, participate by being a Clearquest Request Manager.</p>
175 <h3>Random Redirection</h3>
177 <p>The script can also redirect randomly instead of relying on load of CQ Web Users. Currently there are 3 servers in the pool. Only one of them has ExtendedStatus turned on. As such redirecting by load will always resolve to the one server using, the one running with ExtendedStatus on. This is not good. So currently it just picks a server randomly from the pool. This behavior is controlled by the <tt>lb</tt> parameter (currently defaulted to off meaning pick server randomly).
179 <h3>Defining the Server Pool</h3>
181 <p>The server pool is defined by a small file, servers.cfg, which simply list the servers participating in the pool. Servers can be added or removed dynamically.</p>
183 <h3>Mapping Redirection</h3>
185 <p>In the past users went to http://cqweb/<area>. These <areas> were HTML files in the DocumentRoot which redirected to a series of redirection scripts. It was hoped that HTTP_REFERER could be used to determine where to redirect the visitor. Unfortunately HTTP_REFERER is not guaranteed and indeed it's undefined on the web servers!</p>
187 <p>Instead one must specify the <tt>group</tt> parameter to the redirector script. The script then maintains a map between <areas> -> Schema/ContextIDs. If the group is not specified or not in the map then the user is redirected to the main login page. This is not viewed as a hardship because we need redirecting <area> files anyway. The new form of redirecting <area> file is:
189 <div class=code><pre>
192 <mdeta http-equiv="refresh" content="0; url=http://cqweb.itg.ti.com/cgi-bin/redirect.pl?group=<<i>area</i>>>
196 <h3>Redirect Map</h3>
198 <p>The redirect map, stored in redirect.map, is a file of key/value pairs. For example:</p>
200 <div class=code><pre>
201 CMDT: &schema=CMDT.2003.06.00&contextid=CMDT
202 CSSD: &schema=omap.2002.05.00&contextid=OMAPS
203 DLP-Play: &schema=DLP.2003.06.00&contextid=Play
204 DLP: &schema=DLP.2003.06.00&contextid=DLP
205 DMD-p: &schema=DLP.2003.06.00&contextid=DMD-p
206 DMD: &schema=DLP.2003.06.00&contextid=DMD
207 GCM: &schema=CMDT.2003.06.00&contextid=GCM
208 HPALP: &schema=HPA_MKT_LP&contextid=HPALP
209 LDM: &schema=CMDT.2003.06.00&contextid=LDM
210 NV: &schema=CMDT.2003.06.00&contextid=NV
211 SDO: &schema=SDS.2003.06.00&contextid=SDSCM
212 SDO_TEST: &schema=SDS_TST_DEV&contextid=SDSCM
213 WiMax: &schema=WiMax.SR5&contextid=WiMax
214 mDTV: &schema=mDTV.2003.06.00&contextid=MDTV
215 mDTV_play: &schema=mDTV.2003.06.00&contextid=PLAY
218 <h3>Parameters for redirect.pl</h3>
220 <p>The following parameters, specified in the URL, are supported by redirect.pl:</p>
224 <dd>Specifies the key into the redirect.map for the schema/contextid. If not specified then defaults to main login page of the selected server</dd>
227 <dd>If set then load balancing is attempted based on ExtendedStatus and CQ Web Users as described above. Default: undefined (off)</dd>
230 <dd>If specified the user is not redirected rather debugging information is output.</dd>
233 <nav class="page-navigation entry-navigation pagination content-nav">
234 <ul class="page-navigation-list">
236 <li class="page-navigation-list-item page-navigation-prev"><a rel="prev" href="http://defaria.com/blogs/Status/2006/09/jvm-stackheap-s.html" title="JVM Stack/Heap Sizes">Previous entry</a></li>
239 <li class="page-navigation-list-item page-navigation-next"><a rel="next" href="http://defaria.com/blogs/Status/2006/10/redirecting-on.html" title="Redirecting on ErrorDocument">Next entry</a></li>
244 <aside id="zenback" class="zenback feedback">
245 Please paste Zenback script code here.
252 <aside class="widgets related" role="complementary">
253 <nav class="widget-search widget">
254 <div class="widget-content">
255 <form method="get" id="search" action="http://defaria.com/mt/mt-search.cgi">
257 <input type="text" name="search" value="" placeholder="Search...">
259 <input type="hidden" name="IncludeBlogs" value="8">
261 <input type="hidden" name="limit" value="20">
262 <button type="submit" name="button">
263 <img alt="Search" src="/mt/mt-static/support/theme_static/rainier/img/search-icon.png">
269 <nav class="widget-archive-category widget">
270 <h3 class="widget-header">Categories</h3>
271 <div class="widget-content">
274 <ul class="widget-list">
277 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/ameriquest/">Ameriquest (99)</a>
285 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/audience/">Audience (3)</a>
293 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/broadcom/">Broadcom (76)</a>
301 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/gpdb/">GPDB (35)</a>
309 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-dynamics/">General Dynamics (61)</a>
317 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-electric/">General Electric (13)</a>
325 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/hewlett-packard/">Hewlett Packard (13)</a>
333 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/lynuxworks/">LynuxWorks (162)</a>
341 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/pqa/">PQA (35)</a>
349 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/salira/">Salira (79)</a>
357 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/tellabs/">Tellabs (2)</a>
365 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/texas-instruments/">Texas Instruments (31)</a>
377 <nav class="widget-archive-dropdown widget">
378 <h3 class="widget-header">Archives</h3>
379 <div class="widget-content">
381 <option>Select a Month...</option>
383 <option value="http://defaria.com/blogs/Status/2016/02/">February 2016</option>
387 <option value="http://defaria.com/blogs/Status/2014/09/">September 2014</option>
391 <option value="http://defaria.com/blogs/Status/2014/04/">April 2014</option>
395 <option value="http://defaria.com/blogs/Status/2014/03/">March 2014</option>
399 <option value="http://defaria.com/blogs/Status/2013/02/">February 2013</option>
403 <option value="http://defaria.com/blogs/Status/2012/09/">September 2012</option>
407 <option value="http://defaria.com/blogs/Status/2012/08/">August 2012</option>
411 <option value="http://defaria.com/blogs/Status/2012/05/">May 2012</option>
415 <option value="http://defaria.com/blogs/Status/2012/04/">April 2012</option>
419 <option value="http://defaria.com/blogs/Status/2012/02/">February 2012</option>
423 <option value="http://defaria.com/blogs/Status/2012/01/">January 2012</option>
427 <option value="http://defaria.com/blogs/Status/2011/10/">October 2011</option>
431 <option value="http://defaria.com/blogs/Status/2011/07/">July 2011</option>
435 <option value="http://defaria.com/blogs/Status/2010/09/">September 2010</option>
439 <option value="http://defaria.com/blogs/Status/2010/08/">August 2010</option>
443 <option value="http://defaria.com/blogs/Status/2010/04/">April 2010</option>
447 <option value="http://defaria.com/blogs/Status/2010/03/">March 2010</option>
451 <option value="http://defaria.com/blogs/Status/2010/02/">February 2010</option>
455 <option value="http://defaria.com/blogs/Status/2009/05/">May 2009</option>
459 <option value="http://defaria.com/blogs/Status/2009/04/">April 2009</option>
463 <option value="http://defaria.com/blogs/Status/2008/07/">July 2008</option>
467 <option value="http://defaria.com/blogs/Status/2008/05/">May 2008</option>
471 <option value="http://defaria.com/blogs/Status/2008/04/">April 2008</option>
475 <option value="http://defaria.com/blogs/Status/2008/03/">March 2008</option>
479 <option value="http://defaria.com/blogs/Status/2008/02/">February 2008</option>
483 <option value="http://defaria.com/blogs/Status/2008/01/">January 2008</option>
487 <option value="http://defaria.com/blogs/Status/2007/12/">December 2007</option>
491 <option value="http://defaria.com/blogs/Status/2007/11/">November 2007</option>
495 <option value="http://defaria.com/blogs/Status/2007/10/">October 2007</option>
499 <option value="http://defaria.com/blogs/Status/2007/09/">September 2007</option>
503 <option value="http://defaria.com/blogs/Status/2007/08/">August 2007</option>
507 <option value="http://defaria.com/blogs/Status/2007/07/">July 2007</option>
511 <option value="http://defaria.com/blogs/Status/2007/06/">June 2007</option>
515 <option value="http://defaria.com/blogs/Status/2007/05/">May 2007</option>
519 <option value="http://defaria.com/blogs/Status/2007/04/">April 2007</option>
523 <option value="http://defaria.com/blogs/Status/2007/03/">March 2007</option>
527 <option value="http://defaria.com/blogs/Status/2007/01/">January 2007</option>
531 <option value="http://defaria.com/blogs/Status/2006/12/">December 2006</option>
535 <option value="http://defaria.com/blogs/Status/2006/11/">November 2006</option>
539 <option value="http://defaria.com/blogs/Status/2006/10/">October 2006</option>
543 <option value="http://defaria.com/blogs/Status/2006/09/">September 2006</option>
547 <option value="http://defaria.com/blogs/Status/2006/07/">July 2006</option>
551 <option value="http://defaria.com/blogs/Status/2006/06/">June 2006</option>
555 <option value="http://defaria.com/blogs/Status/2006/05/">May 2006</option>
559 <option value="http://defaria.com/blogs/Status/2006/04/">April 2006</option>
563 <option value="http://defaria.com/blogs/Status/2006/03/">March 2006</option>
567 <option value="http://defaria.com/blogs/Status/2006/02/">February 2006</option>
571 <option value="http://defaria.com/blogs/Status/2006/01/">January 2006</option>
575 <option value="http://defaria.com/blogs/Status/2005/12/">December 2005</option>
579 <option value="http://defaria.com/blogs/Status/2005/11/">November 2005</option>
583 <option value="http://defaria.com/blogs/Status/2005/10/">October 2005</option>
587 <option value="http://defaria.com/blogs/Status/2005/09/">September 2005</option>
591 <option value="http://defaria.com/blogs/Status/2005/08/">August 2005</option>
595 <option value="http://defaria.com/blogs/Status/2005/07/">July 2005</option>
599 <option value="http://defaria.com/blogs/Status/2005/06/">June 2005</option>
603 <option value="http://defaria.com/blogs/Status/2005/05/">May 2005</option>
607 <option value="http://defaria.com/blogs/Status/2005/04/">April 2005</option>
611 <option value="http://defaria.com/blogs/Status/2005/03/">March 2005</option>
615 <option value="http://defaria.com/blogs/Status/2005/02/">February 2005</option>
619 <option value="http://defaria.com/blogs/Status/2005/01/">January 2005</option>
623 <option value="http://defaria.com/blogs/Status/2004/12/">December 2004</option>
627 <option value="http://defaria.com/blogs/Status/2004/09/">September 2004</option>
631 <option value="http://defaria.com/blogs/Status/2004/08/">August 2004</option>
635 <option value="http://defaria.com/blogs/Status/2004/07/">July 2004</option>
639 <option value="http://defaria.com/blogs/Status/2004/06/">June 2004</option>
643 <option value="http://defaria.com/blogs/Status/2004/05/">May 2004</option>
647 <option value="http://defaria.com/blogs/Status/2004/04/">April 2004</option>
651 <option value="http://defaria.com/blogs/Status/2004/03/">March 2004</option>
655 <option value="http://defaria.com/blogs/Status/2004/02/">February 2004</option>
659 <option value="http://defaria.com/blogs/Status/2004/01/">January 2004</option>
663 <option value="http://defaria.com/blogs/Status/2003/12/">December 2003</option>
667 <option value="http://defaria.com/blogs/Status/2003/11/">November 2003</option>
675 <div class="widget-syndication widget section">
676 <div class="widget-content">
677 <p><img src="http://defaria.com/mt/mt-static/images/status_icons/feed.gif" alt="Subscribe to feed" width="9" height="9" /> <a href="http://defaria.com/blogs/Status/atom.xml">Subscribe to this blog's feed</a></p>
685 <footer id="footer" role="contentinfo">
686 <div id="footer-inner">
687 <div id="footer-content">
688 <nav role="navigation">
690 <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
696 <p class="license">© Copyright 2016.</p>
697 <p class="poweredby">Powered by <a href="http://www.movabletype.org/">Movable Type</a></p>
703 <script src="http://defaria.com/mt/mt-static/jquery/jquery.min.js"></script>
704 <script src="http://defaria.com/blogs/Status/mt-theme-scale2.js"></script>