【发布时间】:2017-08-03 09:53:59
【问题描述】:
我已经设置了运行正常的 Apache (2.4) 负载平衡器。为了监控它的性能,我启用了 balancer-manager 处理程序,它显示了平衡器的状态。
我注意到一个“加载”列,它在 2.2 版中不存在,其值可能为负数,但我不明白它的含义,也找不到与此相关的文档。
谁能解释该值的含义或指出正确的文档?
【问题讨论】:
标签: apache load-balancing mod-proxy-balancer
我已经设置了运行正常的 Apache (2.4) 负载平衡器。为了监控它的性能,我启用了 balancer-manager 处理程序,它显示了平衡器的状态。
我注意到一个“加载”列,它在 2.2 版中不存在,其值可能为负数,但我不明白它的含义,也找不到与此相关的文档。
谁能解释该值的含义或指出正确的文档?
【问题讨论】:
标签: apache load-balancing mod-proxy-balancer
我现在明白了,“负载”的计算是如何工作的。这是一个我认为比 apache 文档页面更简单的示例。
假设我们有 3 个工作人员,配置的负载因子为 1。
1) 开始
a | b | c
--+---+---
0 | 0 | 0
将负载因子 1 添加到所有工作人员
a | b | c
--+---+---
1 | 1 | 1
现在选择具有最高值的那个 --> a 并减少所有因子的总和 (=3) - 这是选定的工人
a | b | c
---+---+---
-2 | 1 | 1
2) 下一轮,再加1
a | b | c
---+---+---
-1 | 2 | 2
现在选择具有最高值的那个 --> b 并减少所有因子的总和 (=3) - 这是选定的工人
a | b | c
---+----+----
-1 | -1 | 2
3) 下一轮,再加1
a | b | c
---+----+----
0 | 0 | 3
现在选择具有最高值的那个 --> c 并减少所有因子的总和 (=3) - 这是选定的工人
a | b | c
---+----+----
0 | 0 | 0
重新开始:)
我希望这对其他人有所帮助。
【讨论】:
Load 值由lbstatus 根据这行代码填充:
ap_rprintf(r, "<td>%d</td><td>", worker->s->lbstatus);
in https://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_balancer.c?view=markup#l1767(代码修改时行可能会改变)
由于您的方法是按请求的,因此 lbstatus 由 mod_lbmethod_byrequests 指定,它定义:
lbstatus 是该工作人员为完成其配额而必须工作的紧迫程度 工作。
算法的详细信息可以在这里找到:https://httpd.apache.org/docs/2.4/mod/mod_lbmethod_byrequests.html
【讨论】:
我也想知道其他列的描述,如 BUSY、ELECTED 等。我的 LB 已经 BUSY 超过 100 了。我虽然 BUSY 不应该超过 100(如 100% 服务器繁忙或其他情况)
【讨论】: