nginx 负载均衡(upstream)4种分配方式

2018-12-07  本文已影响0人  師兄妖怪被師傅抓赱了

实例 1    (简单用法)


upstream backend {

    server backend1.example.com;

    server backend2.example.com;

}

server {

    location / {

        proxy_pass http://backend;

    }

实例 2    (动态可配置组)


resolver 10.0.0.1;

upstream dynamic {

    zone upstream_dynamic 64k;

    server backend1.example.com      weight=5;

    server backend2.example.com:8080 fail_timeout=5s slow_start=30s;

    server 192.0.2.1                max_fails=3;

    server backend3.example.com      resolve;

    server backend4.example.com      service=http resolve;

    server backup1.example.com:8080  backup;

    server backup2.example.com:8080  backup;

}

server {

    location / {

        proxy_pass http://dynamic;

        health_check;

    }

}

参数说明:

weight=number                                       设置定义的服务的权重,默认为1。

max_conns=number                                默认值是0,意思是没有限制 , 限制连接到代理服务器的并发连接数

max_fails=number                                   被 fail_timeout 定义的 时间内当和服务通信失败尝试的次数 。 默认值被设为1.为0表示不支持

fail_timeout=time                                     重连时间范围,如果超过则表示该服务器不可用。   默认10秒.  

backup                                                    热备服务. 当主服务不可用后才会把请求

down                                                       标记该服务永久不可用。

resolve                                                    监控绑定到一个服务的域名的ip地址的变化,然后自动修改upstream配置不需要重启nginx ,                                                                          指令必须定义在http 模块 :如;

                     http { 

                                resolver 10.0.0.1;  

                                upstream u { 

                                                     zone ...;

                                                     server example.com resolve; 

                                                }

                             }     

route=string                                          设置服务路由的名称

service=name                                       启用DNS SRV记录解析和设置服务的名称(1.9.13).为了让该参数生效,需要定义resolve参数和                                                                  指定一个不需要端口的hostname. 如:

                                                              server backend.example.com service=http resolve; 

解决session


1、轮询(默认)    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight        指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

3、ip_hash    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4、fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5、url_hash(第三方)    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

如:

upstream backend {

    ip_hash;(可以解决session的问题)

    server backend1.example.com;

    server backend2.example.com;

}

上一篇下一篇

猜你喜欢

热点阅读