在 HAProxy 中,我可以根据健康检查切换后端吗?
In HAProxy, Can I switch backends on the basis of health checks?
假设我们有两个后端 backend_1 和 backend_2。
我需要始终将流量转移到 backend_1 并仅在 backend_1 服务器健康检查失败时才使用 backend_2。
在 HAProxy 中可以吗?
在haproxy关键字中backend
是一组服务器。所以解决方案取决于你的需要。
如果您指的是一般意义上的 backend
,作为服务器,那么 backup
关键字就是答案:
frontend foo
bind *:80
default_backend bar
backend bar
option allbackups
server bar1 10.0.0.1:80 check
server bar2 10.0.0.2:80 check
server bar3 10.0.1.1:80 check backup
server bar4 10.0.1.2:80 check backup
我向后端添加了 4 个服务器和选项 allbackups
以使其行为类似于下一个示例。
如果您将 haproxy 意义上的 backend
表示为服务器组,那么 nbsrv
将很有用:
frontend front
bind *:80
acl is_foo_alive nbsrv(foo) -m int gt 0
use_backend foo if is_foo_alive
use_backend bar
backend foo
server foo1 10.0.0.1:80 check
server foo2 10.0.0.2:80 check
backend bar
server bar1 10.0.1.1:80 check
server bar2 10.0.1.2:80 check
nbsrc(foo)
告诉我们后端 foo
中有多少台服务器在运行,所以如果我们得到的多于 0,那么我们使用后端 foo
。如果不是,我们使用下一个规则,即 use_backend bar
.
这些解决方案相似,但可能会有所不同,具体取决于后端的不同(例如 HTTP headers 的操作、HTTP 身份验证等)以及您是否使用 session 粘性。
假设我们有两个后端 backend_1 和 backend_2。
我需要始终将流量转移到 backend_1 并仅在 backend_1 服务器健康检查失败时才使用 backend_2。
在 HAProxy 中可以吗?
在haproxy关键字中backend
是一组服务器。所以解决方案取决于你的需要。
如果您指的是一般意义上的 backend
,作为服务器,那么 backup
关键字就是答案:
frontend foo
bind *:80
default_backend bar
backend bar
option allbackups
server bar1 10.0.0.1:80 check
server bar2 10.0.0.2:80 check
server bar3 10.0.1.1:80 check backup
server bar4 10.0.1.2:80 check backup
我向后端添加了 4 个服务器和选项 allbackups
以使其行为类似于下一个示例。
如果您将 haproxy 意义上的 backend
表示为服务器组,那么 nbsrv
将很有用:
frontend front
bind *:80
acl is_foo_alive nbsrv(foo) -m int gt 0
use_backend foo if is_foo_alive
use_backend bar
backend foo
server foo1 10.0.0.1:80 check
server foo2 10.0.0.2:80 check
backend bar
server bar1 10.0.1.1:80 check
server bar2 10.0.1.2:80 check
nbsrc(foo)
告诉我们后端 foo
中有多少台服务器在运行,所以如果我们得到的多于 0,那么我们使用后端 foo
。如果不是,我们使用下一个规则,即 use_backend bar
.
这些解决方案相似,但可能会有所不同,具体取决于后端的不同(例如 HTTP headers 的操作、HTTP 身份验证等)以及您是否使用 session 粘性。