设为首页 收藏本站
查看: 706|回复: 0

[经验分享] nginx的upstream模块

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-29 08:49:20 | 显示全部楼层 |阅读模式
1、upstream 模块介绍:

   Nginx 的负载均衡功能依赖于ngx_http_upstream_modulemo模块,所支持的方式有   

   proxy_pass,fastcgi_pass,memcached_pass.

   官方地址:http://nginx.org/en/docs/http/ngx_http_upstream_module.html

   upstream 模块语法:

   范例(1):

             upstream www_real_servers {
                #ip_hash;
                 server 10.0.0.22:80  weight=15;
                 server 10.0.0.23:80  weight=15;
                }

    解释:upstream是固定的;server是固定的后面可以接域名(门户会用)或ip,如果不加端口,默认是

                    80,weight是权重,值越大被分配的几率越高。


               server backend2.example.com:8080 ;#域名加端口,转发到后端的端口。

               server unix:/tmp/backend3       #指定socket文件

    提示:Server如果接域名,需要内网有DNS服务器,或者在负载均衡器的hosts文件做域名解析。


               server backup1.example.com:8080 backup;

           #备份服务器,等上面指定的服务都不可以访问的时候会启用,back的用户和haproxy的用法相同。

              两台keepalive+http做高可用,那么这里使用nginx的backup参数就可以实现。

  2、upstream模块的相关说明:

     官方文档:http://nginx.org/en/docs/http/ng ... odule.html#upstream

     a、upstream模式应防御nginx.cnf配置的http{}标签内。

     b、upstream模式默认算法是wrr(权重轮询weighted round-robin)

     c、upstream模块内部部分参数说明:

        server 10.0.0.22:80

        负载均衡后面RS配置,可以是ip或域名,端口默认80.高并发场景ip要换成域名,通过dns做负载均衡。


        weight              

        权重,默认是1

        注意:当负载均衡调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不可以是weight和backup

      

        max_fails=2        

        最大尝试失败的次数,默认为1,0表示禁止失败尝试,京东1次,蓝汛10次,根据业务配置;

        如果max_fails是5,它就检测5次,如果5次都是502,他就会根据fails_timeout的值等待后再次检查。

           这个参数配合proxy_next_upstream\fastcgi_next_upstream\memcached_pass 这三个参数使用,当nginx接受后端服务器返回这三个参数

           定义的状态码的时候,会将这个请求转发给正常工作的后端服务器,例如404,502,503,Max_fails默认值为1(提升用户体验)

        

        backup   

       热备配置(RS节点的高可用) ,当前面激活的RS 都失败后会自动启动热备RS


       fail_timeout=20s

       失败超时时间,默认是10s,京东3秒,蓝汛10秒,根据业务配置。常规2-3秒

      

       down

       标志服务器永远不可用,这个参数一直配合ip_hash使用。


3、特别说明:

    对于nginx代理cache服务时,可能需要使用hash算法,此时,如果宕机时,可通过设置down参数确保

    客户端使用安装当前的hash算法访问,很重要滴!!


    官网内容如下:  

    If one of the servers needs to be temporarily removed, it should be marked with the  down parameter in order to preserve the       current hashing of client IP  addresses.

Example:

    upstream backend {
        ip_hash;

        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com down;
        server backend4.example.com;
    }

      Until versions 1.3.1 and 1.2.2, it was not possible to specify a weight for servers using the ip_hash load balancing method.


4、upstream 算法:      

    rr 轮询:

    按客户端请求顺序把客户端的请求逐一分配到不同的服务器后端;


    weight权重:

    在轮询算法的基础上加上权重(默认是rr+weight),权重轮询和访问成正比。


    ip_hash:

    每个请求按访问ip的hash结果分配,当新的请求到达时,先将其客户端ip通过哈希算法哈希出一

    个值,在随后请求客户端,ip的哈希值只要相同,就会被分配到同一台服务器(lvs负载均衡-P参数。

    keepalive里配置的persistence_timeout 50),该调度算法有效解决动态网页session共享问题,容

    易造成请求分配不均。

    注意:当调度算法为ip_hash时,后端服务器在负载均衡中的状态不能是weight、backup。


    fair (第三方 no)

    按照后端服务器相应时间分配请求,相应时间短优先分配。

        范例:

             upstream www_real_servers {
                 server 10.0.0.22:80  weight=15;
                 server 10.0.0.23:80  weight=15;

                 fair;
                }

     #使用时下载nginx的upstream_fair模块


    url_hash(第三方 no)

    按访问url的hash结果分配请求,让每个url定向到同一个后端服务器(后端服务器为缓存服务器时效果著,cdn)。

    在upstream中加入hash语句,server语句不可以加入weight等其它参数

        范例:

             upstream www_real_servers {
                 server 10.0.0.22:80  weight=15;
                 server 10.0.0.23:80  weight=15;

                 hash $request_uri;
                }


     least_conn

      最少连接数,那个机器连接数少就分发

   

    一致性hash

    http://tengine.taobao.org/docume ... istent_hash_cn.html

    #缓存负载均衡最好的算法

      

http {
    upstream test {
        consistent_hash $request_uri;
        server 127.0.0.1:9001 id=1001 weight=3;
        server 127.0.0.1:9002 id=1002 weight=10;
        server 127.0.0.1:9003 id=1003 weight=20;
    }

   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-39469-1-1.html 上篇帖子: 使用nginx的proxy_cache做网站缓存 下篇帖子: nginx配置文件大解析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表