负载均衡是一种跨越多个应用实例,通常用来优化资源配置/最大化吞吐量/减少延迟/保证容错性配置的技术。
nginx是一种非常有效的负载均衡器,它可以给几个应用服务和分发任务,并提高nginx web应用程序的性能,可扩展及可靠性。
负载均衡的几种方式:
1.轮询(round-robin)
这个是nginx默认的负载均衡策略,下面这个配置中3个相同的应用程序服务器srv1-srv3,所有的请求通过反向代理给了myapp1组,nginx通过负载均衡来分发这些请求到三个服务上
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
2.最少连接(least-connected):nginx不会将请求分发到繁忙的机器上面,而且将新的请求分发的较清闲的机器上面
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
模块中配置least_conn指令来激活least-connected负载模式
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
4.weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
上面的配置中,如果有5个请求,有3个会分配到serv1上,有1个会分配到srv2上,有一个会分配到srv3上。如果不指定weight,默认是平的的
负载均衡包含服务器的健康检查,如果某个请求被分配到了一个服务器上,服务器无法响应,那么nginx会标记它失败了,在短时间内,nginx是不会将之后的请求分配给标记失败的服务器。max_fails指令可以设置最大失败次数,默认是1,需要先设置了fail_timeout才行。fail_timeout指定响应时间超过多少秒就将服务器标记为失败。服务器标记失败后,nginx会使用几个客户端请求优雅地探测服务器,如果探测成功,则服务器标记成功。
除了以上几种方式之外,还有fair,url_hash的方式,大家可以参考:http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html