Varnish + ELB 公开课

Varnish + ELB open sessions

我正在使用清漆 4 + nginx + ELB。当我 运行 varnishlog 时,我每 2 秒就会看到如下新会话:

*   << Session  >> 65622     
-   Begin          sess 0 HTTP/1
-   SessOpen       10.90.148.245 16560 :80 10.13.12.136 80 1476955364.127661 17
-   SessClose      RX_TIMEOUT 5.005
-   End      

当我从 ELB 中删除清漆服务器时,我看不到这些会话。 这些会话来自哪里? (ELB健康检查间隔为300秒)

我在调查了几天后 ELB 将实例踢走的原因后发现了这个问题。

They are not the ELB IP addresses.

你确定吗?

ELB 中的每个节点——在低流量环境中通常有两个或三个节点——有两个 IP 地址,一个 public 地址和一个私有地址。

在 EC2 控制台的“网络与安全”>“网络接口”下找到有问题的 IP 地址。您应该发现 "Attachment owner" 设置为 amazon-elb 并且 "Description" 设置为平衡器的名称。

如果这真的不是您的 ELB,那么这应该会告诉您它是什么。

如果是您的 ELB,那么几乎可以肯定这些 "spare" 连接是 ELB 出于性能原因试图保持对您的实例开放的连接——以避免在下一个客户请求到达。

您的 varnish 设置关闭它们的速度相当快,因此 ELB 再试一次。

您应该能够 increase the req_timeout 设置大于 ELB 的空闲超时(默认 60 秒)的值,这应该会导致您看到的此类内容少很多。

如果 Varnish(或任何其他 Web 服务器)直接暴露在 Internet 上,这个建议会有所不同,因为您不希望随机浏览器占用资源...但是在 [=33] 中的 ELB =](不是 TCP)模式,ELB 负责管理来自浏览器的空闲持久连接,而不需要每个浏览器都消耗与您的实例的连接,并且 ELB 的前端和后端连接之间没有 1:1 相关性.