我在另一台运行 mod_proxy_balancer 的 Apache 服务器后面设置了 3 个 Apache Web 服务器。
今天,其中一台网络服务器重新启动了。重新启动大约需要 16 分钟。
在此期间,我可以看到以下日志行每 30 秒在我的 Apache mod_proxy_balancer 服务器的错误日志中
[Tue Sep 30 07:04:42 2014] [error] ap_proxy_connect_backend disabling worker for (s1-sc1-c-use)
在 16 分钟的停机时间内,该日志被记录了 32 次
我正在尝试弄清楚这里发生了什么。我担心的是,由于我的平衡器配置存在缺陷,平衡器会反复尝试向正在重新启动的服务器发送请求(因此向用户返回错误)。
为什么 Apache 反复告诉我它正在“禁用工作程序”?平衡器模块是否会间歇性地向故障节点发送用户请求,以尝试确定它是否已恢复,或者它是否有自己的内部健康检查机制(对用户不可见)?
答案1
好的。我可以解释一下。
Apache mod_proxy_balancer 没有自己独立的健康检查机制。Balancer 成员(worker)的状态是根据实际转发的用户请求的结果来确定的。
顺序如下:
- Apache httpd 向 worker 发送请求
- 工作进程没有响应,或者响应 HTTP 状态,从而触发故障转移,并使成员进入 ERR 状态
- Apache httpd 启动重试计时器(默认 60 秒),并且在重试计时器到期之前不会再发送任何请求
- 当重试计时器到期时,按顺序返回步骤 1
我的重试值是 60 秒(默认)。
我看到多个日志条目的原因是我的 Apache httpd Balancer 配置了多个平衡器,每个平衡器都有自己独立的重试计时器。
因此,根据应用程序活动,重试计时器会被任意重置,并被任意测试,这解释了日志中工作状态更新的不均匀分布。