参考:https://www.jianshu.com/p/4af1940bd251

负载均衡策略

负载均衡的策略可以大致分为两大类:内置策略 和扩展策略
内置策略:一般会直接编译进Nginx内核,常用的有、轮询、ip hash、最少连接
扩展策略:fair、url hash等

内置策略

轮询加权

轮询策略,可以加权

  1. http {
  2. # ... 省略其它配置
  3. upstream tomcats {
  4. server 192.168.0.100:8080 weight=1 fail_timeout=20s;
  5. server 192.168.0.101:8080 weight=2 fail_timeout=20s;
  6. }
  7. server {
  8. server_name www.searchinfogo.com
  9. listen 80;
  10. location / {
  11. proxy_pass http://tomcats;
  12. }
  13. }
  14. # ... 省略其它配置
  15. }

ip hash

主要用于解决 session 的问题,如购物车类的应用

  1. http {
  2. # ... 省略其它配置
  3. upstream tomcats {
  4. server 192.168.0.100:8080;
  5. server 192.168.0.101:8080;
  6. ip_hash;
  7. }
  8. server {
  9. server_name www.searchinfogo.com
  10. listen 80;
  11. location / {
  12. proxy_pass http://tomcats;
  13. }
  14. }
  15. # ... 省略其它配置
  16. }

最少连接(least_conn)

下一个请求将被分派到活动连接数量最少的服务器。

  1. http {
  2. # ... 省略其它配置
  3. upstream tomcats {
  4. server 192.168.0.100:8080;
  5. server 192.168.0.101:8080;
  6. least_conn;
  7. }
  8. server {
  9. server_name www.searchinfogo.com
  10. listen 80;
  11. location / {
  12. proxy_pass http://tomcats;
  13. }
  14. }
  15. # ... 省略其它配置
  16. }

扩展策略

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配,能够最大化地平衡各后端服务器的压力,可以适用于后端服务器性能不均衡的情况,也可以防止某台后端服务器性能不足的情况下还继续接收同样多的请求从而造成雪崩效应。

  1. http {
  2. # ... 省略其它配置
  3. upstream tomcats {
  4. server 192.168.0.100:8080;
  5. server 192.168.0.101:8080;
  6. fair;
  7. }
  8. server {
  9. server_name www.searchinfogo.com
  10. listen 80;
  11. location / {
  12. proxy_pass http://tomcats;
  13. }
  14. }
  15. # ... 省略其它配置
  16. }

url hash

适用于后端服务器能够将 URL 的响应结果缓存的情况

  1. http {
  2. # ... 省略其它配置
  3. upstream tomcats {
  4. server 192.168.0.100:8080;
  5. server 192.168.0.101:8080;
  6. hash $request_uri;
  7. hash_method crc32;
  8. }
  9. server {
  10. server_name www.searchinfogo.com
  11. listen 80;
  12. location / {
  13. proxy_pass http://tomcats;
  14. }
  15. }
  16. # ... 省略其它配置
  17. }

参数意思:
weight=1 (weight 默认为1.weight越大,负载的权重就越大)
down (down 表示单前的server暂时不参与负载)
backup (其它所有的非backup机器down或者忙的时候,请求backup机器)
max_fails 允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails次失败后,暂停的时间

重启

  1. nginx -s reload #重启nginx