我是一名 Web 开发人员,最近需要使用负载均衡器。我是这个领域的新手。我已经选择了使用哪个负载均衡器,但这并不重要,据我研究,HAProxy 具有所需的所有功能。
我担心的是,使用基于软件的负载平衡器,它不会将用户“重定向”到后端服务器,负载平衡器会停留在中间,因此所有流量带宽和 TCP 连接都会停留在中间。我理解对了吗?
如果之前的问题的答案是肯定的,那么我该如何解决,以便负载均衡器不会处于客户端 - 后端服务器的中间?
另外,我需要一个“源” lb 类型,因为 webapp 使用会话,并且我需要用户连接到他们一直使用的相同服务器。
先感谢您。
答案1
不确定你的大部分流量流向哪个方向,是client -> server
,还是server -> client
,但如果是后者,你可能会有兴趣使用(或至少检查一下)Linux 虚拟服务器 (LVS)即
一种先进的负载平衡解决方案,可用于构建高度可扩展和高可用性的网络服务,例如可扩展的Web、缓存、邮件、ftp、媒体和VoIP服务。
(摘自该网站)
要直接获取后端服务器的流量,而无需“介于两者之间”到您的客户端,请使用直接路由。您可以在此链接中找到更多信息,但是,要了解它是什么样子的:
现在你可能会说……好吧,这在理论上听起来不错,很奇特,但拜托,网站上写着“最新新闻……2012 年 8 月 8 日星期三”……现在已经是 2016 年了。是的,你当时完全正确,而且这LVS
是经过验证的,非常可靠……我建议至少看一看吗?
维基媒体基金会确实使用它,就像其他许多人一样,这里是最后一张展示 2010 年设置的图片。
答案2
就软件而言 - haproxy 是一款优秀的、经过验证的解决方案。
您可以通过多种方式实现正确的负载平衡。
IP 哈希平衡
根据您的源 IP,将使用源 IP 的哈希值计算目标服务器。因此,来自一个 IP 的所有请求将始终到达同一服务器(除非该服务器已关闭)。
我在不能使用 JWT 的项目中使用了此选项。
Cookie 标记
Web 服务器或负载均衡器返回一个额外的 cookie,标记该服务器,该服务器应该处理来自该用户的其他请求。
在服务器之间共享 cookie
我个人会避免使用此选项,因为它会给您的基础设施带来复杂性,并且您必须关心会话存储。
JSON Web 令牌(cookie 中的会话)
您根本不关心会话,因为它存储在 cookie 中。因此,无论是服务器 A 还是 B,您的服务器都无法处理每个请求。对我来说 - 这是大部分 Web 应用程序的最佳解决方案,但是!这里有一个巨大的警告,因为您必须了解自己在做什么。
如果之前的问题的答案是肯定的,那么我该如何解决,以便负载均衡器不会处于客户端 - 后端服务器的中间?
这也是可能的,您只需使用子域名即可。如果您的用户访问 www,它会决定将用户重定向到 s1.domain.tld 还是 s2.domain.tld,...
我以前见过几次这种解决方案,但现代应用程序不使用它。例如,它会为索引机器人创建重复页面。
您还可以摆脱平衡器并在网络级别使用 ECMP,但配置起来相当复杂。我个人会继续使用负载平衡器。