upstream hash consistent seems to depend on order of DNS entries (Maxim Dounin)
Ian Morris Nieves
imnieves at gmail.com
Mon Feb 3 20:59:33 UTC 2020
Hi Maxim,
Thank you for your response.
OK, I understand what you have said.
This seems slightly strange to me. We both understand the purpose/point of hashing (consistent or not consistent). Why does it then make sense to fall-back to round robin?
In my case, the number of hosts will change over time, and I can’t update the nginx config. So I thought it would make sense to use a hostname that resolves to many IPs. This would be a scalable solutioin.
I would think that the more correct solution would be to hash the IP addresses that all the names resolve to…. not the names themselves.
I must be missing/mis-understanding something. Does the current implementation/solution make sense to you?
Best,
Ian
>
> Message: 2
> Date: Mon, 3 Feb 2020 16:05:38 +0300
> From: Maxim Dounin <mdounin at mdounin.ru>
> To: nginx at nginx.org
> Subject: Re: upstream hash consistent seems to depend on order of DNS
> entries
> Message-ID: <20200203130538.GR12894 at mdounin.ru>
> Content-Type: text/plain; charset=utf-8
>
> Hello!
>
> On Sat, Feb 01, 2020 at 11:48:00AM -0800, Ian Morris Nieves wrote:
>
>> Here is the setup:
>> - I am running nginx in a single docker container and it has an
>> upstream to a docker service which is composed of 3 docker
>> containers (which happens to be php-fpm)
>> - the service is configured to _not_ expose a single virtual ip
>> address (vip), instead the service exposes the ip addresses of
>> all 3 containers through docker?s built-in DNS. When this DNS
>> is asked for the IP address of the service it will respond with
>> a list of 3 IP address but the list will rotate in round-robin
>> fashion each time a lookup is performed. Thus the first IP in
>> the list will not be the same for any 2 consecutive lookups.
>>
>> My first question is:
>> Is it the correct behavior that consistent hashing depends on
>> the order of IP addresses in the DNS query response? I can
>> imagine arguments either way, and it is possible that this
>> critical detail is outside the scope of consistent hashing. I
>> will also forward this question to the author of Ketama.
>
> Consistent hashing uses the _name_ as written in the
> configuration, not the IP addresses the name resolves to.
>
> If a name resolves to multiple IP addresses, these addresses are
> considered equal and requests are distributed between them using
> round-robin balancing.
>
> That is, to balance multiple servers (containers) using consistent
> hashing, you have to configure an upstream block with multiple
> "server" directives in it.
>
> --
> Maxim Dounin
> http://mdounin.ru/
>
More information about the nginx
mailing list