• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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 状态将被解释为通过健康检查。
    hcpasses1worker 之前成功的健康检查测试次数为 re-enabled
    hcfails1禁用 worker 之前失败的运行状况检查测试数
    hcinterval30以秒为单位的健康检查周期(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
    

    上篇:mod_proxy_ftp

    下篇:mod_proxy_html