使用nginx开源的粘滞会话负载均衡器

时间:2017-12-18 21:51:13

标签: nginx load-balancing

nginx plus 中可用的粘性会话与开源版本中的散列cookie之间的主要区别是什么?

根据docs nginx,开源允许基于散列在nginx中可用的不同全局变量的会话持久性,包括$cookie_

使用以下配置:

    upstream myserver {
        hash $cookie_sessionID;
        server localhost:8092;
        server localhost:8093;
        server localhost:8094 weight=3;
    }

    location / {
       proxy_pass http://myserver;
    }

假设跨后端将有集中式机制为所有新请求生成唯一的sessionID cookie,那么与nginx加粘性会话方法相比,这种方法的主要缺点是什么?

2 个答案:

答案 0 :(得分:3)

IP哈希负载平衡可以用作“粘性会话”, 但是您必须记住,这种负载平衡方法本身工作起来相对较差,因为在现代世界中,许多用户/设备共享相同的外部IP地址。

我们对一个负载非常重的应用程序(成千上万的并行用户)进行了实验,并观察到使用IP哈希时服务器之间的不平衡程度高达百分之十。

从理论上讲,这种情况应该随着服务器负载和服务器数量的增加而改善,但是例如,当使用3台和5台服务器时,我们没有发现任何显着差异。

因此,我强烈建议您不要在生产环境中使用IP哈希。

作为基于开源的粘性会话解决方案,使用HAProxy并不是一个坏主意,因为HAProxy开箱即用地支持它。 或HAProxy + Nginx捆绑包,其中HAProxy负责“粘性会话”。 (我知道有一个极度负载的系统已为此目的成功使用了这样的捆绑软件,因此,这是可行的想法。)

答案 1 :(得分:0)

您的方法将起作用。根据NGINX的官方文档(Configuring Basic Session Persistence):

“如果您的应用程序需要基本的会话持久性(也称为粘性会话),则可以使用IP哈希负载平衡算法在NGINX开源中实现它。”

NGINX Plus“提供了一种更为复杂的会话持久性形式”。例如“ Last Time”方法-当为每个请求选择具有最低平均延迟和最少活动连接数的服务器时。

相关问题