What are the limitations of ip_hash ?

Mark Swanson mark at ScheduleWorld.com
Wed Dec 31 19:13:43 MSK 2008


Grzegorz Nosek wrote:
> On śro, gru 31, 2008 at 02:58:30 -0500, Mark Swanson wrote:
>> 1. IP 1.1.1.1 -> ip_hash -> server A
>> 2. IP 2.2.2.2 -> ip_hash -> server B
>> 3. IP 1.1.1.1 -> ip_hash -> server A
>>
>> so far so good. 1.1.1.1 always goes to server A just like the docs
>> state. Until ...
>>
>> 4. IP 1.1.1.1 -> ip_hash -> server B
>>
>> This should never happen if I understand ip_hash correctly, yet this it
>> seems to happen about 10% of the time (not useful to anyone needing
>> sticky sessions).
> 
> If I understand the source correctly, this happens when one of your
> backends is down (as determined by Nginx). The IP address is then
> rehashed and the connection retried until it succeeds or you run out of
> backends.
> 
>> Btw, modulo? If you have the source handy would you mind posting the
>> code for this? I was really hoping the class C address would be used as
>> a key into a hash table and the value was the previously used server ID.
> 
> The two functions starting from here:
> 
> http://emiller.info/lxr/http/source/http/modules/ngx_http_upstream_ip_hash_module.c#L92
> 
>> I was also really hoping this hash table would be preserved after
>> sending a HUP signal to nginx.
> 
> There's no hash table in ip_hash, there's a hash _function_ which maps
> incoming IP to a server id. It isn't remembered anywhere. But the
> backend up/down status and failure count is indeed reset upon SIGHUP
> (AFAIK).
> 
> Best regards,
>  Grzegorz Nosek
> 
> 
Ok, thank you for the info.






More information about the nginx mailing list