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 保活超时:清漆配置协助的主要内容,如果未能解决你的问题,请参考以下文章
http 请求的 kubernetes/elb 超时是多少?