转自:http://www.freeoa.net/osuport/cluster/nginx-load-equilibrium-configuration-strategy_1652.html
Nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
在负载反向代理的算法上,共有六种:轮询、ip_hash、weight、fair(第三方)、url_hash(第三方)、cookie。
轮询是默认的,每一个请求按顺序逐一分配到不同的后端服务器,如果后端服务器down掉了,则能自动剔除。Nginx默认采用round_robin加权算法。如果要选择其他的负载均衡算法,必须在upstream的配置上下文中通过配置指令ip_hash明确指定(该配置项最好放在其他server指令等的前面,以便检查server的配置选项是否合理)。
weight是设置权重,用于后端服务器性能不均的情况,访问比率约等于权重之比。
upstream freeoa {
server 172.18.0.5:81 weight=1;
servse 172.18.0.3:80 weight=5;
}
ip_hash 解决了session问题:每个请求按访问IP的hash结果分配,这样每个访客可以固定一个后端服务器。
upstream freeoa {
ip_hash;
server 172.18.0.5:81;
servse 172.18.0.3:80;
}
fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream freeoa {
server 172.18.0.5:81;
servse 172.18.0.3:80;
fair;
}
url_hash (第三方)按访问URL的hash结果来分配请求,使每个URL定向到同一个后端服务器,后端服务器为缓存时比较适用。另外,在upstream中加入hash语句后,server语句不能写入weight等其他参数。
upstream freeoa {
server squid_ip1:3128;
servse squid_ip2:3128;
hash $request_uri;
hash_method crc32;
}
upstream freeoa {
ip_hash;
server 172.18.0.5:81;down
servse 172.18.0.4:80 weight=2 max_fails=2 fail_timeout=30s;
servse 172.18.0.3:80 backup;
}
其它相关指令介绍
down 暂时不参与负载
weight 权重
max_fail 允许请求失败的次数,默认为1
fail_timeout max_fail次失败后,暂停的时间
backup 所有其他非backup机器down或者忙的时候,才请求backup,所以这台机器压力最轻。
nginx负载均衡模块ngx_http_upstream_module允许定义一组服务器,这组服务器可以被proxy_pass,fastcgi_pass和memcached_pass这些指令引用。
设置一个nginx负载均衡服务器的地址和其他参数。一个地址可以被指定为域名或IP地址,和一个可选的端口,或者被定为UNIX-domain套接字文件的路径,使用"unix:"作为前缀。如果端口没指定,则使用80端口。一个被解析到多个IP地址的域名本质上指定了多个服务器。
upstream name {...}
default:-
所属指令:http
定义一组用于实现nginx负载均衡的服务器,它们可以侦听在不同的端口。另外,可以混合使用侦听TCP与UNIX-domain套接字文件。默认情况下,请求被分散在使用加权轮询的nginx负载均衡服务器上。
语法:server 地址 [参数];
default:-
所属指令:upstream
可以定义下面的参数:
weight=number
设置服务器的权限,默认是1
max_fails=number
设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,停机时间是fail_timeout设置的时间。默认情况下,不成功连接数被设置为1。被设置为零则表示不进行链接数统计。那些连接被认为是不成功的可以通过proxy_next_upstream, fastcgi_next_upstream,和memcached_next_upstream指令配置。http_404状态不会被认为是不成功的尝试。
fail_time=time
设置多长时间内失败次数达到最大失败次数会被认为服务器停机了服务器会被认为停机的时间长度,默认情况下,超时时间被设置为10S。
max_fails 的默认值为 1,fail_timeout 的默认值是 10s。传输失败的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 响应时间。
backup
标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。当所有的非备机(non-backup)都宕机(down)或者繁忙(busy)的时候,就只使用由 backup 标注的备机。必须要注意的是,backup 不能和 ip_hash 关键字一起使用。
down
标记服务器永久停机了;与指令ip_hash一起使用。
语法:ip_hash;
default:-
所属指令:upstream
指定nginx负载均衡器组使用基于客户端ip的负载均衡算法。IPV4的前3个八进制位和所有的IPV6地址被用作一个hash key。这个方法确保了相同客户端的请求一直发送到相同的服务器上除非这个服务器被认为是停机。这种情况下,请求会被发送到其他主机上,然后可能会一直发送到这个主机上。如果nginx负载均衡器组里面的一个服务器要临时移除,它应该用参数down标记,来防止之前的客户端IP还往这个服务器上发请求。
注意:在版本1.3.2中开始支持IPV6地址,在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
语法:keepalive 连接数;
default:-
所属模块:upstream
这个指令在版本1.1.4中出现
nginx负载均衡器的活动链接数缓存。
连接数(keepalive的值)指定了每个工作进程中保留的持续连接到nginx负载均衡器缓存的最大值。如果超过这个设置值的闲置进程想链接到nginx负载均衡器组,最先连接的将被关闭。
nginx负载均衡器内置变量(Embedded Variables)
nginx负载均衡模块ngx_http_upstream_module支持下列内置变量:
$upstream_addr
保存一个服务器的IP地址和端口号或者UNIX-domain套接字文件的路径。如果在处理请求过程中使用了多个服务器,那么它们的地址将以逗号分割,例如 :“192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock”。如果一个内置的从一个服务器组到另一个服务器组的重定向使用X-Accel-Redirect” or error_page ,那么那些服务器组以冒号隔开,例如“192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80”。
$upstream_response_time
保存nginx负载均衡服务器响应时间,以毫秒计。多个响应也以逗号和冒号隔开。
$upstream_status
保存nginx负载均衡服务器响应代码。多个响应代码也以逗号或冒号隔开。
$upstream_http_
保存nginx负载均衡服务器响应头字段。例如,the “Server” response header field is made available through the $upstream_http_server variable.注意,只有最后一个服务器响应头字段被保存。
后面介绍一种基于cookie的负载均衡模块-sticky
像一个局域网的客户同时访问服务器,导致出现服务器分配不均衡,以及不能保证每次访问都粘滞在同一台服务器。如果基于cookie的, 每台电脑都会有不同的cookie,在保持长连接的同时还保证了服务器的压力均衡,nginx sticky值得推荐。
如果浏览器不支持cookie,那么sticky不生效,毕竟整个模块是给予cookie实现的。
配置nginx sticky
nginx 的upstream使用sticky,如下
upstream freeoa{
sticky;
server 192.168.100.209:80;
server 192.168.100.225:80;
}
sticky其它语法
sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];
name: 可以为任何的string字符,默认是route
domain:哪些域名下可以使用这个cookie
path:哪些路径对启用sticky,例如path/test,那么只有test这个目录才会使用sticky做负载均衡
expires:cookie过期时间,默认浏览器关闭就过期,也就是会话方式。
no_fallbackup:如果设置了这个,cookie对应的服务器宕机了,那么将会返回502(bad gateway 或者 proxy error),建议不启用
sticky expires用法
upstream freeoa {
sticky expires=1h;
server 172.18.0.209:80;
server 172.18.0.225:80;
}
注意:sticky模块不能与ip_hash同时使用。
参考链接:
Nginx学习之十二-负载均衡-加权轮询策略剖析
HttpUpstreamModule
相关推荐
**Nginx负载均衡配置详解** Nginx是一款高性能的HTTP和反向代理服务器,它以其轻量级、高并发的特性在Web服务领域广泛应用。其中,Nginx的负载均衡功能是其重要特性之一,它能有效地分散网络流量,提高系统可用性和...
在传统的nginx负载均衡配置中,并未直接提供后端服务器健康检查的功能,但nginx提供了几个重要的指令来帮助我们设置超时和重试机制,来间接保障服务的可用性。例如,proxy_connect_timeout指令用于设置nginx尝试连接...
下面详细解释Nginx负载均衡的配置方法以及负载均衡策略。 首先,要配置Nginx与Tomcat实现负载均衡,需要准备两个Tomcat实例,每个实例可以部署一个简单的Web项目,例如通过在页面上标注不同的端口号,以便区分它们...
**Nginx负载均衡配置详解** 在高并发的互联网应用环境中,服务器的性能优化和负载分发至关重要。这里我们探讨的是如何使用Nginx作为反向代理和负载均衡器,来提升系统的整体处理能力,特别是在处理静态内容和优化...
### Nginx负载均衡实现 #### 一、负载均衡概念及必要性 负载均衡是一种用于在网络环境中分散工作负载的技术,通常用于改善网络性能、提高可用性和最大化资源利用。当单台服务器难以应对高流量和并发请求时,负载...
### Nginx负载均衡配置详解 #### 一、负载均衡概念与原理 负载均衡(Load Balancing)是指将网络中的工作负载分散到多个计算资源上处理的技术,旨在提高响应速度和服务质量,同时确保系统的稳定性和可靠性。在Web...
在构建高性能、高可用性的Web服务时,"redis+tomcat+nginx负载均衡配置"是一个常见且有效的架构模式。这个组合充分利用了各个组件的优势,确保系统稳定、响应快速,并能够处理大量的并发请求。以下是关于这个配置的...
### NGINX负载均衡配置详解 #### 一、负载均衡概念与重要性 负载均衡是分布式计算中的一个重要概念,主要用于在网络中将工作负载分布到多个计算机、网络链接、CPU或其他资源上,从而优化资源利用、最大吞吐量、...
【标题】:“Nginx负载均衡部署” 在现代Web服务架构中,负载均衡扮演着至关重要的角色,它能够有效地分发网络流量,提高系统可用性和响应速度,防止单点故障。Nginx作为一款高性能的HTTP和反向代理服务器,常常被...
本文将详细解析"Linux下Nginx负载均衡"这一主题,包括Nginx的基本概念、配置原理以及如何在Linux系统中设置负载均衡。 Nginx是一款高性能的HTTP和反向代理服务器,同时也是一款邮件协议代理服务器。它的主要特点是...
**负载均衡策略**: - **轮询**:默认情况下,Nginx采用简单的轮询算法来平衡流量。 - **权重分配**:通过`weight`参数可以根据后端服务器的处理能力来调整分配的请求量。 - **基于IP的哈希**:使用`ip_hash`指令...
Nginx的负载均衡策略配置是其反向代理功能的一个重要组成部分,以下详细介绍了几种常见的Nginx负载均衡策略。 首先,轮询策略是最基本的一种负载均衡方法,也是Nginx默认的负载方式。在这种策略下,Nginx会按照请求...
首先,让我们了解Nginx的负载均衡配置。Nginx支持多种负载均衡策略,包括轮询(round-robin)、最少连接数(least connections)、IP哈希(ip_hash)等。以轮询为例,配置如下: ```nginx http { upstream backend...
3. Nginx负载均衡配置:学习Nginx的负载均衡器配置,包括轮询、最少连接、IP哈希等多种策略,以及如何根据业务需求选择合适的策略。 4. Keepalived与Nginx的集成:如何结合两者实现高可用性和负载均衡,确保即使在...
**Nginx负载均衡配置详解** Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,常被用于实现高并发的网络服务。它以其低内存占用、高效的处理能力以及灵活的配置机制,被众多大型互联网公司如百度、京东、...
### Nginx+Tomcat负载均衡配置教程 #### 一、Nginx 安装与配置 **1. 下载并安装Nginx** - **下载Nginx**:前往Nginx官方网站下载适合您操作系统的最新版本。推荐下载稳定版以确保运行稳定。 - **解压文件**:将...
以下是配置Nginx负载均衡的基本步骤: 1. **安装Nginx**:在你的服务器上安装Nginx,确保它能够正常启动和运行。 2. **配置Nginx**:打开Nginx的配置文件(通常为`/etc/nginx/nginx.conf`或`/usr/local/nginx/conf...