Fork me on GitHub

Nginx的调度算法

  一、ip_hash

vim /etc/nginx/nginx.conf 
http {
    upstream websrvs {
        server 192.168.1.4:80;
        server 192.168.1.6:80;
        server 127.0.0.1:8080 backup;
        ip_hash;
        }
}

在nginx的主配置文件的http语句中添加ip_hash 即可

nginx -s reload
#重读服务

注释:根据源地址进行hash运算,hash值相同,调度到同一台电脑上

  二、hash key [consistent] 

基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者组合

  1、 hash $remote_addr;  等同于ip_hash

vim /etc/nginx/nginx.conf 
http {
    upstream websrvs {
        server 192.168.1.4:80;
        server 192.168.1.6:80;
        server 127.0.0.1:8080 backup;
        hash $remote_addr;
        }
}

在nginx的主配置文件的http语句中添加 hash $remote_addr;即可

nginx -s reload
#重读服务

  2、hash $request_uri consistent;  目标hash,相当于lvs中的dh

只要访问的地址是固定的,就往同一台服务器上调度

vim /etc/nginx/nginx.conf 
http {
    upstream websrvs {
        server 192.168.1.4:80;
        server 192.168.1.6:80;
        server 127.0.0.1:8080 backup;
        hash $request_uri; 
        }
}

在nginx的主配置文件的http语句中添加hash $request_uri; 即可

nginx -s reload
#重读服务

   3、hash $cookie_name; #key为name的cookie 

针对cookie调度

http {
    upstream websrvs {
        server 192.168.1.4:80;
        server 192.168.1.6:80;
        server 127.0.0.1:8080 backup;
        hash $cookie_sessionid;
        }
}

网站是根据sessionid来判断身份的这里就写sessionid,网站如果是根据userid就写userid。

   测试访问:

1 [10:48:43 root@www ~]#curl -b sessionid=123456 www.test.net
2 192.168.1.6

作用:将请求分类,同一类请求将发往同一个upstream server,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用


 

  nginx的一致性hash算法

hash $request_uri consistent

 

 keepalive 连接数N;

  为每个worker进程保留的空闲的长连接数量,可节约nginx端口,并减少连接管理的消耗


 

posted @ 2021-06-10 12:23  Alex-Lzy  阅读(512)  评论(0编辑  收藏  举报