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 <mdou...@mdounin.ru> > To: nginx@nginx.org > Subject: Re: upstream hash consistent seems to depend on order of DNS > entries > Message-ID: <20200203130538.gr12...@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/ > _______________________________________________ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx