problem with nginx round robin upstream
ru at nginx.com
Thu Aug 30 09:29:34 UTC 2012
On Thu, Aug 30, 2012 at 10:19:11AM +0300, Tsahi Asher wrote:
> I have a problem with the upstream round robin mechanism.
> in ngx_http_upstream.c ngx_http_upstream_server function the hostname that
> is added in the configuration file under upstream directive is added to
> the upstream server list.
> the function uses ngx_parse_url which in turn uses ngx_parse_inet_url that
> calls ngx_inet_resolve_host.
> ngx_inet_resolve_host tries to resolve the host name from the
> configuration file by calling gethostbyname. for each url gethostbyname
> return the list of ip's that are associated with this url and these ip's
> are added to the list of upstream servers.
> This results in a situation that if there are three servers defined in an
> upstream directive, each with an equal weight, but one of those server is
> associated with two ip's (for example internal and an external ip) then
> the round robin weight will not be equal for each server. The server which
> has two ip's will get a double weight.
> i can add a log if required or if my explanation is not good enough.
> i saw that a url has a flag called one_addr that if is set to true will
> get resolved to a single ip only, but this flag is not used.
> adding the host ip address is one way to solve this, is there another way?
This is expected. Here's the relevant quote from documentation :
: A domain name that resolves to several IP addresses essentially defines
: multiple servers.
More information about the nginx-devel