`
kavy
  • 浏览: 865749 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nginx负载均衡配置策略

 
阅读更多

转自: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

分享到:
评论

相关推荐

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

    02Nginx负载均衡策略配置

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

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

    Nginx负载均衡特点

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

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

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

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

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

    Nginx+Tomcat负载均衡

    3、Nginx+Tomcat负载均衡配置 首先创建两个文件,这两个文件 我来提供,将这两个文件拷入Nginx的conf文件夹下 1.proxy.conf 文件内容 #负责代理转发 proxy_redirect off; proxy_set_header Host $host; proxy_set_...

    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 代理问题,负载均衡问题

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

    nginx搭建配置详细说明

    8.4. 负载均衡配置 9. 安装PHP 10. PHP-FPM 10.1. 什么是PHP-FPM 10.2. 为什么要是使用PHP-FPM 10.3. 安装并且启动PHP-FPM 10.3.1. 安装 10.3.2. fpm的配置 10.3.3. 启动和停止 10.3.4. 自启动php-fpm ...

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

    二、nginx支持的三种负载均衡策略 轮询:将请求依次轮询发给每个服务器。 最少链接:将请求发送给持有最少活动链接的服务器。 ip哈希:通过哈希函数决定请求发送给哪个服务器。 权重:服务器的权重越高,处理请求的...

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

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

    Nginx+SpringBoot实现负载均衡的示例

    负载均衡介绍 在介绍Nginx的负载均衡实现...比如我有3个服务器,分别为A、B、C,然后使用Nginx进行负载均衡,使用轮询策略,此时如果收到了9个请求,那么会均匀的将这9个请求分发给A、B、Cf服务器,每一个服务器处理3

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

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

    nginx视频教程.txt

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

    CentOS基于nginx反向代理实现负载均衡的方法

    本文实例讲述了CentOS基于nginx反向代理实现负载均衡的方法。分享给大家供大家参考,具体如下: nginx做负载均衡的优点: 1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的...

    Nginx反向代理服务器及负载均衡服务配置实战1

    前言:什么是Nginx?Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,能够支持高

    程序员5个刷题网站-tlmall-springboot-ii:Java企业级电商项目演进——Tomcat集群和Redis分布式

    Nginx负载均衡配置策略 | +- nginx.conf // Nginx主配置文件 +- questions.md // 项目中遇到问题汇总 +- pom.xml // pom Maven依赖 +- README.md // readme文件 +- src +- main +- j

    深入剖析Nginx

    然后,分别深入分析了Nginx的进程模型、数据结构、配置指令、主要功能模块、I/O事件处理、变量机制、客户端请求过程、Filter模块实例、负载均衡策略以及Handler模块等。附录部分提供了Nginx的编译模块、运行配置等...

    Nginx开发从入门到精通

    3. Nginx反向代理:学习如何使用Nginx实现反向代理,代理upstream服务器,配置负载均衡和健康检查机制。 4. Nginx缓存机制:理解Nginx的缓存原理,配置缓存策略,实现浏览器和服务器端缓存,提高Web应用程序的性能。

    【Java面试系列】Nginx.pdf

    为什么要用Nginx? 为什么Nginx性能这么高...Nginx负载均衡的算法怎么实现的?策略有哪些? 在Nginx中,如何使用未定义的服务器名称来阻止处理请求? 如何防止DDoS攻击 如何查看Nginx的日志文件? ———————————

Global site tag (gtag.js) - Google Analytics