mod_proxy_hcheck
描述: | 平衡器成员(工作者)的动态健康检查mod_proxy |
状态: | 延期 |
模块标识符: | proxy_hcheck_module |
源文件: | mod_proxy_hcheck.c |
兼容性: | 可在 Apache 2.4.21 及更高版本中使用 |
摘要
该模块提供平衡器成员(workers)的动态健康检查。这可以在 worker-by-worker 的基础上启用。运行状况检查独立于实际的反向代理请求。
该模块需要mod_watchdog的服务。
参数
通过使用额外的BalancerMember参数启用运行状况检查机制,这些参数通过ProxyPass以标准方式配置:
通过此模块定义了一个新的 BalancerMember 状态 state(flag):“C
”。当 worker 由于运行状况检查模块确定的故障而脱机时,此 flag 已设置,并且可以通过balancer-manager
查看(和修改)。
参数 | 默认 | 描述 | ||||||||
hcmethod | 没有 | 没有进行动态健康检查。选择是: |||| |----|----|----| |方法\ | 描述\ | 注意\ | _ None|没有动态健康检查完成\ | | | TCP|检查是否可以创建后端的 socket:e.g.“你起来了吗?\ | | | OPTIONS|向后端发送 HTTP OPTIONS 请求\ | *| | HEAD|向后端发送 HTTP HEAD 请求\ | *| | GET|向后端发送 HTTP GET 请求\ | *| || |*:除非使用 hcexpr ,否则 2xx 或 3xx HTTP 状态将被解释为通过健康检查。 |
hcpasses | 1 | worker 之前成功的健康检查测试次数为 re-enabled | ||||||||
hcfails | 1 | 禁用 worker 之前失败的运行状况检查测试数 | ||||||||
hcinterval | 30 | 以秒为单位的健康检查周期(e.g.每 30 秒执行一次) | ||||||||
hcuri | 要附加到运行状况检查的 worker URL 的附加 URI。 | |||||||||
hctemplate | 通过ProxyHCTemplate创建的模板名称,用于为此 worker 设置运行状况检查参数 | |||||||||
hcexpr | 通过ProxyHCExpr创建的表达式名称,用于检查响应 headers 是否健康。 如果不使用,2xx 至 3xx 状态代码意味着成功 |
用法示例
以下 example 显示了如何为各种后端服务器配置运行状况检查:
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"
在这种情况下,http://www.example.com/
通过向该服务器发送GET /status.php
请求并查看返回的页面不包含 string 维护来检查运行状况。如果是,则将该服务器置于 health-check 失败模式,并禁用。此动态检查每 30 秒执行一次,这是默认设置。
通过每 10 秒发送一个简单的HEAD
请求并确保响应状态为 2xx,3xx 或 4xx 来检查http://www2.example.com/
。只需确保该服务器的 socket 已启动,每 5 秒检查一次http://www3.example.com/
。如果后端标记为“向下”并且它通过 2 次运行状况检查,则它将 re-enabled 并添加回负载均衡器。需要 3 次 back-to-back 运行状况检查才能禁用服务器并将其移出轮换。最后,http://www4.example.com/
根本没有动态检查。
ProxyHCExpr 指令
描述: | 创建一个命名条件表达式,用于根据响应确定后端的运行状况 |
句法: | ProxyHCExpr name{ap_expr expression} |
Context: | server config,virtual host |
状态: | 延期 |
模块: | mod_proxy_hcheck |
ProxyHCExpr
指令允许 creating 命名条件表达式,该表达式检查后端服务器的响应 headers 以确定其运行状况。然后可以通过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>
除正常引号外,表达还可以使用 curly-parens(“{}”)作为引号转义符。
如果使用生成检查体的健康检查方法(例如:GET
),则可以使用hc()
表达式函数通过ap_expr
检查该体本身,该函数对于此模块是唯一的。
在下面的示例中,我们向后端发送GET
请求,如果响应正文包含短语 Under maintenance,我们要禁用后端。
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>
注意:由于响应主体可能非常大,因此最好用于特定状态页面。
ProxyHCTemplate 指令
描述: | 创建用于设置各种运行状况检查参数的命名模板 |
句法: | ProxyHCTemplate name parameter=setting[...] |
Context: | server config,virtual host |
状态: | 延期 |
模块: | 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>
ProxyHCTPsize 指令
描述: | 设置用于运行状况检查 workers 的线程池的总 server-wide 大小 |
句法: | ProxyHCTPsize size |
默认: | ProxyHCTPsize 16 |
Context: | 服务器配置 |
状态: | 延期 |
模块: | mod_proxy_hcheck |
如果 Apache httpd 和 APR 是使用线程支持构建的,则运行状况检查模块会将实际检查的工作卸载到与 Watchdog process 关联的线程池,从而允许 parallel 检查。ProxyHCTPsize
指令确定此线程池的大小。如果设置为0
,则根本不使用线程池,从而导致序列化运行状况检查。
ProxyHCTPsize
ProxyHCTPsize 32