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>
- <Proxy balancer://mycluster><br />
- BalancerMember http://192.168.1.50:80<br />
- BalancerMember http://192.168.1.51:80<br />
- </Proxy><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"> </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>
- <Location /balancer-manager><br />
- SetHandler balancer-manager<br />
-<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .example.com<br />
- </Location>
-</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>
- <Proxy balancer://mycluster><br />
- BalancerMember http://192.168.1.50:80<br />
- BalancerMember http://192.168.1.51:80<br />
- </Proxy><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>
- <Location /balancer-manager><br />
- SetHandler balancer-manager<br />
-<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .example.com<br />
- </Location>
-</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>
- <Proxy balancer://mycluster><br />
- BalancerMember http://192.168.1.50:80<br />
- BalancerMember http://192.168.1.51:80<br />
- </Proxy><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"> </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>
- <Location /balancer-manager><br />
- SetHandler balancer-manager<br />
-<br />
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from .example.com<br />
- </Location>
-</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"> </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>