Nginx的负载均衡策略分为内置策略和扩展策略两种。其中内置策略有轮询、加权轮询、ip_hash;扩展策略有fail、url_hash等,需要安装对应的软件包。
一、内置策略(默认已编译进nginx内核)
1、轮询(默认)
概述:
每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。
实现:
http {
#设置负载服务器列表
upstream server_lb {
server 10.19.182.1:8081;
server 10.19.182.2:8081;
server 10.19.182.3:8081 down; // 表示当前的server暂时不参与负载均衡
server 10.19.182.4:8081 backup; // 备机
...
}
server {
#设置代理服务器
location / {
proxy_pass http://server_lb;
}
}
}
2、加权轮询(weighted round robin)
概述:
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
实现:
http {
upstream webserver {
server 192.168.1.1:8080 weight=2 max_fails=3 fail_timeout=10s;
server 192.168.1.2:8080 weight=1 max_fails=3 fail_timeout=10s;
server 192.168.1.3:8080 backup;
}
server {
listen 8080;
server_name www.suifeng.org 192.168.1.4;
index index.html index.htm index.php index.jsp;
location / {
proxy_pass http://webserver;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
}
}
3、ip_hash
概述:
每个请求按访问IP的哈希结果分配,来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。
实现:
upstream app1 {
ip_hash;
server 10.19.182.1;
server 10.19.182.2;
}
二、扩展策略
1、fair(安装upstream_fair模块)
概述:
根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。
实现:
upstream backend {
server server1;
server server2;
fair;
}
2、url_hash(安装Nginx的hash软件包)
概述:
按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。
实现:
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}