Nginx 的 upstream 目前支持的以下几种方式的分配, 公司常用的有 weight,fair, bakcup
1 轮询 (默认)
每个请求按时间顺序逐一分配到不同的后端服务器, 如果后端服务器 down 掉, 能自动剔除.
例如:
- upstream bakend {
- server 192.168.0.88 ;
- server 192.168.0.89;
- }
- 2 weight
指定轮询几率, weight 和访问比率成正比, 用于后端服务器性能不均的情况.
例如:
- upstream bakend {
- server 192.168.0.88 weight=10;
- server 192.168.0.89 weight=3;
- }
3 least_conn 最少连接 (可结合权重使用)
例如:
- upstream bakend {
- least_conn;
- server 192.168.0.88 ;
- server 192.168.0.89;
- }
4 ip_hash -- 类似 lvs 的持续分发 (权重与 ip_hash 等定向方案冲突 )
每个请求按访问 ip 的 hash 结果分配, 这样每个访客固定访问一个后端服务器, 可以解决 session 的问题.
例如:
- upstream bakend {
- ip_hash;
- server 192.168.0.88:80;
- server 192.168.0.89:80;
- }
- 5 fair(第三方)
按后端服务器的响应时间来分配请求, 响应时间短的优先分配.
例如:
- upstream bakend {
- server 192.168.0.88:80;
- server 192.168.0.89:80;
- fair;
- }
- 6 url_hash(第三方)
按访问 url 的 hash 结果来分配请求, 使每个 url 定向到同一个后端服务器, 后端服务器为缓存时比较有效, 有助于提高缓存的命中率.
例如:
- upstream backend {
- server 192.168.0.88:3128;
- server 192.168.0.89:3128;
- hash $request_uri;
- hash_method crc32;
- }
7 backup (候补) 所以有正常节点挂光了, backup 条目才会生效. -- 类似 lvs 的 sorryserver
- upstream tomcat_upstream {
- server 192.168.0.2:8080 weight=10;
- server 192.168.0.3:8080 weight=10 backup;
- }
- 8 down (该节点标记为不可用 )
例如:
- upstream bakend {
- server 192.168.0.88 ;
- server 192.168.0.89 down;
- }
备注:
1. down 表示单前的 server 暂时不参与负载
2. weight 默认为 1.weight 越大, 负载的权重就越大.
3. max_fails : 允许请求失败的次数默认为 1. 当超过最大次数时, 返回 proxy_next_upstream 模块定义的错误
4. fail_timeout:max_fails 次失败后, 暂停的时间.
来源: http://www.bubuko.com/infodetail-2606013.html