`
即可偶
  • 浏览: 21240 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

nginx负载均衡策略

阅读更多

[size=small;]模块官方介绍:


http://wiki.nginx.org/HttpUpstreamModule


http://www.howtocn.org/nginx:Nginx%E6%A8%A1%E5%9D%97%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%E4%B8%AD%E6%96%87%E7%89%88




说说upstream里的server指令:


server 后面可以是域名格式,也可以是socket格式[ip:port],后面还可以带参数。参数有下面几个:


weight = NUMBER - 设置服务器的权重值,默认为1. 值越大,分配的请求越多。只适用于轮询这种LB策略。


max_fails = NUMBER -
在fail_timeout设置的时间内,尝试连接服务器失败的次数.默认为1,0表示关闭检查.错误类型在proxy_next_upstream
or fastcgi_next_upstream中定义,(除了404错误不计入max_fails).


fail_timeout = TIME - the time during which must occur *max_fails*
number of unsuccessful attempts at communication with the server that
would cause the server to be considered inoperative, and also the time
for which the server will be considered inoperative (before another
attempt is made). If not set the time is 10 seconds. fail_timeout has
nothing to do with upstream response time, use proxy_connect_timeout and
proxy_read_timeout for controlling this.


down - marks server as permanently offline, to be used with the directive ip_hash.


backup - (0.6.7 or later) only uses this server if the non-backup
servers are all down or busy (cannot be used with the directive ip_hash)






nginx负载均衡的策略:




[/size]
1.轮询(默认方式)
[size=small;]


对于一级后端服务器群,形成一个环队列的形式,对于每个到达的请求按时间顺序顺次分配给这些后端服务器。在前端调度器与后端服务器之间采用“心跳”方式进行状态检查,如果发现后端服务器宕机,则将其删除。


    这种方式为默认配置,优点是简洁,但缺点是无法进行最优化调度,有可能有的请求需要耗时较久,这样会带来一定的不平衡。


    它的例子:在http区域里添加:


upstream lb {


        server 10.10.57.122:80;


        server 10.10.57.123:80;


}


在你的某个server里增加:


location / {


              proxy_pass http://lb;


        }




[/size]
2. 加权轮询
[size=small;]


    这是一种对上述方式的改进,引入权值的概念,能够解决后端服务器性能不均的情况。




    例如这样一个配置:


    upstream lb {


         server 10.10.57.122:80 weight=5;


         server 10.10.57.123:80 weight=10;


    }




ps:以上轮询负载均衡策略,我个人认为对于动态网站应用,这几乎就是形同摆设,没有人会采用。但一种情况例外:服务器端的session采用共享机制,如存储在数据库或者memcached内存里等。


[/size]
3. ip_hash(基于ip的hash分配策略)
[size=small;]


     这是一种非轮询式方式,对于每个到达的请求,直接通过其请求IP进行哈希的映射,通过映射结果获得那一台后端服务器要处理这个请求,这种方式有一个明显的好处是能够保证session的唯一性。


    它的配置例子:


upstream lb {


        ip_hash;


        server 10.10.57.122:80;


        server 10.10.57.123:80;


}


在你的某个server里增加:


location / {


              proxy_pass http://lb;


        }




   


This directive causes requests to be distributed between upstreams based on the IP-address of the client.


The key for the hash is the class-C network address of the client.
This method guarantees that the client request will always be
transferred to the same server. But if this server is considered
inoperative, then the request of this client will be transferred to
another server. This gives a high probability clients will always
connect to the same server.




It is not possible to combine ip_hash and weight methods for
connection distribution. If one of the servers must be removed for some
time, you must mark that server as *down*.




由这段英文解说知道,客户端只要来自同一网段的ip的request都会转发到相同的后端服务器上。这里的所谓的class-C
network这里作者并没有很详细地解释,我只能说,写这句话的人不懂网络。我个人的理解是:以ip地址的点分十进制格式的前3个字节进行hash。


其实这不是真正意义上的ip address hash,而只是network address hash。真正的ip address hash方式有不?其实可以通过下面介绍的url_hash来实现。关键指令:hash $remote_addr;


不过这里有个前提,$remote_addr必须是client的real ip address。


为什么这里能够实现真正意义上的ip address hash?很简单,就是这里整个ip address被当作一个字符串来对待,故只要ip地址(key)不同,hash必然也是不同的。




[/size]
4. url_hash(基于URL的哈希方式)
[size=small;]


   
这种方式与IP的哈希方式类似,是对客户机请求的URL进行哈希操作,这样的方式有一个明显的好处是,能够便于内容缓存的实现,对于经常性的资源访问,采
用这样的方式会获得非常好的质量。它目前不是nginx自带的功能,需要安装补丁方可使用。本指令的详细说明和安装见:(文章后面有附带详细安装实例)


http://wiki.nginx.org/HttpUpstreamRequestHashModule




    它的配置方式为:


  


upstream lb {


         server 10.10.57.122:80;


         server 10.10.57.123:80;


         hash $request_uri;


    }




如果将这里的$request_uri换成$remote_addr便可实现上面我所说的真正基于ip地址的策略。


[/size]
5. 基于服务响应式
[size=small;]


   这种方式是根据服务器端的动态响应,对每一个请求进行分配。 这种方式能够自动根据当前的后端实际负载来优化。


   它的配置方式:


upstream lb {


         server 10.10.57.122:80;


         server 10.10.57.123:80;


         fair;


    }




这个没怎么测试,只是配起来用了下,机器差不多的话感觉就是轮询。


===============================


cd nginx-0.7.67;
patch -p0 < ../nginx_upstream_hash-0.3.1/nginx.patch
configure时:
./configure --prefix=/app/nginx -user=nobody -group=nobody \
--add-module=../nginx_upstream_hash-0.3.1/ \
--add-module=../gnosek-nginx-upstream-fair-2131c73/


========================================


upstream  www.test1.com {
          ip_hash;
          server   172.16.125.76:8066 weight=10;
          server   172.16.125.76:8077 down;
          server   172.16.0.18:8066 max_fails=3 fail_timeout=30s;
          server   172.16.0.18:8077 backup;
     }


分享到:
评论

相关推荐

    nginx常用负载均衡5种策略

    nginx经常用到的负载均衡的5种策略,注意细节,部分属性不能一起使用。

    nginx负载均衡策略.

    nginx负载均衡策略.

    02Nginx负载均衡策略配置.pdf

    02Nginx负载均衡策略配置

    nginx负载均衡 nginx+tomcat tomcat实现负责均衡

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器... Nginx 支持简单的负载均衡和容错; 支持作为基本 HTTP 服务器的功能,例如日志、压缩、Byte ranges、Chunked responses、SSL、虚拟主机等等,应有尽有

    基于lua的nginx自定义负载均衡

    基于lua的nginx自定义负载均衡基于lua的nginx自定义负载均衡

    详解Nginx服务器之负载均衡策略(6种)

    二、Nginx负载均衡策略 负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表: #动态服务器组 upstream dynamic...

    Nginx负载均衡特点

    Nginx的特点是: 1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构; 2、Nginx对网络的依赖比较小;... 另外默认的只有Round-robin和IP-hash两种负载均衡算法。

    使用Nginx实现负载均衡的策略

    本篇文章主要介绍了使用Nginx实现负载均衡的策略,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    nginx负载均衡中RR和ip_hash策略分析

    nginx负载均衡中RR和ip_hash策略分析

    nginx视频教程.txt

    P1313_Nginx视频教程_Nginx负载均衡策略(常用) P1414_Nginx视频教程_Nginx负载均衡备份和宕机 P1515_Nginx视频教程_什么是动静分离? P1616_Nginx视频教程_Nginx实现动静分离 P1717_Nginx视频教程_什么是虚拟...

    Nginx搭建负载均衡集群的实现

    (2).Nginx负载均衡策略  nginx的负载均衡用于upstream模板定义的后端服务器列表中选取一台服务器接收用户的请求。一个基本的upstream模块如下: upstream [服务器组名称]{  server [IP地址]:[端口号];  server ...

    Nginx环境安装及负载均衡策略[zlib\pcre\glibc\openssl\nginx]

    nginx安装 1 1 zlib库 安装与使用 1 2 pcre-8.35安装 7 3 glibc-2.15安装 7 ...7 nginx负载均衡配置及策略 39 7.1 默认策略–轮询 40 7.2 最少链接 40 7.3 weight权重 41 7.4 ip_hash 41 7.5 url_hash 41 7.6 fair 41

    Nginx+Tomcat负载均衡

    最近学习Nginx+tomcat实现 负载均衡。 首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把...

    实现负载均衡的Web服务器软件nginx-1.13.0

    实现负载均衡常用的Web服务器软件有Nginx、HAProxy、LVS、Apache,本资源是Nginx的负载均衡策略。 负载均衡的目的是为了解决单个节点压力过大,造成Web服务响应过慢,严重的情况下导致服务瘫痪,无法正常提供服务。

    详解Linux系统配置nginx的负载均衡

    详解Linux系统配置nginx的负载均衡 负载均衡的几种方式: 1.轮询:默认按照时间顺序对所有服务器一个一个的访问,如果有服务器宕机,会自动剔除; 2.weight:服务器的方位几率和weight成正比,这个可以在服务器...

    Redis集群HA架构+双写一致性解决方案、Nginx+Storm负载均衡策略、Hyst-shop-detail.zip

    Redis集群HA架构+双写一致性解决方案、Nginx+Storm负载均衡策略、Hyst-shop-detail

    NGINX HTTP负载均衡操作及优化手册.docx

    NGINX HTTP负载均衡操作及优化手册,涉及负载均衡的策略、调优等。NGINX HTTP负载均衡操作及优化手册,涉及负载均衡的策略、调优等。NGINX HTTP负载均衡操作及优化手册,涉及负载均衡的策略、调优等。

    基于Nginx+Keepa...群及负载均衡策略研究与优化_胡科.caj

    基于Nginx+Keepa...群及负载均衡策略研究与优化_胡科.caj

    Nginx实现负载均衡的方法总结

    主要给大家总结介绍了关于Nginx实现负载均衡的一些方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    nginx 代理问题,负载均衡问题

    Nginx负载均衡【`重点`】Nginx为我们默认提供了三种负载均衡的策略: ​ 轮询:将客户端发起的请求,平均的分配给每一台服务器。 ​ 权重:会将客户端的请求,根据服务器的权重值不同,分配不同的数量。 ​ ip_...

Global site tag (gtag.js) - Google Analytics