动态添加或删除后端主机到Varnish

时间:2013-01-08 01:01:33

标签: varnish varnish-vcl

在没有停机的情况下以编程方式向Varnish Director添加或删除单个后端服务器的最佳方法是什么?我一直在寻找一个很好的例子,找不到一个。

我希望能够根据需求上下扩展我的后端服务器。

谢谢!

萨姆

1 个答案:

答案 0 :(得分:1)

虽然这不是添加后端的最优雅甚至是动态的方式,但我会通过在单独的VCL中定义后端并使用

将其包含在default.vcl中来实现此目的。
include "backend.vcl";

您定义后端和导演的位置。例如

probe healthcheck {
   .url = "/online";
   .interval = 15s;
   .timeout = 0.3 s;
   .window = 3;
   .threshold = 1;
   .initial = 1;
}

backend web1 {
  .host = "10.1.2.1";
  .port = "80";
  .connect_timeout = 300s;
  .first_byte_timeout = 5000s;
  .between_bytes_timeout = 300s;
  .probe = healthcheck;
}

director backendpool round-robin {
  { .backend = web1; }
}

并使用backendpool作为后端。然后使用shell脚本,ssh,自定义守护程序或任何适合您需求的方法,最好通过添加后端更新backend.vcl并为Varnish重新加载。

此方法存在的问题是Varnish实际上并未删除已从backend.vcl中删除的后端。即使它们没有被使用,Varnish也会继续探测它们。从长远来看,这可能会导致意外行为。如果重新使用后端名称,至少后端运行状况探测的结果会变得混乱。例如,在上面的示例中重命名web1后端几次,然后将其主机更改为无效主机后,这里是Backend_health轮询结果,之后恢复到只有有效的上述配置web1后端已定义。

0 Backend_health - web1 Still healthy 4--X-RH 3 1 3 0.001141 0.001055 HTTP/1.1 200 OK
0 Backend_health - web1 Still sick ------- 0 1 3 0.000000 0.000000
0 Backend_health - web2 Still healthy 4--X-RH 3 1 3 0.001061 0.001111 HTTP/1.1 200 OK
0 Backend_health - web3 Still healthy 4--X-RH 3 1 3 0.001007 0.001021 HTTP/1.1 200 OK

对于Varnish 2.1,有a patch更精细的后端处理,但据我所知,它不适用于Varnish 3。