]> granicus.if.org Git - apache/commitdiff
Add desription for schedlurer algo and
authorMladen Turk <mturk@apache.org>
Sat, 27 Nov 2004 13:38:47 +0000 (13:38 +0000)
committerMladen Turk <mturk@apache.org>
Sat, 27 Nov 2004 13:38:47 +0000 (13:38 +0000)
balancer manager

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@106707 13f79535-47bb-0310-9956-ffa450edef68

docs/manual/mod/mod_proxy_balancer.html.en
docs/manual/mod/mod_proxy_balancer.xml

index c573cfc757e825e2a04a57cb9359e6652dfa5fb5..9effff24b3227b708057e075945fcaad31042dff 100644 (file)
@@ -49,11 +49,202 @@ load balancing </td></tr>
 <div id="quickview"><h3 class="directives">Directives</h3>
 <p>This module provides no
             directives.</p>
-<h3>See also</h3>
+<h3>Topics</h3>
+<ul id="topics">
+<li><img alt="" src="../images/down.gif" /> <a href="#scheduler">Load balancer scheduler algorithm</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#enable">Enabling Balancer Manager Support</a></li>
+</ul><h3>See also</h3>
 <ul class="seealso">
 <li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
 </ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="scheduler" id="scheduler">Load balancer scheduler algorithm</a></h2>
+    
+    <p>The idea behind this scheduler is the following:</p>
+    <p><strong>lbfactor</strong> is <em>how much we expect this worker
+    to work</em>, or <em>the workers's work quota</em>.</p>
+    <p><strong>lbstatus</strong> is <em>how urgent this worker has to work
+    to fulfill its quota of work</em>.</p>
+    <p>The <strong>worker</strong> is a member of the load balancer,
+    usually a remote host serving one of the supported protocols</p> 
+    <p>We distribute each worker's work quota to the worker, and then look
+    which of them needs to work most urgently (biggest lbstatus).  This
+    worker is then selected for work, and its lbstatus reduced by the
+    total work quota we distributed to all workers.  Thus the sum of all
+    lbstatus does not change.(*)</p>
+    <p>If some workers are disabled, the others will
+    still be scheduled correctly.</p>
+    <p>If a balancer is configured as follows:</p>
+    
+        
+<code>
+  <table>
+    <tr>
+        <td width="80">worker</td>
+        <td width="30" style="text-align: right;">a</td>
+        <td width="30" style="text-align: right;">b</td>
+        <td width="30" style="text-align: right;">c</td>
+        <td width="30" style="text-align: right;">d</td>
+    </tr>
+    <tr>
+        <td>lbfactor</td>
+        <td style="text-align: right;">25</td>
+        <td style="text-align: right;">25</td>
+        <td style="text-align: right;">25</td>
+        <td style="text-align: right;">25</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+    </tr>
 
+  </table>
+</code>    
+    <p>And b gets disabled, the following schedule is produced:</p>
+<code>
+  <table>
+    <tr>
+        <td width="80">lbstatus</td>
+        <td width="30" style="text-align: right;">-50</td>
+        <td width="30" style="text-align: right;">0</td>
+        <td width="30" style="text-align: right;">25</td>
+        <td width="30" style="text-align: right;">25</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-25</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">-25</td>
+        <td style="text-align: right;">50</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+    </tr>
+    <tr>
+        <td colspan="5">(repeat)</td>
+    </tr>
+  </table>
+</code>
+    <p>That is it schedules: a c d a c d a c d ...</p>
+    <p>The following asymmetric configuration works as one would expect:</p>
+<code>
+  <table>
+    <tr>
+        <td width="80">worker</td>
+        <td width="30" style="text-align: right;">a</td>
+        <td width="30" style="text-align: right;">b</td>
+    </tr>
+    <tr>
+        <td>lbfactor</td>
+        <td style="text-align: right;">70</td>
+        <td style="text-align: right;">30</td>
+    </tr>
+    <tr>
+        <td colspan="3">&nbsp;</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-30</td>
+        <td style="text-align: right;">30</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">40</td>
+        <td style="text-align: right;">-40</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">10</td>
+        <td style="text-align: right;">-10</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-20</td>
+        <td style="text-align: right;">20</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-50</td>
+        <td style="text-align: right;">50</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">20</td>
+        <td style="text-align: right;">-20</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-10</td>
+        <td style="text-align: right;">10</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-40</td>
+        <td style="text-align: right;">40</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">30</td>
+        <td style="text-align: right;">-30</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+    </tr>
+    <tr>
+        <td colspan="3">(repeat)</td>
+    </tr>
+  </table>
+</code>
+
+    <p>That is after 10 schedules, the schedule repeats and 7 a are selected
+    with 3 b interspersed.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="enable" id="enable">Enabling Balancer Manager Support</a></h2>
+    
+    <p>Balancer manager enables dynamic update of balancer
+    members. You can use balancer manager to change the balace
+    factor or a particular member, or put it in the off line
+    mode.</p>
+    <p>This module <em>requires</em> the service of 
+    <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.
+    Balancer manager enables dynamic update of balancer
+    members. You can use balancer manager to change the balace
+    factor or a particular member, or put it in the off line
+    mode.
+    </p>
+
+    <p>Thus, in order to get the ability of load balancer management,
+    <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> and <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code>
+    have to be present in the server.</p>
+
+    <p>To enable load balancer management for browsers from the foo.com
+    domain add this code to your <code>httpd.conf</code>
+    configuration file</p>
+<div class="example"><p><code>
+    &lt;Location /balancer-manager&gt;<br />
+    SetHandler balancer-manager<br />
+<br />
+    Order Deny,Allow<br />
+    Deny from all<br />
+    Allow from .foo.com<br />
+    &lt;/Location&gt;
+</code></p></div>
+
+    <p>You can now access load balancer manager by using a Web browser
+    to access the page
+    <code>http://your.server.name/balancer-manager</code></p>
+</div>
 </div>
 <div class="bottomlang">
 <p><span>Available Languages: </span><a href="../en/mod/mod_proxy_balancer.html" title="English">&nbsp;en&nbsp;</a> |
index 20fccc13c3eb33bea201ca4542f15cba786499b4..b57d7e40fbfba7bf20637b230cd302e79229e939 100644 (file)
@@ -48,4 +48,191 @@ load balancing </description>
 </summary>
 <seealso><module>mod_proxy</module></seealso>
 
+<section id="scheduler">
+    <title>Load balancer scheduler algorithm</title>
+    <p>The idea behind this scheduler is the following:</p>
+    <p><strong>lbfactor</strong> is <em>how much we expect this worker
+    to work</em>, or <em>the workers's work quota</em>.</p>
+    <p><strong>lbstatus</strong> is <em>how urgent this worker has to work
+    to fulfill its quota of work</em>.</p>
+    <p>The <strong>worker</strong> is a member of the load balancer,
+    usually a remote host serving one of the supported protocols</p> 
+    <p>We distribute each worker's work quota to the worker, and then look
+    which of them needs to work most urgently (biggest lbstatus).  This
+    worker is then selected for work, and its lbstatus reduced by the
+    total work quota we distributed to all workers.  Thus the sum of all
+    lbstatus does not change.(*)</p>
+    <p>If some workers are disabled, the others will
+    still be scheduled correctly.</p>
+    <p>If a balancer is configured as follows:</p>
+    
+    <!-- Very ugly, but i can not make the table right aligned -->    
+<code>
+  <table>
+    <tr>
+        <td width="80">worker</td>
+        <td width="30" style="text-align: right;">a</td>
+        <td width="30" style="text-align: right;">b</td>
+        <td width="30" style="text-align: right;">c</td>
+        <td width="30" style="text-align: right;">d</td>
+    </tr>
+    <tr>
+        <td>lbfactor</td>
+        <td style="text-align: right;">25</td>
+        <td style="text-align: right;">25</td>
+        <td style="text-align: right;">25</td>
+        <td style="text-align: right;">25</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+    </tr>
+
+  </table>
+</code>    
+    <p>And b gets disabled, the following schedule is produced:</p>
+<code>
+  <table>
+    <tr>
+        <td width="80">lbstatus</td>
+        <td width="30" style="text-align: right;">-50</td>
+        <td width="30" style="text-align: right;">0</td>
+        <td width="30" style="text-align: right;">25</td>
+        <td width="30" style="text-align: right;">25</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-25</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">-25</td>
+        <td style="text-align: right;">50</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+    </tr>
+    <tr>
+        <td colspan="5">(repeat)</td>
+    </tr>
+  </table>
+</code>
+    <p>That is it schedules: a c d a c d a c d ...</p>
+    <p>The following asymmetric configuration works as one would expect:</p>
+<code>
+  <table>
+    <tr>
+        <td width="80">worker</td>
+        <td width="30" style="text-align: right;">a</td>
+        <td width="30" style="text-align: right;">b</td>
+    </tr>
+    <tr>
+        <td>lbfactor</td>
+        <td style="text-align: right;">70</td>
+        <td style="text-align: right;">30</td>
+    </tr>
+    <tr>
+        <td colspan="3">&nbsp;</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-30</td>
+        <td style="text-align: right;">30</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">40</td>
+        <td style="text-align: right;">-40</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">10</td>
+        <td style="text-align: right;">-10</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-20</td>
+        <td style="text-align: right;">20</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-50</td>
+        <td style="text-align: right;">50</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">20</td>
+        <td style="text-align: right;">-20</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-10</td>
+        <td style="text-align: right;">10</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">-40</td>
+        <td style="text-align: right;">40</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">30</td>
+        <td style="text-align: right;">-30</td>
+    </tr>
+    <tr>
+        <td>lbstatus</td>
+        <td style="text-align: right;">0</td>
+        <td style="text-align: right;">0</td>
+    </tr>
+    <tr>
+        <td colspan="3">(repeat)</td>
+    </tr>
+  </table>
+</code>
+
+    <p>That is after 10 schedules, the schedule repeats and 7 a are selected
+    with 3 b interspersed.</p>
+</section>
+
+<section id="enable">
+    <title>Enabling Balancer Manager Support</title>
+    <p>Balancer manager enables dynamic update of balancer
+    members. You can use balancer manager to change the balace
+    factor or a particular member, or put it in the off line
+    mode.</p>
+    <p>This module <em>requires</em> the service of 
+    <module>mod_status</module>.
+    Balancer manager enables dynamic update of balancer
+    members. You can use balancer manager to change the balace
+    factor or a particular member, or put it in the off line
+    mode.
+    </p>
+
+    <p>Thus, in order to get the ability of load balancer management,
+    <module>mod_status</module> and <module>mod_proxy_balancer</module>
+    have to be present in the server.</p>
+
+    <p>To enable load balancer management for browsers from the foo.com
+    domain add this code to your <code>httpd.conf</code>
+    configuration file</p>
+<example>
+    &lt;Location /balancer-manager&gt;<br />
+    SetHandler balancer-manager<br />
+<br />
+    Order Deny,Allow<br />
+    Deny from all<br />
+    Allow from .foo.com<br />
+    &lt;/Location&gt;
+</example>
+
+    <p>You can now access load balancer manager by using a Web browser
+    to access the page
+    <code>http://your.server.name/balancer-manager</code></p>
+</section>
+
 </modulesynopsis>