目录

一、描述

二、nginx 五种分配方式

1.轮询(默认)

2.weight

3.ip_hash

4.fair(第三方)

5.url_hash(第三方)

三、参数描述

四、cookie分流

五、Nginx 其他参考


一、描述

     公司最近有个项目在运行时,用户频繁请求,用户量过多,导致socket连接拒绝及超时等等。又无法紧急修改该项目。所以想到使用nginx进行 解决,部署多服务。但是这样一来又有一个问题,就是同一用户 的 session 和 cookie 如果使用 nginx 的轮询,会导致 很多问题,cookie与session不存在。又考虑到 使用 ip_hash ,但是 ip_hash有一个弊端,就是 ip_hash的算法机制,导致 同一局域网所在的 用户都会分配到 同一服务上,又看了 服务日志,发现 有好多请求的地址 前三位相同。所以 研究决定使用 cookie分流。

    nginx 的作用及基本使用不在这里介绍了。

二、nginx 五种分配方式

1.轮询(默认)

    每个请求按照时间顺序,按照顺序分配到不同服务器。如果 服务器 down(挂)掉,能自动清除。

upstream xxx {
         server 192.168.0.101:8808;
         server 192.168.0.108:8808;
 }

2.weight

    几率查询,和你 weight 指定的比例相关,和访问比率成正比。大多用于后端服务性能不均的情况下。

这里 weight 比例为 1:2,所以101的压力基本上是108的两倍。

upstream xxx {
         server 192.168.0.101:8808 weight=1;
         server 192.168.0.108:8808 weight=2;
     }

3.ip_hash

   每个请求按照访问ip的hash结果进行固定访问。可以解决session和cookie共享问题。

upstream xxx {
         ip_hash;
         server 192.168.0.101:8808;
         server 192.168.0.108:8808;
     }

注意:

      这里会产生一种问题:Nginx和客户端处于同一个局域网,使用ip_hash负载均衡策略,不同客户端的请求全部都分发到同一个后台服务器。

     原因:主要原因就是,局域网前三段ip相同,这样Nginx在ip_hash(hash值计算)的时候,就将该类所有ip都转发到一个后端了。

4.fair(第三方)

官网:

    The Nginx fair proxy balancer enhances the standard round-robin load balancer provided
    with Nginx so that it will track busy back end servers (e.g. Thin, Ebb, Mongrel)
    and balance the load to non-busy server processes.

    简单翻译一下,fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。

upstream backserver { 
fair; 
server 192.168.0.14; 
server 192.168.0.15; 
}

5.url_hash(第三方)

     按访问url的hash结果来分配请求, 使每个url定向到同一个后端服务器, 后端服务器为缓存时比较有效.

    upstream xxx {                  server 192.168.0.101:8808;         server 192.168.0.108:8808;         hash    $request_uri;     }

三、参数描述

  • down 表示单前的server暂时不参与负载
  • weight 默认为1.weight越大, 负载的权重就越大.
  • max_fails 许请求失败的次数默认为1.当超过最大次数时, 返回proxy_next_upstream 模块定义的错误
  • fail_timeout:max_fails max_fails 次失败后, 暂停的时间.
  • backup 其它所有的非backup机器down或者忙的时候, 请求backup机器. 所以这台机器压力会最轻.
    nginx支持同时设置多组的负载均衡, 用来给不用的server来使用.
  • client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
  • client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
  • location 对URL进行匹配.可以进行重定向或者进行新的代理负载均衡
  • worker_connections  连接数(使用epoll的I/O模型):默认为1024
  • worker_processes  工作进程(nginx启动后有多少个worker处理http请求): 一般是你的cpu数,或者2倍

四、cookie分流

   这里使用正则匹配 ip地址后缀,使用不同的服务,实现分流。

#user  nobody;
 worker_processes  1;#error_log  logs/error.log;
 #error_log  logs/error.log  notice;
 #error_log  logs/error.log  info;
 #root   ;
 #pid        logs/nginx.pid; events {
     worker_connections  10240;
 } http {
     map $COOKIE_ickey $group { # 分配规则
         ~*[1-5]$ apache001;       # cookie 0-5结尾走apache001
         #~*[6-9]$ apache002;     # cookie 6-9 结尾走apache002
         default apache002;         #默认
     }
     upstream apache001 {
         server 192.168.0.101:7707 weight=1 max_fails=1 fail_timeout=30s;
     }    upstream apache002 {
         server 192.168.0.101:8808 weight=1 max_fails=1 fail_timeout=30s;
     }
     
     upstream root {
         server 192.168.0.101:8808 weight=1 max_fails=1 fail_timeout=30s;
     }
         
     server {
         listen 192.168.0.101:8090;# 监听 地址及端口
         server_name test.test.com;
             location / {
             proxy_redirect              off;
             proxy_set_header            Host $host;
             proxy_set_header            X-real-ip $remote_addr;
             proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
             index index.html index.htm;
             proxy_pass http://$group;
         }  
     }}


 


五、Nginx 其他参考

 nginx ftp 图片服务器搭建之后使用http访问进行配置文件的修改

 Linux 下 配置 Nginx 图片服务器

 Linux 搭建nginx 添加服务常用命令 及开机自启

 nginx 反向代理去除前缀