HaProxy - 分组 tcp 和 http 主机相互依赖

HaProxy - group tcp and http hosts dependent of each other

我有以下场景:

Haproxy 运行 在我的两组服务器前:

我现在想在任何活动服务出现故障时从活动端故障转移到备份端(同时故障转移 HTTP 和 TCP)。

在 HAproxy 中有什么方法可以这样做吗?到目前为止,我只能根据协议故障转移到其中一个,但不能同时故障转移到两者。这些可以分组吗?

我想知道是否可以通过 ACL 和 fe_conn 指令

之类的东西来完成

我认为 haproxy 的 nbsrv 在这里工作。如果您的 nbsrv 计数(健康实例数)低于 EITHER 池中的所需数量,则将两个池都切换到备份后端。否则只需使用默认池。这是在 1.5.18 上验证的示例,但在较新版本上应该可以正常工作:

defaults all
  timeout connect 30s
  timeout client 30s
  timeout server 30s
  mode http

# http frontend
frontend http *:80
  # use the backup service if EITHER service is down
  acl use_backup nbsrv(http_service) lt 1
  acl use_backup nbsrv(tcp_service) lt 1
  use_backend http_service_backup if use_backup
  default_backend http_service

# tcp frontend
frontend tcp_10000 *:10000
  mode tcp
  # use the backup service if EITHER service is down
  acl use_backup nbsrv(http_service) lt 1
  acl use_backup nbsrv(tcp_service) lt 1
  use_backend tcp_service_backup if use_backup
  default_backend tcp_service

backend tcp_service
  mode tcp
  # main tcp instance here
  # can also include backup server here with backup directive if desired
  server tcp-service1 tcp-service1.local:10000 check

backend tcp_service_backup
  mode tcp
  # backup tcp instance here
  server tcp-service2 tcp-service2.local:10000 check

backend http_service
  # main http instance here
  # can also include backup server here with backup directive if desired
  server http-service1 http-service1.local:80 check

backend http_service_backup
  # backup http instance here
  server http-service2 http-service2.local:80 check    

有关 nbsrv 的更多详细信息,请参阅 https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#nbsrv