Nginx之负载均衡算法

Nginx其中一大特性就是负载均衡,它可以通过扩展它代理的连接来保护你的上游服务器免于过载等问题。

负载均衡算法

upstream模块能够使用3种负载均衡:

1. 轮询 rountd-robin ):
在默认情况下,使用轮询算法,它可以不需要配置指令来启用它。该算法选择下一个服务器,基于先前选择,在配置文件中哪一个是下一个服务器,以及每一个服务器的负载权重。轮询算法是基于在队列中谁是下一个的原理确保将访问量均匀地分配给每一个上游服务器的。
2. IP哈希(IP hash):
通过ip_hash指令启用它,从而将某些IP地址映射到同一个上游服务器。Nginx通过IPv4地址的前3个字节或整个IPv6地址作为哈希键来实现,同一个IP地址池地址总是被映射到同一个上游服务器,所以,这个机制的目的不是要确保公平分配给每一个上游服务器,而是在客户端和上游服务器之间实现一致映射,在上游服务器中,主要应用在具有会话的应用中非常有用。
3. 最少连接数(Least Connection):
通过least_conn指令启用,该算法的目的是通过选择一个活跃的最少连接数服务器,然后将负载均衡均匀分配给上游服务器。如果上游服务器服务器的处理器能力不相同,那么可以为server指令使用weight参数来控制权重,该算法主要应用在不同服务器配置中。

示例如下:

    upstream servers {
            server 127.0.0.1:8080 weith=1 max_fails=3 fail_timeout=1;
            server 127.0.0.1:8081 weith=2 max_fails=3 fail_timeout=1;
            server 127.0.0.1:8082 down;     # 下线(不可用)
            server 127.0.0.1:8083 backup;   # 备份
    }
    server {
            location / {
                # 获取客户端真实ip地址
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                # 针对超时无响应的上游服务器应该被迅速处理掉,具体看应用程序
                proxy_connect_timeout   5;
                proxy_read_timeout      10;
                proxy_send_timeout      10;
                proxy_pass http://servers;
            }
    }

upstream模块还能够为每一个上游服务器设置状态值,这些状态值的含义分别例如以下:

  • down 表示该server临时不參与负载;
  • weight 默认值为1,当weight越大,负载的权重就越大;
  • max_fails 表示同时请求失败的次数为1,当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
  • fail_timeout 表示max_fails次失败后,暂停的时间;
  • backup 表示当其他全部的非backup机器down或者忙的时候,才会去请求backup机器,所以这台机器压力会最轻。

原文地址:https://blog.51cto.com/10316297/2372003

时间: 2024-10-20 09:50:44

Nginx之负载均衡算法的相关文章

nginx(负载均衡算法)

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

Nginx作为负载均衡服务器应用

QQ群:179242260 Nginx作为负载均衡服务器应用 Nginx的负载均衡功能是通过upstream命令实现的,因此它的负载均衡机制实现比较简单,是一个基于内容和应用的7层交换负载均衡的实现.Nginx负载均衡默认对后端服务器有健康检测能力,但是监测能力较弱,仅限于端口检测,在后端服务器比较少的情况下(10台以下)负载均衡能力表现突出.而对于有大量后端节点的负载应用,由于所有访问请求都从一台服务器进出,容易发生请求堵塞进而引发连接,因此无法充分发挥后端服务器的性能. 1:Nginx的负载

[转帖]利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞

利用nginx实现负载均衡 | 哈希算法,sticky模块实现session粘滞 2018年08月02日 10:06:03 Minza 阅读数 483 https://blog.csdn.net/ha_weii/article/details/81350087 学习一下如何使用sticky 版权声明:创作不易,转载请注明出处 https://blog.csdn.net/ha_weii/article/details/81350087 一,普通的负载均衡 1,启动nginx服务器 之前已经把/us

Nginx做负载均衡时session共享问题详解

用nginx做负载均衡时,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 再者Nginx连接Memcached集群时,Nignx的请求从memcached服务器中根据key获得了value则直接返回value,如果没有获得到value则去MySQL中查询再返回. location / { set $memcached_key "$request_uri"; #设置请求memcached服务器的key memca

基于nginx的负载均衡概述与实现

前言: 前面我们提到了lvs和keepalived结合起来的高可用负载均衡,lvs根据原目ip地址及端口将其调度转发至后端 的某个主机,是一种四层的实现,因为lvs是四层的,所以不会受限于套接字或打开的文件数量.不过,如果我们想实现一些更高阶的功能,lvs就显得力不从心了,比如基于uri,cookie,header头部信息的负载均衡,此时我们就可以选择一些7层的负载均衡实现,比如nginx或haproxy等.本次我们就先来讲讲nginx的负载均衡把~ 正文: 其实,如果对lvs的各种类型和调度有

haproxy/nginx+keepalived负载均衡 双机热备 邮件报警 实战及常见问题

Haproxy 做http和tcp反向代理和负载均衡keepalived 为两台 Haproxy 服务器做高可用/主备切换.nginx   为内网服务器做正向代理,如果业务需求有变化,也可以部分替代 haproxy 做 http 反向代理.如果发生主备切换,向指定邮箱发送报警邮件. 本文比较裹脚布,没耐心的就别看了. 一.两台服务器,系统 CentOS6主机名        外网IP        内网IPlbserver_01  202.1.1.101   10.1.1.11/24lbserv

Nginx学习——负载均衡

负载均衡 Nginx提供了较多的负载均衡策略,包括加权轮询.IP哈希.fair.一致哈希等.前两个是Nginx官方源码内置的策略,而后面几个都是第三方模块,所以下面我们重点来看前两个内置策略. Nginx默认采用round_robin加权算法,如果要采用IP哈希策略,那么必须在Nginx的配置文件里通过配置指令ip_hash明确指定. 当整个http配置块被Nginx解析完毕之后,会调用各个http模块对应的初始函数.对于模块ngx_http_upstream_module而言,对应的main配

Nginx的负载均衡 - 整体架构

Nginx版本:1.9.1 我的博客:http://www.cnblogs.com/yyjie 什么是负载均衡 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务,这就是所谓的集群. 负载均衡服务器,就是用来把经过它的流量,按照某种方法,分配到集群中的各台服务器上.这样一来不仅可以承担 更大的流量.降低服务的延迟,还可以避免单点故障造成服务不可用.一般的反向代理服务器,都具备负载均衡的功能. 负载均衡功能可以由硬件来提供,比如以前的F5设备.也可以由软件来提供,

负载均衡算法及手段

负载均衡器 可以是专用设备,也可以是在通用服务器上运行的应用程序. 分散请求到拥有相同内容或提供相同服务的服务器. 专用设备一般只有以太网接口,可以说是多层交换机的一种. 负载均衡器一般会被分配虚拟IP地址,所有来自客户端的请求都是针对虚拟IP地址完成的.负载均衡器通过负载均衡算法将来自客户端的请求转发到服务器的实际IP地址上. 负载均衡算法 private Map<String,Integer> serverMap = new HashMap<String,Integer>(){