负载均衡技术是在多个应用实例之间的通用技术,用于优化资源利用,增大吞吐量,减少延迟,和确保故障容忍配置。
很可能使用Nginx作为一个高效的HTTP负载均衡器分发请求到不同的应用服务器,改善web应用性能,扩展性和可靠性。
1、负载均衡方式
Nginx支持下面的负载均衡策略
round-robin 对应用服务器的请求以轮询方式
least-connected 下一个请求分配到拥有最少活跃连接数的服务器。
ip-hash 一个hash函数,用于决定哪一个服务器处理下一个请求,基于客户端的IP地址。
2、默认的负载均衡配置
最简单的nginx负载均衡看起来就像这样
http {
upstreammyapp {
serversrv1.example.com;
serversrv2.example.com;
serversrv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp
}
}
}
上面的例子中,有三个相同应用实例运行在srv1-srv3.当负载均衡方法没有指定的时候,默认使用round-robin。所有的请求被代理到myapp服务器组,nginx应用HTTP负载均衡方法分发请求。
在nginx中实现的反向代理包括对HTTP,HTTPS,FastCGI,uwsgi,SCGI和memcached的负载均衡。
想要配置HTTPS的负载均衡,只需要使用https作为协议。
当配置FastCGI,uwsgi,SCGI或memcached的负载均衡的时候,使用fastcgi_pass,uwsgi_pass,scgi_pass和memcached_pass指令。
3、最少连接负载均衡
另一个负载均衡方式是least-connected。least-connected控制应用的负载使用相对公平的方式当请求需要长时间才能完成的时候。
使用least-connected负载均衡方式,nginx将不会在负载很忙的服务器上增加请求,而是分发新的请求到不忙的服务器上面。
least-connected负载均衡方式在nginx中,当least conn指令用于服务器组配置部分时被激活upstream myapp1 {
least_conn;
serversrv1.example.com;
serversrv2.example.com;
serversrv3.example.com;
}
4、会话保持
请记住一点是使用round-robin或least-connected方式,后来的客户端请求都有可能分发到不同的服务器上。不能保证同一个客户端一直指向同一个服务器。
如果需要绑定客户端到特定的应用服务器,也就是让客户端的回话,粘住,持久的,一直选择特定的一个服务器。可以选择使用ip-hash负载均衡方式。
使用ip-hash,客户端的IP地址用作hash key,决定哪一个服务器被选中来处理客户端的请求。这个方式确保相同客户端的请求一直定向到相同的服务器,除非这个服务器不可用了。
想配置IP-hash负载方式,只需要添加ip_hash指令在服务器组配置里面。
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
5、权重负载均衡
使用服务器的权重来影响nginx的负载均衡算法也是有可能的。
在上面的例子中,服务器权重都没有配置,也就意味着所有知道的服务器都被同等对待对于特定的负载均衡算法来说。
使用round-robin的话,这也意味着服务器之间会分发相同的请求数量。
当weight参数加在指定服务器上的时候,weight也被看做负载均衡决定的部分。
upstream myapp1 {
serversrv1.example.com weight=3;
serversrv2.example.com;
serversrv3.example.com;
}
使用这种配置的话,每5个新的请求到来,3个请求会分发给srv1,一个给srv2,一个给srv3。
在较新版本的nginx中使用weight在ip-hash和least-connected负载均衡方式也是可以的。
6、健康检查
在nginx实现反向代理的时候,也可以实现健康状态检查,如果服务器响应错误了,nginx会把这个服务器标记为faild,然后试着避免挑选这个服务器处理后面的请求。
max_fails指令设置了在fail_timeout中尝试访问服务器的最大失败次数,默认max_fails设为1.当设为0的时候,这个服务器将不会进行健康检查。fail_timeoutcanshu定义了多长时间之内这个服务器被标记为失败。在fail_timeout间隔后,随着服务器的失败,ngixn会尝试平缓的使用客户端请求探测服务器,如果探测成功了,那么这个服务器被标记为活着的。
0
本帖最后由 乐橙306 于 2016-2-4 22:02 编辑
1.你看的这篇文档有问题
2.你没做实验验证文档所写的内容
3.看过文档之后要有自己的想法 然后用自己的话写成文档才是自己的东西
4.话不好听 想想吧
2015.12.7 nginx部署负载均衡
1.你看的这篇文档有问题
2.你没做实验验证文档所写的内容
3.看过文档之后要有自己的想法 然后用自己的话写成文档才是自己的东西
4.话不好听 想想吧
2015.12.7 nginx部署负载均衡
- http://note.youdao.com/share/?id=1a4fefec0c7422bc04e0ce2fb6659789&type=note
0
在nginx实现反向代理的时候,也可以实现健康状态检查,如果服务器响应错误了,nginx会把这个服务器标记为faild,然后试着避免挑选这个服务器处理后面的请求。
max_fails指令设置了在fail_timeout中尝试访问服务器的最大失败次数,默认max_fails设为1.当设为0的时候,这个服务器将不会进行健康检查。fail_timeoutcanshu定义了多长时间之内这个服务器被标记为失败。在fail_timeout间隔后,随着服务器的失败,ngixn会尝试平缓的使用客户端请求探测服务器,如果探测成功了,那么这个服务器被标记为活着的。
不行的
max_fails指令设置了在fail_timeout中尝试访问服务器的最大失败次数,默认max_fails设为1.当设为0的时候,这个服务器将不会进行健康检查。fail_timeoutcanshu定义了多长时间之内这个服务器被标记为失败。在fail_timeout间隔后,随着服务器的失败,ngixn会尝试平缓的使用客户端请求探测服务器,如果探测成功了,那么这个服务器被标记为活着的。
不行的
0
nginx的upstream目前支持6种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
4、最少连接负载均衡
另一个负载均衡方式是least-connected。least-connected控制应用的负载使用相对公平的方式当请求需要长时间才能完成的时候。
使用least-connected负载均衡方式,nginx将不会在负载很忙的服务器上增加请求,而是分发新的请求到不忙的服务器上面。
least-connected负载均衡方式在nginx中,当least conn指令用于服务器组配置部分时被激活upstream myapp1 {
least_conn;
serversrv1.example.com;
serversrv2.example.com;
serversrv3.example.com;
}
5、fair(第三方) github上的第三方作者提供 https://github.com/gnosek/nginx-upstream-fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}
6、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
tips:
upstream bakend{#定义负载均衡设备的Ip及设备状态
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
4、最少连接负载均衡
另一个负载均衡方式是least-connected。least-connected控制应用的负载使用相对公平的方式当请求需要长时间才能完成的时候。
使用least-connected负载均衡方式,nginx将不会在负载很忙的服务器上增加请求,而是分发新的请求到不忙的服务器上面。
least-connected负载均衡方式在nginx中,当least conn指令用于服务器组配置部分时被激活upstream myapp1 {
least_conn;
serversrv1.example.com;
serversrv2.example.com;
serversrv3.example.com;
}
5、fair(第三方) github上的第三方作者提供 https://github.com/gnosek/nginx-upstream-fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}
6、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
tips:
upstream bakend{#定义负载均衡设备的Ip及设备状态
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
编辑回复