Tom*_*mas 5 networking load-balancing nginx haproxy
我们对此图有类似的设置
当请求到达HAProxy时,它会将roundrobin平衡到任何服务器,后端服务器检查其缓存,如果资源不在该服务器上,则会发出重定向,并将标头设置为正确的服务器IP.
第二次请求到达HAProxy时,它会检测到后端服务器的头是否存在,但是如何直接获取该IP并将请求直接发送给它?
例如,第二次请求到达haproxy它有头 X-BACKEND-IP=10.0.0.5
因此,haproxy尝试对该请求进行负载均衡,我希望它读取标头,获取该IP并直接转到该后端.
那可能吗?如果没有,是否可以使用nginx?
假设您对信任第二个请求标头中的 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。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2145 次  |  
        
|   最近记录:  |