nginx负载均衡算法

nginx负载均衡设置

模块官方介绍: 
http://wiki.nginx.org/HttpUpstreamModule

说说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负载均衡的策略: 
1.轮询(默认方式) 
对于一级后端服务器群,形成一个环队列的形式,对于每个到达的请求按时间顺序顺次分配给这些后端服务器。在前端调度器与后端服务器之间采用“心跳”方式进行状态检查,如果发现后端服务器宕机,则将其删除。 
   这种方式为默认配置,优点是简洁,但缺点是无法进行最优化调度,有可能有的请求需要耗时较久,这样会带来一定的不平衡。 
   它的例子:在http区域里添加: 
upstream lb { 
       server 10.10.57.122:80; 
       server 10.10.57.123:80; 

在你的某个server里增加: 
location / { 
             proxy_pass http://lb; 
       }

2. 加权轮询 
   这是一种对上述方式的改进,引入权值的概念,能够解决后端服务器性能不均的情况。 
   例如这样一个配置: 
   upstream lb { 
        server 10.10.57.122:80 weight=5; 
        server 10.10.57.123:80 weight=10; 
   } 
ps:以上轮询负载均衡策略,我个人认为对于动态网站应用,这几乎就是形同摆设,没有人会采用。但一种情况例外:服务器端的session采用共享机制,如存储在数据库或者memcached内存里等。

3. ip_hash(基于ip的hash分配策略) 
    这是一种非轮询式方式,对于每个到达的请求,直接通过其请求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必然也是不同的。

4. url_hash(基于URL的哈希方式) 
   这种方式与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地址的策略。

5. 基于服务响应式 
  这种方式是根据服务器端的动态响应,对每一个请求进行分配。
这种方式能够自动根据当前的后端实际负载来优化。 
  它的配置方式: 
upstream lb { 
        server 10.10.57.122:80; 
        server 10.10.57.123:80; 
        fair; 
   }

时间: 2024-10-13 12:02:34

nginx负载均衡算法的相关文章

2019.9.21 Nginx负载均衡算法

1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务.如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响 weigth(轮询权值) weigth的值越大分配到的访问概率越高,主要用于后台端每台服务器性能不均衡的情况下,或者仅仅为在主从的情况下设置不同的权值,达到合理有效的利用主机资源. 2.least_conn least_connected方式可以更公平的将负载分配到多个机器上面.使用least_connected,nginx不会讲请求分发到繁忙的机器上,而且将新的请求分发到

nginx(负载均衡算法)

1.nginx负载均衡算法1)轮询(默认)每个请求按照时间顺序逐一分配到不同的后端服务,如果后端某台服务器宕机,自动剔除故障主机,使用户访问不受影响.2)weight(轮询权值)weight的值越大,访问概率越高,主要用于后端每台服务器性能不均衡的情况下.或者仅仅为在主从的情况下设置不同的权值,达到合理有效的利用主机资源.3)ip_hash每个请求按照访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题.4)fair比weig

Nginx负载均衡(一)

一.Nginx负载均衡算法 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响. 2.weight(轮询权值) weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下.或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源. 3.ip_hash 每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题. 4.

互联网研发中负载均衡算法一点探索

负载均衡在线上服务中有着很重要作用,因为一台web服务比如tomcat,能够处理qps(每秒处理请求数) 是有限的.那么就需要有有前端负载均衡服务将大的流量分发为多个后端服务进行处理. 负载均衡产品有硬件F5.有软件,早之前使用Apache较多,目前是使用Nginx多,Nginx架构实现简洁优 雅性能高.LVS.HAProxy是著名软负载工具.说到LVS是由原淘宝章文蒿(目前在滴滴公司)博士领导开发, 是到目前为止Linux内核中网络核心部分,也是国人开Linux内核最高贡献,章博士在国内技术圈

nginx 负载均衡(默认算法)

使用 nginx 的upstream模块只需要几步就可以实现一个负载均衡: 在 nginx 配置文件中添加两个server server { listen 81; server_name 192.168.1.129; root /var/www/html1; } server { listen 82; server_name 192.168.1.129; root /var/www/html2; } 使用upstream把这两个 server 绑定到一个负载sever上提供统一入口: upstr

nginx的常用负载均衡算法,分别是

随机分配,hash一致性分配,最小连接数分配,主备分配 随机,轮训,一致性哈希,主备,https://blog.csdn.net/liu88010988/article/details/51547416最小链接数分配,类似于 (第三方负载策略,fair,根据响应时间短的优先分配,https://blog.csdn.net/xyang81/article/details/51702900) https://blog.csdn.net/xyang81/article/details/51702900

Nginx之负载均衡算法

Nginx其中一大特性就是负载均衡,它可以通过扩展它代理的连接来保护你的上游服务器免于过载等问题. 负载均衡算法 upstream模块能够使用3种负载均衡: 1. 轮询 rountd-robin ):在默认情况下,使用轮询算法,它可以不需要配置指令来启用它.该算法选择下一个服务器,基于先前选择,在配置文件中哪一个是下一个服务器,以及每一个服务器的负载权重.轮询算法是基于在队列中谁是下一个的原理确保将访问量均匀地分配给每一个上游服务器的. 2. IP哈希(IP hash):通过ip_hash指令启

nginx负载均衡2

负载均衡2 网站是发展初期,nginx只代理了后端一台服务器,但由于网站名气大涨访问的人越来越多一台服务器实在是顶不住,于是我们加了多台服务器,那么多台服务器又怎么配置代理呢,这里以两台服务器为案例,为大家做演示. 1.upstream 负载均衡模块说明 案例: 下面设定负载均衡的服务器列表. upstream webservers { server 192.168.18.201 weight=1; server 192.168.18.202 weight=1; } server { liste

lvs、haproxy、nginx 负载均衡的比较分析

lvs.haproxy.nginx 负载均衡的比较分析 对软件实现负载均衡的几个软件,小D详细看了一下,从性能和稳定上还是LVS最牛,基本达到了F5硬件设备的60%性能,其他几个10%都有点困难. 不过就因为LVS忒牛了,配置也最麻烦了,而且健康检测需要另外配置Ldirector,其他HAPROXY和NGINX自己就用,而且配置超级简单. 所以小D建议,如果网站访问量不是门户级别的用HAPROXY或者NGINX就OK了,到了门户级别在用LVS+Idirector吧 哈哈 lvs和nginx都可以