[原创]Nginx模块upstream_module详细介绍以及调度算法 – 21运维
通知: .-...

[原创]Nginx模块upstream_module详细介绍以及调度算法

nginx 21运维 3751浏览 0评论

说到upstream这个模块,官网有详细介绍http://nginx.org/en/docs/http/ngx_http_upstream_module.html,我这里做一个应用以及文字阐述。
一,upstream模块介绍
nginx负载均衡就是依赖于ngx_http_upstream_module模块,支持代理方式有proxy_pass(前边我们用到的)  、fastcgi_pass、  memcached_pass。运行原理是前端访问的时候,请求到哪个主机,执行到后边定义的比如proxy_pass(单独笔记知识点),就会按照我们定义的upstream 名称执行对应的模块,比如《Linux环境下Nginx 通过upstream如何配置负载均衡以及实现》定义的web_pools这个web池。然后按照upstream定义的服务器以及设置好的算法进行分发执行。
二,upstream语法
以我们之前定义的文件为例:

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

upstream web_pools {
    server 192.168.1.102:80      weight=5  max_fails=3 fail_timeout=3;
    server 192.168.1.103:80      weight=1  max_fails=3 fail_timeout=3;
    server 192.168.1.104:80       backup;
    keepalive 500;
}

    server {
        listen       80;
        server_name  nginx.21yunwei.com;
        location / {
            proxy_pass http://web_pools;
            proxy_http_version 1.1;
        }
    }
}

三,upstream模块说明
1,upstream必须放到http{}标签中。
2,默认算法是wrr,权重轮训。
3,upstream内部参数说明:
  server 192.168.1.102:80      weight=5;  定义的真实服务器,可以是IP也可以是域名,端口可以不写,默认80。如改成其他端口需要指定。
  weight:表示当前指定server负载权重,权重越大,被请求的几率越大。默认权重为1.
  down:表示当前server已停用
  backup:表示当前server是备用服务器,非backup服务器挂了以后该服务器将会启用。注意:当服务器都down才会启用备用服务器。 
  max_fails:最大尝试失败次数,默认1。如设置0,则表示禁止尝试。根据实际需要来配置,一般配置2-3或更高。
  fail_timeout:失败超时时间。默认10s,一般配置2-3秒就可以了。常于max_fails结合使用。
  max_conns:并发连接数。保护节点服务器参数
keepalive 300; 长连接最大连接数。
四,upstream模块调度算法方式。
        Nginx的upstream支持5种分配方式。其中,前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式:
1、rr轮询     
        轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。按照1:1轮询。
        upstream backend {
            server 192.168.1.101:88;
            server 192.168.1.102:88;
        }
2、wrr权重轮询。       
        轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。
        upstream backend {
            server 192.168.1.101 weight=1;
            server 192.168.1.102 weight=2;
            server 192.168.1.103 weight=3;
        }
3、ip_hash       
        每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。
        upstream backend {
            ip_hash;
            server 192.168.1.101:81;
            server 192.168.1.102:82;
            server 192.168.1.103:83;
        }
说明:当负载调度算法为 ip_hash 时,后端服务器在负载均衡调度中的状态不能是 weight和backup。

4、fair       
        fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。
        upstream backend {
            server 192.168.1.101;
            server 192.168.1.102;
            fair;
        }
5、url_hash
        与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。
        upstream backend {
            server 192.168.1.101;
            server 192.168.1.102;
            hash $request_uri;
            hash_method crc32;
        }
目前自己的服务器使用以及生产环境主要是前三种算法,后边两种目前作了解即可,有需要的朋友可以自行深处研究 。

转载请注明:21运维 » [原创]Nginx模块upstream_module详细介绍以及调度算法

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址