Varnish、Hitch 和 HAProxy 的流量

Varnish、Hitch 和 HAProxy 的流量

这里有很多关于如何最好地安排 Varnish 和 HAProxy 到后端 Web 服务器之间的流量的问题和答案。其中许多帖子非常老旧,建议将 Varnish 放在 HAProxy 和 Web 服务器之间。主要是因为 Varnish 不支持 TLS。

现在我们有了拴住,我不知道这是否仍然是最好的方法。目标之一是尽可能减少移动部件,以达到简单的目的。为了简单起见,我可以牺牲一些性能。

我提出的解决方案是将 HAProxy 放在 Varnish 和 Web 服务器之间,并将 TLS 卸载到 Hitch。[下图]。

varnish-hitch-haproxy-flow

未加密的 HTTP 流量由 Varnish 处理。HTTPS 由 Hitch 处理,它使用专用端口将其传递给 Varnish。Varnish 将所有未命中的流量发送到 HAProxy,以在 Web 服务器之间实现负载平衡。

最简单的形式是,我将所有服务都放在一台机器上。如果我想扩大规模,我会创建具有相同设置的更多机器,并在它们之间共享 IP,或者使用 DNS 循环。或者两者兼而有之。

我想听听大家对这种方法的反馈。在前面使用 HAProxy 是否更好?如果是,请问原因和方法。

答案1

拴住

Hitch 仍然是可行的,因为 Hitch 非常轻量:它的唯一任务就是终止 TLS。Hitch 甚至不会使用 HTTP,它不需要。

在 Varnish Software,我们可以轻松处理超过100 Gbps在单个 Varnish 节点上。

您可以将 Hitch 与 Varnish 托管在同一台服务器上,如果您使用 Varnish 6,则可以使用以下方式将 Hitch 连接到 VarnishUnix 域套接字

请确保启用PROXY 协议在 Hitch 和 Varnish 上。这将确保原始客户端 IP 自动添加到X-Forwarded-For标头中。

启用PROXY 协议Varnish 中的支持UDS是通过向 Varnish 添加以下监听端口来实现的:-a /var/run/varnish.sock,PROXY,user=varnish,group=varnish,mode=666

启用PROXY 协议Hitch 中的支持是通过以下 Hitch 配置完成的:write-proxy-v2=onUDS在 Hitch 配置中,与 Varnish 的连接如下:backend=/var/run/varnish.sock

HAProxy

不过,我不会添加HAProxy因为它增加了额外的复杂性,并且可能只是一点点开销:Varnish 能够智能地平衡到原始 Web 服务器的流量负载。

看一下https://varnish-cache.org/docs/6.0/reference/vmod_generated.html#vmod-directors学习关于董事,这是 Varnish 的负载均衡组件。

如果你定义健康探测在不同的 Varnish 后端(在 VCL 文件中),Varnish 会知道哪些是健康的,哪些不是。你可以使用董事执行以下类型的负载平衡:

  • 循环赛
  • 随机的
  • 倒退
  • 哈希
  • 分片

根据所选的负载平衡算法,Varnish 只会考虑将流量引导至健康的网络服务器。

除非您有特殊原因需要在 Web 服务器前使用额外的负载均衡器,否则只需使用 Varnish 的 Director 功能。

相关内容