📄 mod_proxy_balancer.html
字号:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="keywords" content="Apache, 中文, 手册, 中文版, 中文手册, 中文版手册, 参考手册, 中文参考手册, 金步国" />
<meta name="description" content="Apache 2.2 中文版参考手册" />
<meta name="author" content="金步国" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>mod_proxy_balancer - Apache 2.2 中文版参考手册</title>
</head>
<body><div id="page-header">
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./index.html"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
<div id="path"><a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">文档</a> > <a href="../index.html">版本2.2</a> > <a href="./index.html">模块</a></div>
<div id="translation-info"> <a href="../translator_announcement.html#thanks">致谢</a> | <a href="../translator_announcement.html#announcement">译者声明</a> | 本篇译者:<<a href="../translator_announcement.html#join">虚位以待</a>> | 本篇译稿完成时间:?年?月?日 | <a href="../translator_announcement.html#last_new">获取最新版本</a></div>
<div id="page-content"><div id="preamble"><h1>Apache模块 mod_proxy_balancer</h1>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="module">
<tr><th><a href="module-dict.html#Description">说明</a></th><td><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>的扩展,提供负载平衡支持</td></tr>
<tr><th><a href="module-dict.html#Status">状态</a></th><td>扩展(E)</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">模块名</a></th><td>proxy_balancer_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">源文件</a></th><td>proxy_balancer.c</td></tr>
<tr><th><a href="module-dict.html#Compatibility">兼容性</a></th><td>仅在 Apache 2.1 及以后的版本中可用</td></tr>
</table>
<h3>概述</h3>
<p>This module <em>requires</em> the service of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. It provides load balancing support for
<code>HTTP</code>, <code>FTP</code>和<code>AJP13</code> protocols
</p>
<p>Thus, in order to get the ability of load balancing,
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>和<code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code>
have to be present in the server.</p>
<div class="warning"><h3>警告</h3>
<p>在您没有<a href="mod_proxy.html#access">对您的服务器采取安全措施</a>之前,不要启用代理。开放的代理服务器对你自己的内部网络和大规模的Internet网都是有安全隐患的。</p>
</div>
</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>At present, there are 2 load balancer scheduler algorithms available
for use: Request Counting and Weighted Traffic Counting. These are controlled
via the <code>lbmethod</code> value of the Balancer definition. See
the <code class="directive"><a href="../mod/mod_proxy.html#proxy">Proxy</a></code> directive for
more information.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="requests" id="requests">Request Counting Algorithm</a></h2>
<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><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>
<div class="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></div>
<p>If a balancer is configured as follows:</p>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th><th class="data">d</th></tr>
<tr><th>lbfactor</th><td class="data">25</td><td class="data">25</td><td class="data">25</td><td class="data">25</td></tr>
<tr><th>lbstatus</th><td class="data">0</td><td class="data">0</td><td class="data">0</td><td class="data">0</td></tr>
</table>
<p>And <var>b</var> gets disabled, the following schedule is produced:</p>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th><th class="data">d</th></tr>
<tr><th>lbstatus</th><td class="data"><em>-50</em></td><td class="data">0</td><td class="data">25</td><td class="data">25</td></tr>
<tr><th>lbstatus</th><td class="data">-25</td><td class="data">0</td><td class="data"><em>-25</em></td><td class="data">50</td></tr>
<tr><th>lbstatus</th><td class="data">0</td><td class="data">0</td><td class="data">0</td><td class="data"><em>0</em></td></tr>
<tr><td class="data" 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 border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th><th class="data">d</th></tr>
<tr><th>lbfactor</th><td class="data">25</td><td class="data">25</td><td class="data">25</td><td class="data">25</td></tr>
</table>
<p>Has the exact same behavior as:</p>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th><th class="data">d</th></tr>
<tr><th>lbfactor</th><td class="data">1</td><td class="data">1</td><td class="data">1</td><td class="data">1</td></tr>
</table>
<p>This is because all values of <dfn>lbfactor</dfn> are normalized
with respect to the others. For:</p>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th></tr>
<tr><th>lbfactor</th><td class="data">1</td><td class="data">4</td><td class="data">1</td></tr>
</table>
<p>worker <var>b</var> will, on average, get 4 times the requests
that <var>a</var>和<var>c</var> will.</p>
<p>The following asymmetric configuration works as one would expect:</p>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th></tr>
<tr><th>lbfactor</th><td class="data">70</td><td class="data">30</td></tr>
<tr><td class="data" colspan="2"> </td></tr>
<tr><th>lbstatus</th><td class="data"><em>-30</em></td><td class="data">30</td></tr>
<tr><th>lbstatus</th><td class="data">40</td><td class="data"><em>-40</em></td></tr>
<tr><th>lbstatus</th><td class="data"><em>10</em></td><td class="data">-10</td></tr>
<tr><th>lbstatus</th><td class="data"><em>-20</em></td><td class="data">20</td></tr>
<tr><th>lbstatus</th><td class="data"><em>-50</em></td><td class="data">50</td></tr>
<tr><th>lbstatus</th><td class="data">20</td><td class="data"><em>-20</em></td></tr>
<tr><th>lbstatus</th><td class="data"><em>-10</em></td><td class="data">10</td></tr>
<tr><th>lbstatus</th><td class="data"><em>-40</em></td><td class="data">40</td></tr>
<tr><th>lbstatus</th><td class="data">30</td><td class="data"><em>-30</em></td></tr>
<tr><th>lbstatus</th><td class="data"><em>0</em></td><td class="data">0</td></tr>
<tr><td class="data" 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>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="traffic" id="traffic">Weighted Traffic Counting Algorithm</a></h2>
<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 border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><th>worker</th><th class="data">a</th><th class="data">b</th><th class="data">c</th></tr>
<tr><th>lbfactor</th><td class="data">1</td><td class="data">2</td><td class="data">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>或<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>
</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>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 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,
<code class="module"><a href="../mod/mod_status.html">mod_status</a></code>和<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>
<Location /balancer-manager><br />
SetHandler balancer-manager<br />
<br />
Order Deny,Allow<br />
Deny from all<br />
Allow from .foo.com<br />
</Location>
</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 id="footer">
<p class="apache">本文允许自由使用、分发、转载,但必须保留译者署名;详见:<a href="../translator_announcement.html#announcement">译者声明</a>。</p>
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -