在不停机的情况下,以编程方式将单个后端服务器添加到/从 Varnish 控制器中删除的最佳方法是什么?我一直在寻找一个很好的例子,但找不到。
我希望能够根据需求上下扩展我的后端服务器。
谢谢!
山姆
在不停机的情况下,以编程方式将单个后端服务器添加到/从 Varnish 控制器中删除的最佳方法是什么?我一直在寻找一个很好的例子,但找不到。
我希望能够根据需求上下扩展我的后端服务器。
谢谢!
山姆
虽然它不是添加后端的最优雅甚至动态的方式,但我会通过在单独的 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有一个更精细的后端处理补丁,但据我所知,它不适用于 Varnish 3。