Mailing List Archive

varnish 4 to cache from multiple servers with different content
http://stackoverflow.com/questions/40751646/varnish-4-to-cache-from-multiple-servers-with-different-content



Using varnish 4 to cache different content of same request from multiple
servers. It looks like it caches the first request from one server and
keeps giving the same content for every subsequent request.

doing curl gives response with two caches and different age.

Are there any factors like load or anything else for stickiness behaviour?
Used Jmeter and apache benchmark with load but still got the same behaviour.

Is my vcl_hash is good? Want to save the object with hash combination of
url and ip of backend server.

am I missing anything?

using round robin and hash_data. below is my 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);
}


Thanks,
Sreenath
Re: varnish 4 to cache from multiple servers with different content [ In reply to ]
Hi,

There's no stickyness involved with the round-robin director. But from what
you are describing, Varnish is doing what you ask it to do: it caches from
one backend and keep serving the cached content (ie. it doesn't need to go
to the backends anymore).

If you wish to have a non-caching loadbalancer, then then "return (pass);"
at the end of vcl_recv and you'll be ok.

Otherwise, what behavior do you wish to obtain?

--
Guillaume Quintard

On Wed, Nov 23, 2016 at 3:59 PM, Sreenath Kodedala <vedarad@gmail.com>
wrote:

> http://stackoverflow.com/questions/40751646/varnish-4-
> to-cache-from-multiple-servers-with-different-content
>
>
> Using varnish 4 to cache different content of same request from multiple
> servers. It looks like it caches the first request from one server and
> keeps giving the same content for every subsequent request.
>
> doing curl gives response with two caches and different age.
>
> Are there any factors like load or anything else for stickiness behaviour?
> Used Jmeter and apache benchmark with load but still got the same behaviour.
>
> Is my vcl_hash is good? Want to save the object with hash combination of
> url and ip of backend server.
>
> am I missing anything?
>
> using round robin and hash_data. below is my 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);
> }
>
>
> Thanks,
> Sreenath
>
> _______________________________________________
> varnish-misc mailing list
> varnish-misc@varnish-cache.org
> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
>
Re: varnish 4 to cache from multiple servers with different content [ In reply to ]
Please keep the mailing list in the loop, this is an open conversation.

OK, so your vcl is wrong and the round-robin is not what you want.

Get rid of you vcl_init (wrong in your case) and vcl_hash (this is the
default one, no need for it, at least for now), and use something like:

sub vcl_recv {
if (req.http.host == "foo.com") {
set req.backend_hint == s1;
} else {
set req.backend_hint == s2;
}
}

On Nov 25, 2016 17:41, "Sreenath Kodedala" <vedarad@gmail.com> wrote:

I might be asking something different.
My two backends will return two different contents and should be able to
cache both the objects depending on backend hostname or ip address.
And should return the appropriate cached object depending on the what
backend it will be used while load-balancing. Not sure if I was clear.

--
Sreenath

On Fri, Nov 25, 2016 at 11:22 AM, Guillaume Quintard <
guillaume@varnish-software.com> wrote:

> Hi,
>
> There's no stickyness involved with the round-robin director. But from
> what you are describing, Varnish is doing what you ask it to do: it caches
> from one backend and keep serving the cached content (ie. it doesn't need
> to go to the backends anymore).
>
> If you wish to have a non-caching loadbalancer, then then "return (pass);"
> at the end of vcl_recv and you'll be ok.
>
> Otherwise, what behavior do you wish to obtain?
>
> --
> Guillaume Quintard
>
> On Wed, Nov 23, 2016 at 3:59 PM, Sreenath Kodedala <vedarad@gmail.com>
> wrote:
>
>> http://stackoverflow.com/questions/40751646/varnish-4-to-cac
>> he-from-multiple-servers-with-different-content
>>
>>
>> Using varnish 4 to cache different content of same request from multiple
>> servers. It looks like it caches the first request from one server and
>> keeps giving the same content for every subsequent request.
>>
>> doing curl gives response with two caches and different age.
>>
>> Are there any factors like load or anything else for stickiness
>> behaviour? Used Jmeter and apache benchmark with load but still got the
>> same behaviour.
>>
>> Is my vcl_hash is good? Want to save the object with hash combination of
>> url and ip of backend server.
>>
>> am I missing anything?
>>
>> using round robin and hash_data. below is my 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);
>> }
>>
>>
>> Thanks,
>> Sreenath
>>
>> _______________________________________________
>> varnish-misc mailing list
>> varnish-misc@varnish-cache.org
>> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
>>
>
>