三种负载方式
- round-robin:请求以轮询,轮转的方式分发到服务器
- least-connected:下一个请求被分发到拥有最少活动连接数的服务器
- ip-hash:使用一个哈希函数,基于客户端 ip 地址判断下一个请求应该被分发到哪台服务器
配置 Nginx
在
http节点下,添加upstream节点1
2
3
4upstream web_backend {
server [ip:port];
server [ip:port];
}在
server节点下的location /子节点中添加1
2proxy_set header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web_backend;
现在负载均衡初步完成,nginx 按照默认方式进行负载处理,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,则 nginx 自动剔除掉。
优点:简便、成本低廉、部署简单
缺点:可靠性低、负载不均衡
适用性:图片服务器或纯静态页面服务器
upstream 其他策略
down不参与服务器,手动表示服务器宕机1
2
3
4upstream web_backend {
server [ip:port] down;
server [ip:port];
}weight权重策略,按比值分配1
2
3
4upstream web_backend {
server [ip:port] weight = 5;
server [ip:port] weight = 10;
}last-connected最少连接数策略1
2
3
4
5upstream web_backend {
least-conn;
server [ip:port];
server [ip:port];
}ip_hash来访 IP 策略1
2
3
4
5upstream web_backend {
ip_hash;
server [ip:port];
server [ip:port];
}fair第三方,按服务器响应时间来分配1
2
3
4
5upstream web_backend {
server [ip:port];
server [ip:port];
fair;
}url_hash第三方,按 url 的 hash 来分配1
2
3
4
5
6upstream web_backend {
server [ip:port];
server [ip:port];
hash $request_uri;
hash_method crc32;
}backup只有其他服务器宕机才访问该服务器1
2
3
4upstream web_backend {
server [ip:port] backup;
server [ip:port];
}max_fails允许请求失败的次数,默认为 1。当超过最大次数时,返回 proxy_next_upstream 模块定义的错误fail_timeoutmax_fails 规定的次数达到后,暂停的时间