Apache HTTP Server 版本 2.4
描述 | 针对 mod_proxy 的负载均衡器成员(工作者)动态健康检查 |
---|---|
状态 | 扩展 |
模块标识符 | proxy_hcheck_module |
源文件 | mod_proxy_hcheck.c |
兼容性 | 在 Apache 2.4.21 及更高版本中可用 |
此模块提供对负载均衡器成员(工作者)的动态健康检查。这可以在每个工作者基础上启用。健康检查独立于实际的反向代理请求进行。
此模块需要 mod_watchdog
的服务。
健康检查机制通过使用额外的 BalancerMember
参数启用,这些参数通过 ProxyPass
以标准方式配置。
此模块定义了一个新的 BalancerMember 状态 状态(标志):"C
"。当工作者因健康检查模块确定的故障而下线时,将设置此标志,并且可以通过 balancer-manager
查看(和修改)。
参数 | 默认值 | 描述 | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
hcmethod | 无 | 不执行动态健康检查。选项包括
| |||||||||||||||||||||||||||||||||
hcpasses | 1 | 工作者重新启用之前成功的健康检查测试次数 | |||||||||||||||||||||||||||||||||
hcfails | 1 | 工作者禁用之前失败的健康检查测试次数 | |||||||||||||||||||||||||||||||||
hcinterval | 30 | 健康检查的周期(以秒为单位)(例如,每 30 秒执行一次) | |||||||||||||||||||||||||||||||||
hcuri | 要附加到工作者 URL 以进行健康检查的额外 URI。 | ||||||||||||||||||||||||||||||||||
hctemplate | 通过 ProxyHCTemplate 创建的模板名称,用于为该工作者设置健康检查参数 | ||||||||||||||||||||||||||||||||||
hcexpr | 通过 ProxyHCExpr 创建的表达式名称,用于检查响应标头以确定健康状况。如果未使用,则 2xx 到 3xx 状态代码表示成功 |
OPTIONS11
、HEAD11
和 GET11
在 2.4.55 及更高版本中可用。
以下示例展示了如何为各种后端服务器配置健康检查
ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/} ProxyHCExpr gdown {%{REQUEST_STATUS} =~ /^[5]/} ProxyHCExpr in_maint {hc('body') !~ /Under maintenance/} <Proxy balancer://foo> BalancerMember http://www.example.com/ hcmethod=GET hcexpr=in_maint hcuri=/status.php BalancerMember http://www2.example.com/ hcmethod=HEAD hcexpr=ok234 hcinterval=10 BalancerMember http://www3.example.com/ hcmethod=TCP hcinterval=5 hcpasses=2 hcfails=3 BalancerMember http://www4.example.com/ </Proxy> ProxyPass "/" "balancer://foo" ProxyPassReverse "/" "balancer://foo"
在此场景中,通过向该服务器发送 GET /status.php
请求并查看返回的页面是否包含字符串正在维护中来对 http://www.example.com/
进行健康检查。如果包含,则该服务器将进入健康检查失败模式并被禁用。此动态检查每 30 秒执行一次,这是默认值。
通过每 10 秒发送一个简单的 HEAD
请求并确保响应状态为 2xx、3xx 或 4xx 来检查 http://www2.example.com/
。每 5 秒检查一次 http://www3.example.com/
,只需确保该服务器的套接字处于活动状态即可。如果后端被标记为“关闭”并且通过了 2 次健康检查,它将被重新启用并重新添加到负载均衡器中。需要 3 次连续的健康检查失败才能禁用服务器并将其移出轮换。最后,http://www4.example.com/
根本没有动态检查。
描述 | 创建一个命名条件表达式,用于根据后端的响应来确定其健康状况 |
---|---|
语法 | ProxyHCExpr name {ap_expr expression} |
上下文 | 服务器配置,虚拟主机 |
状态 | 扩展 |
模块 | mod_proxy_hcheck |
ProxyHCExpr
指令允许创建命名条件表达式,该表达式检查后端服务器的响应标头以确定其健康状况。然后,可以通过 hcexpr
参数将此命名条件分配给负载均衡器成员。
ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/} ProxyPass "/apps" "balancer://foo" <Proxy balancer://foo> BalancerMember http://www2.example.com/ hcmethod=HEAD hcexpr=ok234 hcinterval=10 </Proxy>
如果使用导致响应主体(例如:GET
)的健康检查方法,则可以通过 ap_expr
使用 hc()
表达式函数检查主体本身,该函数是此模块独有的。
在以下示例中,我们向后端发送 GET
请求,如果响应主体包含短语正在维护中,我们希望禁用后端。
ProxyHCExpr in_maint {hc('body') !~ /Under maintenance/} ProxyPass "/apps" "balancer://foo" <Proxy balancer://foo> BalancerMember http://www.example.com/ hcexpr=in_maint hcmethod=get hcuri=/status.php </Proxy>
注意:由于响应主体可能非常大,因此最好针对特定状态页面使用它。
描述 | 创建一个命名模板,用于设置各种健康检查参数 |
---|---|
语法 | ProxyHCTemplate name parameter=setting [...] |
上下文 | 服务器配置,虚拟主机 |
状态 | 扩展 |
模块 | mod_proxy_hcheck |
ProxyHCTemplate
指令允许创建一个命名健康检查参数集(模板),然后可以通过 hctemplate
参数将其分配给负载均衡器成员。
ProxyHCTemplate tcp5 hcmethod=tcp hcinterval=5 ProxyPass "/apps" "balancer://foo" <Proxy balancer://foo> BalancerMember http://www2.example.com/ hctemplate=tcp5 </Proxy>