可靠地testingColdFusion服务器的健康状况

的背景

我们在CF / Apache2后端服务器前运行一个Varnishcaching服务器。 清漆盒每两秒运行一次健康检查探针,如下所示:

probe healthcheck { .url = "/probe.cfm"; .timeout = 5s; .interval = 2s; .window = 10; .threshold = 5; .initial = 5; .expected_response = 200; } backend web1 { .host = "<backend ip>"; .port = "80"; .probe = healthcheck; } 

probe.cfm这样做:

 <cfoutput> <!doctype html> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]--> <head> <meta charset="utf-8"> <title>CF Probe</title> </head> <body> </cfoutput> <cfquery name="qryProbe" datasource="#Request.DSN#"> SELECT TOP 1 [PageID] FROM [Page] WHERE [PageID] > 6 </cfquery> <cfoutput> #Variables.qryProbe.RecordCount# </body> </html> </cfoutput> 

这段代码从底层数据库中select一条logging(映射到数据源),如果成功则返回200。

稍后在Varnishconfiguration中有一个testing后端是否启动的部分,如果没有,则将caching的宽限期设置为24小时,对于任何不在caching中的页面,都应该生成一个综合维护页面。

sub vcl_recv

如果(req.backend.healthy){set req.grace = 30s; } else {set req.grace = 24h; }

sub vcl_error

 if (!req.backend.healthy && obj.status != 200 && obj.status != 403 && obj.status != 404 && obj.status != 301 && obj.status != 302) { synthetic{"<some HTML here>"} } 

问题

我们最近有一个条件,其中的CF实例并不是严格地说没有反应,但它没有提供页面。 然而根据清漆日志,后端仍然健康 ,因此清漆也很快停止供应内容。

另外,我看到至less有一个后端产生错误500s的例子,当我们重新启动CF实例时,Varnish仍然报告它是健康的,尽pipe日志中的健康testing线说它从后端收到500。

问题

如何更准确地testingCF后端的健康状况,使Varnish能够正确响应停机/重启/等等。

我想,此外,任何人都可以看到我已经设置的后端健康光油testing中的任何明显的缺陷,并确定是否合成的HTML得到渲染的testing?

那么,它被configuration为需要连续12秒的错误(6次检查,间隔2秒),因为后端被标记为不健康,所以当探针收集时肯定有潜在的用户请求进来并被送达坏内容足够坏的反应来标记后端。

您可以根据需要调整探针的窗口/阈值设置,以缩短该时间范围,并考虑将圣徒模式设置为立即处理不良响应的方式,而无需收集探针故障或将不良响应发送给用户。