<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_proxy_hcheck

可用语言:  en  |  fr 

描述针对 mod_proxy 的负载均衡器成员(工作者)动态健康检查
状态扩展
模块标识符proxy_hcheck_module
源文件mod_proxy_hcheck.c
兼容性在 Apache 2.4.21 及更高版本中可用

摘要

此模块提供对负载均衡器成员(工作者)的动态健康检查。这可以在每个工作者基础上启用。健康检查独立于实际的反向代理请求进行。

此模块需要 mod_watchdog 的服务。

参数

健康检查机制通过使用额外的 BalancerMember 参数启用,这些参数通过 ProxyPass 以标准方式配置。

此模块定义了一个新的 BalancerMember 状态 状态(标志):"C"。当工作者因健康检查模块确定的故障而下线时,将设置此标志,并且可以通过 balancer-manager 查看(和修改)。

参数 默认值 描述
hcmethod 不执行动态健康检查。选项包括
方法描述注意
不执行动态健康检查
TCP检查是否可以创建到后端的套接字:例如“你在线吗”
OPTIONS通过 HTTP/1.0 向后端发送 HTTP OPTIONS 请求*
HEAD通过 HTTP/1.0 向后端发送 HTTP HEAD 请求*
GET通过 HTTP/1.0 向后端发送 HTTP GET 请求*
OPTIONS11通过 HTTP/1.1 向后端发送 HTTP OPTIONS 请求*
HEAD11通过 HTTP/1.1 向后端发送 HTTP HEAD 请求*
GET11通过 HTTP/1.1 向后端发送 HTTP GET 请求*
*: 除非使用 hcexpr,否则 2xx 或 3xx HTTP 状态将被解释为通过健康检查
hcpasses 1 工作者重新启用之前成功的健康检查测试次数
hcfails 1 工作者禁用之前失败的健康检查测试次数
hcinterval 30 健康检查的周期(以秒为单位)(例如,每 30 秒执行一次)
hcuri   要附加到工作者 URL 以进行健康检查的额外 URI。
hctemplate   通过 ProxyHCTemplate 创建的模板名称,用于为该工作者设置健康检查参数
hcexpr   通过 ProxyHCExpr 创建的表达式名称,用于检查响应标头以确定健康状况。
如果未使用,则 2xx 到 3xx 状态代码表示成功

兼容性

OPTIONS11HEAD11GET11 在 2.4.55 及更高版本中可用。

Support Apache!

主题

指令

错误修复清单

另请参阅

top

使用示例

以下示例展示了如何为各种后端服务器配置健康检查

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/ 根本没有动态检查。

top

ProxyHCExpr 指令

描述创建一个命名条件表达式,用于根据后端的响应来确定其健康状况
语法ProxyHCExpr name {ap_expr expression}
上下文服务器配置,虚拟主机
状态扩展
模块mod_proxy_hcheck

ProxyHCExpr 指令允许创建命名条件表达式,该表达式检查后端服务器的响应标头以确定其健康状况。然后,可以通过 hcexpr 参数将此命名条件分配给负载均衡器成员。

ProxyHCExpr:允许 2xx/3xx/4xx 作为通过

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:检查响应主体

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>

注意:由于响应主体可能非常大,因此最好针对特定状态页面使用它。

top

ProxyHCTemplate 指令

描述创建一个命名模板,用于设置各种健康检查参数
语法ProxyHCTemplate name parameter=setting [...]
上下文服务器配置,虚拟主机
状态扩展
模块mod_proxy_hcheck

ProxyHCTemplate 指令允许创建一个命名健康检查参数集(模板),然后可以通过 hctemplate 参数将其分配给负载均衡器成员。

ProxyHCTemplate

ProxyHCTemplate tcp5 hcmethod=tcp hcinterval=5
ProxyPass "/apps"     "balancer://foo"

<Proxy balancer://foo>
  BalancerMember http://www2.example.com/ hctemplate=tcp5
</Proxy>
top

ProxyHCTPsize 指令

描述设置用于健康检查工作者的线程池的服务器范围总大小
语法ProxyHCTPsize size
默认值ProxyHCTPsize 16
上下文服务器配置
状态扩展
模块mod_proxy_hcheck

如果 Apache httpd 和 APR 使用线程支持构建,则健康检查模块将实际检查的工作卸载到与 Watchdog 进程关联的线程池,从而允许并行检查。 ProxyHCTPsize 指令确定此线程池的大小。如果设置为 0,则根本不使用线程池,导致健康检查序列化。

ProxyHCTPsize

ProxyHCTPsize 32

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果这些建议已实施或被认为无效/不相关,则可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应直接发送到我们的 IRC 频道 #httpd(在 Libera.chat 上),或发送到我们的 邮件列表