转自: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负载均衡配置策略相关推荐

  1. Nginx负载均衡配置和健康检查

    Nginx负载均衡配置和健康检查 注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. nginx的强大之处不必要我细说,当初第一次接触ngin ...

  2. Nginx负载均衡配置教程-Linux

    引言 别问,问就是工作需要.让我把写的一个服务用Nginx负载均衡一下. 正好记录一下. 1. 准备 确保你的Nginx已经安装完毕,且可以正常使用.如果还没安装,请看这个链接:https://blo ...

  3. nginx负载均衡配置-windows

    http://www.2cto.com/os/201302/191589.html nginx负载均衡配置-windows 虽然说windows上的nginx在官方文档中提到"仅作为测试&q ...

  4. Nginx负载均衡配置实例

    五.Nginx负载均衡配置实例 实现效果:访问 www.123.com/edu/a.html的时候,将请求平均分配到8080和8081端口. 准备工作: 1)准备两台Tomcat服务器(端口号为808 ...

  5. Tomcat集群快速入门:Nginx负载均衡配置,常用策略,场景及特点

    Nginx负载均衡的配置,常用策略,场景,以及特点,放到这里是需要更细化的讲解,毕竟一期还没有做集群,而我们这一期做集群的时候,很多点要单独拿出来深入讲解,第一个轮询,默认的一个配置,简单也好理解,第 ...

  6. nginx - 负载均衡配置-负载均衡策略

    目录 知识点1:网站流量分析指标 什么是pv? 什么是uv? 什么是IP? 知识点2:正向代理和反向代理 知识点3:负载均衡实验 什么是负载均衡? IP地址规划: 实验拓扑图 知识点4:负载均衡策略 ...

  7. nginx负载均衡配置及测试

    1.下载两个tomcat,一个放在物理机中,另一个放在VMware中的ubuntu14.04中,并且分别在tomcat的webapps\ROOT目录下新建test.jsp文件目录,并且启动起来 tes ...

  8. NGINX负载均衡配置解析

    课程目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. 掌握lvs+nginx负载均衡拓扑结构. ...

  9. Nginx负载均衡配置实例详解

    负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦. 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可 ...

最新文章

  1. 高能预警!各路大神正火速奔赴8月WOT2016 移动互联网技术峰会
  2. zookeeper3.4.6配置实现自动清理日志
  3. mysql,int(5)、int(10)啥区别联系
  4. 决策树ID3 C4.5 CART代码
  5. 【2014-11-23】《The Hardware/Software Interface》– Section 11
  6. 信息学奥赛一本通C++语言——1044:判断是否为两位数
  7. 综合项目:Keepalived+Redis+Haproxy实现主从热备、负载均衡、秒级切换
  8. SharePoint 开发系列之三:开发工具和流程
  9. [Spring实战系列](18)注解切面
  10. Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结
  11. Charles使用外部代理服务器
  12. 【python6】快递分拣小程序
  13. CAD插件学习系列教程(一) 贱人工具箱的使用
  14. 解决redhat vmware安装后鼠标不能使用问题
  15. 计算机安全英语文献论文,计算机安全与防护学论文参考文献 计算机安全与防护英语参考文献哪里找...
  16. Android 11 WiFi热点打开与关闭接口
  17. 北邮计算机基础题目,北邮网络教育学院计算机基础题目.doc
  18. 电脑无法启动,风扇不转,电源灯一直闪烁
  19. CSS 特异性看这篇就行了
  20. 声网sdk android接入,声网 SDK 接入以及音视频通话应用开发指南

热门文章

  1. unity 让ui对齐_Unity中UI锚点的四种摆放形式
  2. Java 解一元二次方程与阶层
  3. jedis的操作和使用
  4. Win7如何禁用安全模式 如何禁止进入安全模式?
  5. python pickle反序列化漏洞_Numpy反序列化命令执行漏洞分析(CVE-2019-6446) –vr_system...
  6. 红帽首席架构师:CentOS Stream 并非要革了 CentOS 的“命”
  7. 2020年焊工(技师)考试技巧及焊工(技师)复审模拟考试
  8. Vue几种监听路由变化的方式
  9. 【ZooKeeper】大数据之分布式协调神器:ZooKeeper选举
  10. 阿里架构师学习笔记,一文掌握JavaScript基础