ELB 保活超时:清漆配置协助

Posted

技术标签:

【中文标题】ELB 保活超时:清漆配置协助【英文标题】:ELB Keep-Alive Timeout: Varnish Configuration Assistance 【发布时间】:2017-01-22 08:39:53 【问题描述】:

我正在寻找配置 Varnish 以优化保持活动超时设置以与我的 ELB 一起使用。 ELB 使用 Varnish 作为后端(为 Tomcat 提供缓存)。

在 Tomcat 中已经设置了 120s 的 keep-alive 超时值。通过该端口测试它可以正常工作。

# time telnet XXX.XX.XX.XX 8080
Trying XXX.XX.XX.XX...
Connected to XXX.XX.XX.XX
Escape character is '^]'.
Connection closed by foreign host.

real    2m0.038s
user    0m0.002s
sys     0m0.004s

当我们尝试通过 Varnish 端口 9000 建立连接时,会在 6 秒内超时

[root@dev-server ~]# time telnet XXX.XX.XX.XX 9000
Trying XXX.XX.XX.XX...
Connected to XXX.XX.XX.XX.
Escape character is '^]'.
Connection closed by foreign host.

real    0m6.093s
user    0m0.001s
sys     0m0.005s

检查了 Varnish 的几个选项,但似乎没有任何效果。

我的后端 default.vcl 配置如下

backend Example 
    .host = "localhost";
    .port = "8080";
    .connect_timeout = 600s;
    .first_byte_timeout = 600s;
    .between_bytes_timeout = 600s;
    .probe = 
        .url = "/service/search/test";
        .timeout = 500ms;
        .interval = 5s;
        .window = 10;
        .threshold = 8;
    

一些论坛建议使用 idle_timeout 或 sess_timout,但这些都不是可接受的变量。 我正在运行 Varnish 3.0.7,现在没有升级计划。

根据 AWS 支持,他们建议 ELB 空闲超时 + 1 秒用于 keepalive 超时,一般情况下请求超时加倍。

例如;

ELB idle timeout = 60 s
Request timeout = 120 s
KeepAlive timeout = 61 s

我们已经正确设置了 ELB 超时,但只需要弄清楚我们如何在 Varnish 中设置它,因为连接会在 6 秒内关闭。 理想情况下,我们希望它在 120 秒内关闭(在 Tomcat 中设置相同的值)

您的帮助将不胜感激。 谢谢

【问题讨论】:

【参考方案1】:

几个论坛的建议是正确的,timeout_idle(以前在 Varnish 3 中称为sess_timeout)是您要寻找的设置:

单位:秒 默认值:5

持久会话的空闲超时。如果在这么多秒内没有收到 HTTP 请求,则会话关闭。

但是,请注意这是一个 varnishd 参数,而不是 VCL 设置,因此它不会进入您的 VCL,而是作为命令行参数传递给 varnishd

要应用,请将-p sess_timeout=61 添加到传递给varnishd 的命令行参数列表中。 (通常,此参数将添加到您的发行版的 configuration file that starts varnish,例如,在较旧的 Debian/Ubuntu 上为 /etc/default/varnish)。

您需要记住重启varnishd 进程(例如,Debian/Ubuntu 上的sudo service varnish restart)以使设置生效。

【讨论】:

以上是关于ELB 保活超时:清漆配置协助的主要内容,如果未能解决你的问题,请参考以下文章

ELB 总是将实例报告为 inservice

nginx配置文件中的超时字段

如何设置清漆缓存控制头

http 请求的 kubernetes/elb 超时是多少?

使用 AWS(ELB、Kubernetes Nginx 和 ACM)配置 HSTS

如何为 WebSocket 协议配置 AWS ELB 和 Nginx? [关闭]