You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ta...@apache.org on 2008/12/06 17:42:42 UTC

svn commit: r724006 - in /httpd/httpd/trunk/docs/manual/mod: mod_lbmethod_bybusyness.xml mod_lbmethod_byrequests.xml mod_lbmethod_bytraffic.xml mod_proxy_balancer.xml

Author: takashi
Date: Sat Dec  6 08:42:42 2008
New Revision: 724006

URL: http://svn.apache.org/viewvc?rev=724006&view=rev
Log:
Sync with the codes about the independence of load balancing scheduler algorithms. (r722948 - r722952)

Added:
    httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bybusyness.xml   (contents, props changed)
      - copied, changed from r723955, httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml
    httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_byrequests.xml   (contents, props changed)
      - copied, changed from r723955, httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml
    httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bytraffic.xml   (contents, props changed)
      - copied, changed from r723955, httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml
Modified:
    httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml

Copied: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bybusyness.xml (from r723955, httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml)
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bybusyness.xml?p2=httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bybusyness.xml&p1=httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml&r1=723955&r2=724006&rev=724006&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bybusyness.xml Sat Dec  6 08:42:42 2008
@@ -20,272 +20,20 @@
  limitations under the License.
 -->
 
-<modulesynopsis metafile="mod_proxy_balancer.xml.meta">
+<modulesynopsis metafile="mod_lbmethod_bybusyness.xml.meta">
 
-<name>mod_proxy_balancer</name>
-<description><module>mod_proxy</module> extension for load balancing </description>
+<name>mod_lbmethod_bybusyness</name>
+<description>Pending Request Counting load balancer scheduler algorithm for <module
+>mod_proxy_balancer</module></description>
 <status>Extension</status>
-<sourcefile>mod_proxy_balancer.c</sourcefile>
-<identifier>proxy_balancer_module</identifier>
-<compatibility>Available in version 2.1 and later</compatibility>
+<sourcefile>mod_lbmethod_bybusyness.c</sourcefile>
+<identifier>lbmethod_bybusyness_module</identifier>
+<compatibility>Split off from <module>mod_proxy_balancer</module> in 2.3</compatibility>
 
 <summary>
-    <p>This module <em>requires</em> the service of <module
-    >mod_proxy</module>. It provides load balancing support for
-    <code>HTTP</code>, <code>FTP</code> and <code>AJP13</code> protocols
-    </p>
-
-    <p>Thus, in order to get the ability of load balancing,
-    <module>mod_proxy</module> and <module>mod_proxy_balancer</module>
-    have to be present in the server.</p>
-
-    <note type="warning"><title>Warning</title>
-      <p>Do not enable proxying until you have <a
-      href="mod_proxy.html#access">secured your server</a>. Open proxy
-      servers are dangerous both to your network and to the Internet at
-      large.</p>
-    </note>
 </summary>
 <seealso><module>mod_proxy</module></seealso>
-
-<section id="scheduler">
-    <title>Load balancer scheduler algorithm</title>
-    <p>At present, there are 3 load balancer scheduler algorithms available
-    for use: Request Counting, Weighted Traffic Counting and Pending Request 
-    Counting. These are controlled via the <code>lbmethod</code> value of
-    the Balancer definition. See the <directive module="mod_proxy">ProxyPass</directive> 
-    directive for more information.</p>
-
-</section>
-
-<section id="example">
-    <title>Example of a balancer configuration</title>
-    <p>Before we dive into the technical details, here's an example of
-    how you might use <module>mod_proxy_balancer</module> to provide
-    load balancing between two back-end servers:
-    </p>
-
-    <example>
-    &lt;Proxy balancer://mycluster&gt;<br />
-        BalancerMember http://192.168.1.50:80<br />
-        BalancerMember http://192.168.1.51:80<br />
-    &lt;/Proxy&gt;<br />
-    ProxyPass /test balancer://mycluster/
-    </example>
-</section>
-
-<section id="requests">
-    <title>Request Counting Algorithm</title>
-    <p>Enabled via <code>lbmethod=byrequests</code>, the idea behind this
-    scheduler is that we distribute the requests among the
-    various workers to ensure that each gets their configured share
-    of the number of requests. It works as follows:</p>
-
-    <p><dfn>lbfactor</dfn> is <em>how much we expect this worker
-    to work</em>, or <em>the workers's work quota</em>. This is
-    a normalized value representing their "share" of the amount of
-    work to be done.</p>
-
-    <p><dfn>lbstatus</dfn> is <em>how urgent this worker has to work
-    to fulfill its quota of work</em>.</p>
-
-    <p>The <dfn>worker</dfn> 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(*) and we distribute the requests
-    as desired.</p>
-
-    <p>If some workers are disabled, the others will
-    still be scheduled correctly.</p>
-
-    <example><pre><code>for each worker in workers
-    worker lbstatus += worker lbfactor
-    total factor    += worker lbfactor
-    if worker lbstatus > candidate lbstatus
-        candidate = worker
-
-candidate lbstatus -= total factor</code></pre>
-    </example>
-
-    <p>If a balancer is configured as follows:</p>
-    
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbfactor</th>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td></tr>
-    <tr><th>lbstatus</th>
-        <td>0</td>
-        <td>0</td>
-        <td>0</td>
-        <td>0</td></tr>
-    </table>
-
-    <p>And <var>b</var> gets disabled, the following schedule is produced:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-50</em></td>
-        <td>0</td>
-        <td>25</td>
-        <td>25</td></tr>
-    <tr><th>lbstatus</th>
-        <td>-25</td>
-        <td>0</td>
-        <td><em>-25</em></td>
-        <td>50</td></tr>
-    <tr><th>lbstatus</th>
-        <td>0</td>
-        <td>0</td>
-        <td>0</td>
-        <td><em>0</em></td></tr>
-    <tr><td colspan="5">(repeat)</td></tr>
-    </table>
-
-    <p>That is it schedules: <var>a</var> <var>c</var> <var>d</var>
-    <var>a</var> <var>c</var> <var>d</var> <var>a</var> <var>c</var>
-    <var>d</var> ... Please note that:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbfactor</th>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td></tr>
-    </table>
-
-    <p>Has the exact same behavior as:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbfactor</th>
-        <td>1</td>
-        <td>1</td>
-        <td>1</td>
-        <td>1</td></tr>
-    </table>
-
-    <p>This is because all values of <dfn>lbfactor</dfn> are normalized
-    with respect to the others. For:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th></tr>
-    <tr><th>lbfactor</th>
-        <td>1</td>
-        <td>4</td>
-        <td>1</td></tr>
-    </table>
-
-    <p>worker <var>b</var> will, on average, get 4 times the requests
-    that <var>a</var> and <var>c</var> will.</p>
-
-    <p>The following asymmetric configuration works as one would expect:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th></tr>
-    <tr><th>lbfactor</th>
-        <td>70</td>
-        <td>30</td></tr>
-    <tr><td colspan="2">&nbsp;</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-30</em></td>
-        <td>30</td></tr>
-    <tr><th>lbstatus</th>
-        <td>40</td>
-        <td><em>-40</em></td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>10</em></td>
-        <td>-10</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-20</em></td>
-        <td>20</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-50</em></td>
-        <td>50</td></tr>
-    <tr><th>lbstatus</th>
-        <td>20</td>
-        <td><em>-20</em></td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-10</em></td>
-        <td>10</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-40</em></td>
-        <td>40</td></tr>
-    <tr><th>lbstatus</th>
-        <td>30</td>
-        <td><em>-30</em></td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>0</em></td>
-        <td>0</td></tr>
-    <tr><td colspan="3">(repeat)</td></tr>
-    </table>
-
-    <p>That is after 10 schedules, the schedule repeats and 7 <var>a</var>
-    are selected with 3 <var>b</var> interspersed.</p>
-</section>
-
-<section id="traffic">
-    <title>Weighted Traffic Counting Algorithm</title>
-    <p>Enabled via <code>lbmethod=bytraffic</code>, the idea behind this
-    scheduler is very similar to the Request Counting method, with
-    the following changes:</p>
-
-    <p><dfn>lbfactor</dfn> is <em>how much traffic, in bytes, we want
-    this worker to handle</em>. This is also a normalized value
-    representing their "share" of the amount of work to be done,
-    but instead of simply counting the number of requests, we take
-    into account the amount of traffic this worker has seen.</p>
-
-    <p>If a balancer is configured as follows:</p>
-    
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th></tr>
-    <tr><th>lbfactor</th>
-        <td>1</td>
-        <td>2</td>
-        <td>1</td></tr>
-    </table>
-
-    <p>Then we mean that we want <var>b</var> to process twice the
-    amount of bytes than <var>a</var> or <var>c</var> should. It does
-    not necessarily mean that <var>b</var> would handle twice as
-    many requests, but it would process twice the I/O. Thus, the
-    size of the request and response are applied to the weighting
-    and selection algorithm.</p>
-
-</section>
+<seealso><module>mod_proxy_balancer</module></seealso>
 
 <section id="busyness">
 
@@ -306,89 +54,4 @@
 
 </section>
 
-<section id="environment">
-    <title>Exported Environment Variables</title>
-    <p>At present there are 6 environment variables exported:</p>
-
-    <dl>
-    <!-- ============= BALANCER_SESSION_STICKY =============== -->
-    <dt><var><a name="balancer_session_sticky" id="balancer_session_sticky">BALANCER_SESSION_STICKY</a></var></dt>
-    <dd>
-    <p>This is assigned the <var>stickysession</var> value used in the current
-    request.  It is the cookie or parameter name used for sticky sessions</p>
-    </dd>
-
-    <!-- ============= BALANCER_SESSION_ROUTE ================ -->
-    <dt><var><a name="balancer_session_route" id="balancer_session_route">BALANCER_SESSION_ROUTE</a></var></dt>
-    <dd>
-    <p>This is assigned the <var>route</var> parsed from the current 
-    request.</p>
-    </dd>
-
-    <!-- ============= BALANCER_NAME ========================= -->
-    <dt><var><a name="balancer_name" id="balancer_name">BALANCER_NAME</a></var></dt>
-    <dd>
-    <p>This is assigned the name of the balancer used for the current 
-    request. The value is something like <code>balancer://foo</code>.</p>
-    </dd>
-
-    <!-- ============= BALANCER_WORKER_NAME ================== -->
-    <dt><var><a name="balancer_worker_name" id="balancer_worker_name">BALANCER_WORKER_NAME</a></var></dt>
-    <dd>
-    <p>This is assigned the name of the worker used for the current request.
-    The value is something like <code>http://hostA:1234</code>.</p>
-    </dd>
-
-    <!-- ============= BALANCER_WORKER_ROUTE ================= -->
-    <dt><var><a name="balancer_worker_route" id="balancer_worker_route">BALANCER_WORKER_ROUTE</a></var></dt>
-    <dd>
-    <p>This is assigned the <var>route</var> of the worker that will be 
-    used for the current request.</p>
-    </dd>
-
-    <!-- ============= BALANCER_ROUTE_CHANGED ================= -->
-    <dt><var><a name="balancer_route_changed" id="balancer_route_changed">BALANCER_ROUTE_CHANGED</a></var></dt>
-    <dd>
-    <p>This is set to 1 if the session route does not match the
-    worker route (BALANCER_SESSION_ROUTE != BALANCER_WORKER_ROUTE) or the
-    session does not yet have an established route.  This can be used to
-    determine when/if the client needs to be sent an updated route
-    when sticky sessions are used.</p>
-    </dd>
-    </dl>
-
-</section>
-
-<section id="enable">
-    <title>Enabling Balancer Manager Support</title>
-    <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 balance
-    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 example.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 .example.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>

Propchange: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bybusyness.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bybusyness.xml
------------------------------------------------------------------------------
    svn:keywords = LastChangedRevision

Propchange: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bybusyness.xml
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_byrequests.xml (from r723955, httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml)
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_byrequests.xml?p2=httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_byrequests.xml&p1=httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml&r1=723955&r2=724006&rev=724006&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_byrequests.xml Sat Dec  6 08:42:42 2008
@@ -20,59 +20,20 @@
  limitations under the License.
 -->
 
-<modulesynopsis metafile="mod_proxy_balancer.xml.meta">
+<modulesynopsis metafile="mod_lbmethod_byrequests.xml.meta">
 
-<name>mod_proxy_balancer</name>
-<description><module>mod_proxy</module> extension for load balancing </description>
+<name>mod_lbmethod_byrequests</name>
+<description>Request Counting load balancer scheduler algorithm for <module
+>mod_proxy_balancer</module></description>
 <status>Extension</status>
-<sourcefile>mod_proxy_balancer.c</sourcefile>
-<identifier>proxy_balancer_module</identifier>
-<compatibility>Available in version 2.1 and later</compatibility>
+<sourcefile>mod_lbmethod_byrequests.c</sourcefile>
+<identifier>lbmethod_byrequests_module</identifier>
+<compatibility>Split off from <module>mod_proxy_balancer</module> in 2.3</compatibility>
 
 <summary>
-    <p>This module <em>requires</em> the service of <module
-    >mod_proxy</module>. It provides load balancing support for
-    <code>HTTP</code>, <code>FTP</code> and <code>AJP13</code> protocols
-    </p>
-
-    <p>Thus, in order to get the ability of load balancing,
-    <module>mod_proxy</module> and <module>mod_proxy_balancer</module>
-    have to be present in the server.</p>
-
-    <note type="warning"><title>Warning</title>
-      <p>Do not enable proxying until you have <a
-      href="mod_proxy.html#access">secured your server</a>. Open proxy
-      servers are dangerous both to your network and to the Internet at
-      large.</p>
-    </note>
 </summary>
 <seealso><module>mod_proxy</module></seealso>
-
-<section id="scheduler">
-    <title>Load balancer scheduler algorithm</title>
-    <p>At present, there are 3 load balancer scheduler algorithms available
-    for use: Request Counting, Weighted Traffic Counting and Pending Request 
-    Counting. These are controlled via the <code>lbmethod</code> value of
-    the Balancer definition. See the <directive module="mod_proxy">ProxyPass</directive> 
-    directive for more information.</p>
-
-</section>
-
-<section id="example">
-    <title>Example of a balancer configuration</title>
-    <p>Before we dive into the technical details, here's an example of
-    how you might use <module>mod_proxy_balancer</module> to provide
-    load balancing between two back-end servers:
-    </p>
-
-    <example>
-    &lt;Proxy balancer://mycluster&gt;<br />
-        BalancerMember http://192.168.1.50:80<br />
-        BalancerMember http://192.168.1.51:80<br />
-    &lt;/Proxy&gt;<br />
-    ProxyPass /test balancer://mycluster/
-    </example>
-</section>
+<seealso><module>mod_proxy_balancer</module></seealso>
 
 <section id="requests">
     <title>Request Counting Algorithm</title>
@@ -253,142 +214,4 @@
     are selected with 3 <var>b</var> interspersed.</p>
 </section>
 
-<section id="traffic">
-    <title>Weighted Traffic Counting Algorithm</title>
-    <p>Enabled via <code>lbmethod=bytraffic</code>, the idea behind this
-    scheduler is very similar to the Request Counting method, with
-    the following changes:</p>
-
-    <p><dfn>lbfactor</dfn> is <em>how much traffic, in bytes, we want
-    this worker to handle</em>. This is also a normalized value
-    representing their "share" of the amount of work to be done,
-    but instead of simply counting the number of requests, we take
-    into account the amount of traffic this worker has seen.</p>
-
-    <p>If a balancer is configured as follows:</p>
-    
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th></tr>
-    <tr><th>lbfactor</th>
-        <td>1</td>
-        <td>2</td>
-        <td>1</td></tr>
-    </table>
-
-    <p>Then we mean that we want <var>b</var> to process twice the
-    amount of bytes than <var>a</var> or <var>c</var> should. It does
-    not necessarily mean that <var>b</var> would handle twice as
-    many requests, but it would process twice the I/O. Thus, the
-    size of the request and response are applied to the weighting
-    and selection algorithm.</p>
-
-</section>
-
-<section id="busyness">
-
-    <title>Pending Request Counting Algorithm</title>
-
-    <p>Enabled via <code>lbmethod=bybusyness</code>, this scheduler keeps
-    track of how many requests each worker is assigned at present. A new
-    request is automatically assigned to the worker with the lowest
-    number of active requests. This is useful in the case of workers
-    that queue incoming requests independently of Apache, to ensure that
-    queue length stays even and a request is always given to the worker
-    most likely to service it fastest.</p>
-
-    <p>In the case of multiple least-busy workers, the statistics (and
-    weightings) used by the Request Counting method are used to break the
-    tie. Over time, the distribution of work will come to resemble that
-    characteristic of <code>byrequests</code>.</p>
-
-</section>
-
-<section id="environment">
-    <title>Exported Environment Variables</title>
-    <p>At present there are 6 environment variables exported:</p>
-
-    <dl>
-    <!-- ============= BALANCER_SESSION_STICKY =============== -->
-    <dt><var><a name="balancer_session_sticky" id="balancer_session_sticky">BALANCER_SESSION_STICKY</a></var></dt>
-    <dd>
-    <p>This is assigned the <var>stickysession</var> value used in the current
-    request.  It is the cookie or parameter name used for sticky sessions</p>
-    </dd>
-
-    <!-- ============= BALANCER_SESSION_ROUTE ================ -->
-    <dt><var><a name="balancer_session_route" id="balancer_session_route">BALANCER_SESSION_ROUTE</a></var></dt>
-    <dd>
-    <p>This is assigned the <var>route</var> parsed from the current 
-    request.</p>
-    </dd>
-
-    <!-- ============= BALANCER_NAME ========================= -->
-    <dt><var><a name="balancer_name" id="balancer_name">BALANCER_NAME</a></var></dt>
-    <dd>
-    <p>This is assigned the name of the balancer used for the current 
-    request. The value is something like <code>balancer://foo</code>.</p>
-    </dd>
-
-    <!-- ============= BALANCER_WORKER_NAME ================== -->
-    <dt><var><a name="balancer_worker_name" id="balancer_worker_name">BALANCER_WORKER_NAME</a></var></dt>
-    <dd>
-    <p>This is assigned the name of the worker used for the current request.
-    The value is something like <code>http://hostA:1234</code>.</p>
-    </dd>
-
-    <!-- ============= BALANCER_WORKER_ROUTE ================= -->
-    <dt><var><a name="balancer_worker_route" id="balancer_worker_route">BALANCER_WORKER_ROUTE</a></var></dt>
-    <dd>
-    <p>This is assigned the <var>route</var> of the worker that will be 
-    used for the current request.</p>
-    </dd>
-
-    <!-- ============= BALANCER_ROUTE_CHANGED ================= -->
-    <dt><var><a name="balancer_route_changed" id="balancer_route_changed">BALANCER_ROUTE_CHANGED</a></var></dt>
-    <dd>
-    <p>This is set to 1 if the session route does not match the
-    worker route (BALANCER_SESSION_ROUTE != BALANCER_WORKER_ROUTE) or the
-    session does not yet have an established route.  This can be used to
-    determine when/if the client needs to be sent an updated route
-    when sticky sessions are used.</p>
-    </dd>
-    </dl>
-
-</section>
-
-<section id="enable">
-    <title>Enabling Balancer Manager Support</title>
-    <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 balance
-    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 example.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 .example.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>

Propchange: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_byrequests.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_byrequests.xml
------------------------------------------------------------------------------
    svn:keywords = LastChangedRevision

Propchange: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_byrequests.xml
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bytraffic.xml (from r723955, httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml)
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bytraffic.xml?p2=httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bytraffic.xml&p1=httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml&r1=723955&r2=724006&rev=724006&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bytraffic.xml Sat Dec  6 08:42:42 2008
@@ -20,238 +20,20 @@
  limitations under the License.
 -->
 
-<modulesynopsis metafile="mod_proxy_balancer.xml.meta">
+<modulesynopsis metafile="mod_lbmethod_bytraffic.xml.meta">
 
-<name>mod_proxy_balancer</name>
-<description><module>mod_proxy</module> extension for load balancing </description>
+<name>mod_lbmethod_bytraffic</name>
+<description>Weighted Traffic Counting load balancer scheduler algorithm for <module
+>mod_proxy_balancer</module></description>
 <status>Extension</status>
-<sourcefile>mod_proxy_balancer.c</sourcefile>
-<identifier>proxy_balancer_module</identifier>
-<compatibility>Available in version 2.1 and later</compatibility>
+<sourcefile>mod_lbmethod_bytraffic.c</sourcefile>
+<identifier>lbmethod_bytraffic_module</identifier>
+<compatibility>Split off from <module>mod_proxy_balancer</module> in 2.3</compatibility>
 
 <summary>
-    <p>This module <em>requires</em> the service of <module
-    >mod_proxy</module>. It provides load balancing support for
-    <code>HTTP</code>, <code>FTP</code> and <code>AJP13</code> protocols
-    </p>
-
-    <p>Thus, in order to get the ability of load balancing,
-    <module>mod_proxy</module> and <module>mod_proxy_balancer</module>
-    have to be present in the server.</p>
-
-    <note type="warning"><title>Warning</title>
-      <p>Do not enable proxying until you have <a
-      href="mod_proxy.html#access">secured your server</a>. Open proxy
-      servers are dangerous both to your network and to the Internet at
-      large.</p>
-    </note>
 </summary>
 <seealso><module>mod_proxy</module></seealso>
-
-<section id="scheduler">
-    <title>Load balancer scheduler algorithm</title>
-    <p>At present, there are 3 load balancer scheduler algorithms available
-    for use: Request Counting, Weighted Traffic Counting and Pending Request 
-    Counting. These are controlled via the <code>lbmethod</code> value of
-    the Balancer definition. See the <directive module="mod_proxy">ProxyPass</directive> 
-    directive for more information.</p>
-
-</section>
-
-<section id="example">
-    <title>Example of a balancer configuration</title>
-    <p>Before we dive into the technical details, here's an example of
-    how you might use <module>mod_proxy_balancer</module> to provide
-    load balancing between two back-end servers:
-    </p>
-
-    <example>
-    &lt;Proxy balancer://mycluster&gt;<br />
-        BalancerMember http://192.168.1.50:80<br />
-        BalancerMember http://192.168.1.51:80<br />
-    &lt;/Proxy&gt;<br />
-    ProxyPass /test balancer://mycluster/
-    </example>
-</section>
-
-<section id="requests">
-    <title>Request Counting Algorithm</title>
-    <p>Enabled via <code>lbmethod=byrequests</code>, the idea behind this
-    scheduler is that we distribute the requests among the
-    various workers to ensure that each gets their configured share
-    of the number of requests. It works as follows:</p>
-
-    <p><dfn>lbfactor</dfn> is <em>how much we expect this worker
-    to work</em>, or <em>the workers's work quota</em>. This is
-    a normalized value representing their "share" of the amount of
-    work to be done.</p>
-
-    <p><dfn>lbstatus</dfn> is <em>how urgent this worker has to work
-    to fulfill its quota of work</em>.</p>
-
-    <p>The <dfn>worker</dfn> 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(*) and we distribute the requests
-    as desired.</p>
-
-    <p>If some workers are disabled, the others will
-    still be scheduled correctly.</p>
-
-    <example><pre><code>for each worker in workers
-    worker lbstatus += worker lbfactor
-    total factor    += worker lbfactor
-    if worker lbstatus > candidate lbstatus
-        candidate = worker
-
-candidate lbstatus -= total factor</code></pre>
-    </example>
-
-    <p>If a balancer is configured as follows:</p>
-    
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbfactor</th>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td></tr>
-    <tr><th>lbstatus</th>
-        <td>0</td>
-        <td>0</td>
-        <td>0</td>
-        <td>0</td></tr>
-    </table>
-
-    <p>And <var>b</var> gets disabled, the following schedule is produced:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-50</em></td>
-        <td>0</td>
-        <td>25</td>
-        <td>25</td></tr>
-    <tr><th>lbstatus</th>
-        <td>-25</td>
-        <td>0</td>
-        <td><em>-25</em></td>
-        <td>50</td></tr>
-    <tr><th>lbstatus</th>
-        <td>0</td>
-        <td>0</td>
-        <td>0</td>
-        <td><em>0</em></td></tr>
-    <tr><td colspan="5">(repeat)</td></tr>
-    </table>
-
-    <p>That is it schedules: <var>a</var> <var>c</var> <var>d</var>
-    <var>a</var> <var>c</var> <var>d</var> <var>a</var> <var>c</var>
-    <var>d</var> ... Please note that:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbfactor</th>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td></tr>
-    </table>
-
-    <p>Has the exact same behavior as:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbfactor</th>
-        <td>1</td>
-        <td>1</td>
-        <td>1</td>
-        <td>1</td></tr>
-    </table>
-
-    <p>This is because all values of <dfn>lbfactor</dfn> are normalized
-    with respect to the others. For:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th></tr>
-    <tr><th>lbfactor</th>
-        <td>1</td>
-        <td>4</td>
-        <td>1</td></tr>
-    </table>
-
-    <p>worker <var>b</var> will, on average, get 4 times the requests
-    that <var>a</var> and <var>c</var> will.</p>
-
-    <p>The following asymmetric configuration works as one would expect:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th></tr>
-    <tr><th>lbfactor</th>
-        <td>70</td>
-        <td>30</td></tr>
-    <tr><td colspan="2">&nbsp;</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-30</em></td>
-        <td>30</td></tr>
-    <tr><th>lbstatus</th>
-        <td>40</td>
-        <td><em>-40</em></td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>10</em></td>
-        <td>-10</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-20</em></td>
-        <td>20</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-50</em></td>
-        <td>50</td></tr>
-    <tr><th>lbstatus</th>
-        <td>20</td>
-        <td><em>-20</em></td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-10</em></td>
-        <td>10</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-40</em></td>
-        <td>40</td></tr>
-    <tr><th>lbstatus</th>
-        <td>30</td>
-        <td><em>-30</em></td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>0</em></td>
-        <td>0</td></tr>
-    <tr><td colspan="3">(repeat)</td></tr>
-    </table>
-
-    <p>That is after 10 schedules, the schedule repeats and 7 <var>a</var>
-    are selected with 3 <var>b</var> interspersed.</p>
-</section>
+<seealso><module>mod_proxy_balancer</module></seealso>
 
 <section id="traffic">
     <title>Weighted Traffic Counting Algorithm</title>
@@ -287,108 +69,4 @@
 
 </section>
 
-<section id="busyness">
-
-    <title>Pending Request Counting Algorithm</title>
-
-    <p>Enabled via <code>lbmethod=bybusyness</code>, this scheduler keeps
-    track of how many requests each worker is assigned at present. A new
-    request is automatically assigned to the worker with the lowest
-    number of active requests. This is useful in the case of workers
-    that queue incoming requests independently of Apache, to ensure that
-    queue length stays even and a request is always given to the worker
-    most likely to service it fastest.</p>
-
-    <p>In the case of multiple least-busy workers, the statistics (and
-    weightings) used by the Request Counting method are used to break the
-    tie. Over time, the distribution of work will come to resemble that
-    characteristic of <code>byrequests</code>.</p>
-
-</section>
-
-<section id="environment">
-    <title>Exported Environment Variables</title>
-    <p>At present there are 6 environment variables exported:</p>
-
-    <dl>
-    <!-- ============= BALANCER_SESSION_STICKY =============== -->
-    <dt><var><a name="balancer_session_sticky" id="balancer_session_sticky">BALANCER_SESSION_STICKY</a></var></dt>
-    <dd>
-    <p>This is assigned the <var>stickysession</var> value used in the current
-    request.  It is the cookie or parameter name used for sticky sessions</p>
-    </dd>
-
-    <!-- ============= BALANCER_SESSION_ROUTE ================ -->
-    <dt><var><a name="balancer_session_route" id="balancer_session_route">BALANCER_SESSION_ROUTE</a></var></dt>
-    <dd>
-    <p>This is assigned the <var>route</var> parsed from the current 
-    request.</p>
-    </dd>
-
-    <!-- ============= BALANCER_NAME ========================= -->
-    <dt><var><a name="balancer_name" id="balancer_name">BALANCER_NAME</a></var></dt>
-    <dd>
-    <p>This is assigned the name of the balancer used for the current 
-    request. The value is something like <code>balancer://foo</code>.</p>
-    </dd>
-
-    <!-- ============= BALANCER_WORKER_NAME ================== -->
-    <dt><var><a name="balancer_worker_name" id="balancer_worker_name">BALANCER_WORKER_NAME</a></var></dt>
-    <dd>
-    <p>This is assigned the name of the worker used for the current request.
-    The value is something like <code>http://hostA:1234</code>.</p>
-    </dd>
-
-    <!-- ============= BALANCER_WORKER_ROUTE ================= -->
-    <dt><var><a name="balancer_worker_route" id="balancer_worker_route">BALANCER_WORKER_ROUTE</a></var></dt>
-    <dd>
-    <p>This is assigned the <var>route</var> of the worker that will be 
-    used for the current request.</p>
-    </dd>
-
-    <!-- ============= BALANCER_ROUTE_CHANGED ================= -->
-    <dt><var><a name="balancer_route_changed" id="balancer_route_changed">BALANCER_ROUTE_CHANGED</a></var></dt>
-    <dd>
-    <p>This is set to 1 if the session route does not match the
-    worker route (BALANCER_SESSION_ROUTE != BALANCER_WORKER_ROUTE) or the
-    session does not yet have an established route.  This can be used to
-    determine when/if the client needs to be sent an updated route
-    when sticky sessions are used.</p>
-    </dd>
-    </dl>
-
-</section>
-
-<section id="enable">
-    <title>Enabling Balancer Manager Support</title>
-    <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 balance
-    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 example.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 .example.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>

Propchange: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bytraffic.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bytraffic.xml
------------------------------------------------------------------------------
    svn:keywords = LastChangedRevision

Propchange: httpd/httpd/trunk/docs/manual/mod/mod_lbmethod_bytraffic.xml
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml?rev=724006&r1=724005&r2=724006&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_proxy_balancer.xml Sat Dec  6 08:42:42 2008
@@ -35,9 +35,17 @@
     <code>HTTP</code>, <code>FTP</code> and <code>AJP13</code> protocols
     </p>
 
+    <p>Load balancing scheduler algorithm is provided by not this
+    module but other modules such as:
+    <module>mod_lbmethod_byrequests</module>,
+    <module>mod_lbmethod_bytraffic</module> and
+    <module>mod_lbmethod_bybusyness</module>.
+    </p>
+
     <p>Thus, in order to get the ability of load balancing,
-    <module>mod_proxy</module> and <module>mod_proxy_balancer</module>
-    have to be present in the server.</p>
+    <module>mod_proxy</module>, <module>mod_proxy_balancer</module>
+    and at least one of load balancing scheduler algorithm modules have
+    to be present in the server.</p>
 
     <note type="warning"><title>Warning</title>
       <p>Do not enable proxying until you have <a
@@ -74,238 +82,6 @@
     </example>
 </section>
 
-<section id="requests">
-    <title>Request Counting Algorithm</title>
-    <p>Enabled via <code>lbmethod=byrequests</code>, the idea behind this
-    scheduler is that we distribute the requests among the
-    various workers to ensure that each gets their configured share
-    of the number of requests. It works as follows:</p>
-
-    <p><dfn>lbfactor</dfn> is <em>how much we expect this worker
-    to work</em>, or <em>the workers's work quota</em>. This is
-    a normalized value representing their "share" of the amount of
-    work to be done.</p>
-
-    <p><dfn>lbstatus</dfn> is <em>how urgent this worker has to work
-    to fulfill its quota of work</em>.</p>
-
-    <p>The <dfn>worker</dfn> 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(*) and we distribute the requests
-    as desired.</p>
-
-    <p>If some workers are disabled, the others will
-    still be scheduled correctly.</p>
-
-    <example><pre><code>for each worker in workers
-    worker lbstatus += worker lbfactor
-    total factor    += worker lbfactor
-    if worker lbstatus > candidate lbstatus
-        candidate = worker
-
-candidate lbstatus -= total factor</code></pre>
-    </example>
-
-    <p>If a balancer is configured as follows:</p>
-    
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbfactor</th>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td></tr>
-    <tr><th>lbstatus</th>
-        <td>0</td>
-        <td>0</td>
-        <td>0</td>
-        <td>0</td></tr>
-    </table>
-
-    <p>And <var>b</var> gets disabled, the following schedule is produced:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-50</em></td>
-        <td>0</td>
-        <td>25</td>
-        <td>25</td></tr>
-    <tr><th>lbstatus</th>
-        <td>-25</td>
-        <td>0</td>
-        <td><em>-25</em></td>
-        <td>50</td></tr>
-    <tr><th>lbstatus</th>
-        <td>0</td>
-        <td>0</td>
-        <td>0</td>
-        <td><em>0</em></td></tr>
-    <tr><td colspan="5">(repeat)</td></tr>
-    </table>
-
-    <p>That is it schedules: <var>a</var> <var>c</var> <var>d</var>
-    <var>a</var> <var>c</var> <var>d</var> <var>a</var> <var>c</var>
-    <var>d</var> ... Please note that:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbfactor</th>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td>
-        <td>25</td></tr>
-    </table>
-
-    <p>Has the exact same behavior as:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th>
-        <th>d</th></tr>
-    <tr><th>lbfactor</th>
-        <td>1</td>
-        <td>1</td>
-        <td>1</td>
-        <td>1</td></tr>
-    </table>
-
-    <p>This is because all values of <dfn>lbfactor</dfn> are normalized
-    with respect to the others. For:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th></tr>
-    <tr><th>lbfactor</th>
-        <td>1</td>
-        <td>4</td>
-        <td>1</td></tr>
-    </table>
-
-    <p>worker <var>b</var> will, on average, get 4 times the requests
-    that <var>a</var> and <var>c</var> will.</p>
-
-    <p>The following asymmetric configuration works as one would expect:</p>
-
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th></tr>
-    <tr><th>lbfactor</th>
-        <td>70</td>
-        <td>30</td></tr>
-    <tr><td colspan="2">&nbsp;</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-30</em></td>
-        <td>30</td></tr>
-    <tr><th>lbstatus</th>
-        <td>40</td>
-        <td><em>-40</em></td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>10</em></td>
-        <td>-10</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-20</em></td>
-        <td>20</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-50</em></td>
-        <td>50</td></tr>
-    <tr><th>lbstatus</th>
-        <td>20</td>
-        <td><em>-20</em></td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-10</em></td>
-        <td>10</td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>-40</em></td>
-        <td>40</td></tr>
-    <tr><th>lbstatus</th>
-        <td>30</td>
-        <td><em>-30</em></td></tr>
-    <tr><th>lbstatus</th>
-        <td><em>0</em></td>
-        <td>0</td></tr>
-    <tr><td colspan="3">(repeat)</td></tr>
-    </table>
-
-    <p>That is after 10 schedules, the schedule repeats and 7 <var>a</var>
-    are selected with 3 <var>b</var> interspersed.</p>
-</section>
-
-<section id="traffic">
-    <title>Weighted Traffic Counting Algorithm</title>
-    <p>Enabled via <code>lbmethod=bytraffic</code>, the idea behind this
-    scheduler is very similar to the Request Counting method, with
-    the following changes:</p>
-
-    <p><dfn>lbfactor</dfn> is <em>how much traffic, in bytes, we want
-    this worker to handle</em>. This is also a normalized value
-    representing their "share" of the amount of work to be done,
-    but instead of simply counting the number of requests, we take
-    into account the amount of traffic this worker has seen.</p>
-
-    <p>If a balancer is configured as follows:</p>
-    
-    <table style="data">
-    <tr><th>worker</th>
-        <th>a</th>
-        <th>b</th>
-        <th>c</th></tr>
-    <tr><th>lbfactor</th>
-        <td>1</td>
-        <td>2</td>
-        <td>1</td></tr>
-    </table>
-
-    <p>Then we mean that we want <var>b</var> to process twice the
-    amount of bytes than <var>a</var> or <var>c</var> should. It does
-    not necessarily mean that <var>b</var> would handle twice as
-    many requests, but it would process twice the I/O. Thus, the
-    size of the request and response are applied to the weighting
-    and selection algorithm.</p>
-
-</section>
-
-<section id="busyness">
-
-    <title>Pending Request Counting Algorithm</title>
-
-    <p>Enabled via <code>lbmethod=bybusyness</code>, this scheduler keeps
-    track of how many requests each worker is assigned at present. A new
-    request is automatically assigned to the worker with the lowest
-    number of active requests. This is useful in the case of workers
-    that queue incoming requests independently of Apache, to ensure that
-    queue length stays even and a request is always given to the worker
-    most likely to service it fastest.</p>
-
-    <p>In the case of multiple least-busy workers, the statistics (and
-    weightings) used by the Request Counting method are used to break the
-    tie. Over time, the distribution of work will come to resemble that
-    characteristic of <code>byrequests</code>.</p>
-
-</section>
-
 <section id="environment">
     <title>Exported Environment Variables</title>
     <p>At present there are 6 environment variables exported:</p>