HAProxy动态服务器地址

Tom*_*mas 5 networking load-balancing nginx haproxy

我们对此图有类似的设置

在此输入图像描述

当请求到达HAProxy时,它会将roundrobin平衡到任何服务器,后端服务器检查其缓存,如果资源不在该服务器上,则会发出重定向,并将标头设置为正确的服务器IP.

第二次请求到达HAProxy时,它会检测到后端服务器的头是否存在,但是如何直接获取该IP并将请求直接发送给它?

例如,第二次请求到达haproxy它有头 X-BACKEND-IP=10.0.0.5

因此,haproxy尝试对该请求进行负载均衡,我希望它读取标头,获取该IP并直接转到该后端.

那可能吗?如果没有,是否可以使用nginx?

rob*_*at2 3

假设您对信任第二个请求标头中的 IP 感到满意,那么是的,您可以这样做use-server

backend bk_foo
  [...]
  server srv_0a_00_01_05 10.0.1.5:80 weight 100
  server srv_0a_00_02_05 10.0.2.5:80 weight 100
  use-server %[req.hdr(x-backend-ip),lower,map_str(/etc/haproxy/hdr2srv.map,srv_any)] if { req.hdr(x-backend-ip),lower,map_str(/etc/haproxy/hdr2srv.map) -m found }
Run Code Online (Sandbox Code Playgroud)

内容/etc/haproxy/hdr2srv.map

#ip srv_name
# hex of IP used for names in this example
10.0.1.5  srv_0a_00_01_05
10.0.2.5  srv_0a_00_02_05
Run Code Online (Sandbox Code Playgroud)

如果您需要关闭其中一台服务器,您应该动态更新映射以将其删除,以便带有标头集的请求再次重定向。

如果您有多个后端,您可以使用 进行类似的操作use_backend