Nginx负载均衡策略

120 阅读2分钟

Nginx负载均衡策略

负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:

upstream myserver {
    #动态服务器组
  server localhost:8080; #tomcat 7.0
  server localhost:8081; #tomcat 8.0
  server localhost:8082; #tomcat 8.5
  server localhost:8083; #tomcat 9.0
}

在upstream模块配置完成后,要让指定的访问反向代理到服务器列表:

#其他页面反向代理到tomcat容器
location ~ .*$ {
  index index.jsp index.html;
  proxy_pass http://myserver;   这里的myserver和上面的upstream模块定义的名字一样
}
  • 轮询

upstream的默认负载均衡策略

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

  • Weight权重

权重方式,在轮询策略的基础上指定轮询的几率

weight 代表权重默认为 1,权重越高被分配的客户端越多

upstream myserver {
  server localhost:8080  weight=2; #tomcat 7.0
  server localhost:8081; #tomcat 8.0
  server localhost:8082; #tomcat 8.5
  server localhost:8083; #tomcat 9.0
}

在该例子中,weight参数用于指定轮询几率,;weight的数值与访问比率成正比,比如Tomcat 7.0被访问的几率为其他服务器的两倍。

注意:

  1. 权重越高分配到需要处理的请求越多。
  2. 此策略可以与least_conn和ip_hash结合使用。
  3. 此策略比较适合服务器的硬件配置差别比较大的情况
  • ip_hash

指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

upstream myserver {
  ip_hash; #保证每个访客固定访问一个后端服务器
  server localhost:8080  weight=2; #tomcat 7.0
  server localhost:8081; #tomcat 8.0
  server localhost:8082; #tomcat 8.5
  server localhost:8083; #tomcat 9.0
}
  • ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash

  • 当有服务器需要剔除,必须手动down掉

  • fair(第三方)

需要安装第三方插件

按照服务器端的响应时间来分配请求,响应时间短的优先分配。

#动态服务器组

upstream myserver {
  server localhost:8080; #tomcat 7.0
  server localhost:8081; #tomcat 8.0
  server localhost:8082; #tomcat 8.5
  server localhost:8083; #tomcat 9.0
  fair;  #实现响应时间短的优先分配
}