upstream hash consistent seems to depend on order of DNS entries

Maxim Dounin mdounin at mdounin.ru
Mon Feb 3 13:05:38 UTC 2020


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