使用 varnish 4 缓存来自多个服务器的相同请求的不同内容。看起来它缓存了来自一个服务器的第一个请求,并为每个后续请求提供相同的内容。
做 curl 会给出两个缓存和不同年龄的响应。
是否有任何因素,如负载或其他任何粘性行为?使用负载的 Jmeter 和 apache 基准测试,但仍然得到相同的行为。
我的 vcl_hash 好吗?想用后端服务器的 url 和 ip 的哈希组合保存对象。
至少在我的情况下,看起来像在缓存对象的 ttl 之后,清漆正在从第二台服务器缓存并返回相同的内容,直到 ttl 完成。但这不是我们期望它的行为吗?
我错过了什么吗?
使用循环和 hash_data。下面是我的 config.vcl
backend s1{
.host = "190.120.90.1";
}
backend s2{
.host = "190.120.90.2";
}
sub vcl_init {
new vms = directors.round_robin();
vms.add_backend(s1);
vms.add_backend(s2);
}
sub vcl_recv {
set req.backend_hint = vms.backend();
}
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
return(lookup);
}