【发布时间】:2017-03-23 08:29:43
【问题描述】:
我们有与此图类似的设置
当请求到达 HAProxy 时,它会与任何服务器进行循环平衡,后端服务器检查其缓存,如果资源不在该服务器上,它会发出重定向,并将标头设置为正确的服务器 IP。
第二次请求到达HAProxy,它检测到带有后端服务器的标头在那里,但是我怎样才能获取该IP并将请求直接发送给它?
例如,第二次请求到达 haproxy,它的 header X-BACKEND-IP=10.0.0.5
因此,haproxy 尝试对请求进行负载平衡,我希望它读取标头,获取该 IP 并直接转到该后端。
这可能吗?如果没有,用 nginx 可以吗?
【问题讨论】:
-
所以您的原始行为是:1)HAProxy 接收到原始 HTTP 请求 -> 2)检测到请求的资源不可用 -> 3)转发带有附加 HTTP 标头字段的原始请求 @ 987654325@自身有可用服务器 -> 4) 检测到请求的资源可用 -> 5) 向资源发送请求。您的目标是消除第 3 步和第 4 步?
-
@LiamKelly 并非如此,HAProxy 没有设置标头,也没有重定向。这一切都由后端服务本身完成。 1)HAPRoxy 接收请求 -> 2)“盲目地”将其轮询到任何后端的下一行 -> 3)后端服务本身决定它是否可以服务该请求或它应该去哪个其他后端。如果它决定它应该去其他地方,它会设置
X-BACKEND-IP标头并重定向回 haproxy(到目前为止一切正常)-> 4)HAProxy 将采用该标头并直接从标头路由到 IP -
如果我理解正确的话,后端服务直接将请求发送到最终服务器似乎是最有效的。第一个后端服务知道请求应该去哪里,那么为什么要负担 HAProxy 呢?如果两台后端服务器不能直接路由,可以放一个ip-forwarding规则(OSI Layer 3,不是请求代理规则),仍然使用HAProxy机器作为中心路由点。
-
寻找粘性会话? blog.haproxy.com/2012/03/29/…
-
@DmitryMiksIr 不幸的是,在这种情况下,粘性会话将不起作用
标签: networking nginx load-balancing haproxy